前言

  实现 Redis 集群有多种方式,本篇博客搭建的是 Redis Cluster 集群。此次搭建至少需要六个 Redis 实例,为什

  么是六个呢?是因为 Redis Cluster 中有一个投票容错机制,超过半数的节点检测认为某一节点已经失效了,那

  么就会放弃此节点,所以至少有三个节点;并且 Redis Cluster 为了保证高可用,加入了主从模式,则一共就有

  六个节点,也是六个 Redis 实例

  工欲善其事必先利其器,操作 Linux 服务器得有一个用着舒服的客户端,这里推荐使用 MobaXterm

  MobaXterm 下载地址:https://mobaxterm.mobatek.net/download.html

  单机 Redis 搭建可以参考另一篇博客:CentOS7中安装Redis4.0.14

准备工作 - 可执行程序

  1. 如果是按照 CentOS7中安装Redis4.0.14 此博客搭建的单机版 Redis

  2. 输入命令 cd /usr/local/redis/init/redis-4.0.14/src -> 进入到 Redis 解压缩目录/src

  3. 如果不是按照 CentOS7中安装Redis4.0.14 此博客搭建的,那么就进入到你之前解压缩目录/src

  4. 输入命令 cp redis-cli /usr/local/bin/ -> 复制 Redis 客户端

  5. 输入命令 cp redis-server /usr/local/bin/ -> 复制 Redis 服务端

  6. 输入命令 cp redis-trib.rb /usr/local/bin/ -> 复制 Redis Cluster 管理工具

准备工作 - 集群所需目录及配置文件

  1. 先给每个实例创建一个文件夹

  2. 输入命令 cd /usr/local/ -> 进入目录

  3. 输入命令 mkdir redis-cluster -> 新建文件夹

  4. 输入命令 cd redis-cluster/ -> 进入目录

  5. 轮流输入命令 mkdir 7000、mkdir 7001、mkdir 7002、mkdir 7003、mkdir 7004、mkdir 7005 

      -> 新建文件夹

  6. 输入命令 cd /usr/local/redis/init/redis-4.0.14/ -> 再次回到 Redis 解压缩目录

  7. 输入命令 cp redis.conf /usr/local/redis-cluster/ -> 复制配置文件到刚刚新建的目录中

  8. 输入命令 cd /usr/local/redis-cluster/ -> 回到 redis-cluster

  9. 把 redis.conf 配置文件分别复制到 7000 ~ 7005 目录中,如 cp redis.conf 7000/,其他不再赘述

 10. 输入命令 cd 7000/ -> 进入目录

 11. 文件内容太长了,这里我直接双击打开 redis.conf 文件,这样的话修改方便

 12. ctrl + F 查找 port,把端口更改为 7000,即 port 7000 -> 修改端口

 13. ctrl + F 查找 bind 127.0.0.1,一共有两处,把第二处的 bind 127.0.0.1 注释,即 # bind 127.0.0.1

      -> 外网可访问

 14. ctrl + F 查找 daemonize no,把 no 更改为 yes,即 daemonize yes -> 后台启动

 15. ctrl + F 查找 pidfile,更改为 7000,即 pidfile /var/run/redis_7000.pid -> 守护进程方式运行

 16. ctrl + F 查找 cluster-enabled,把注释去掉,即 cluster-enabled yes -> 开启集群

 17. ctrl + F 查找 cluster-config-file,把注释去掉,并更改为 7000,即 cluster-config-file nodes-7000.conf

      -> 集群的配置

 18. ctrl + F 查找 cluster-node-timeout,把注释去掉,即 cluster-node-timeout 15000 -> 请求超时时间

 19. ctrl + F 查找 requirepass foobared,紧接着下面写一行 requirepass your passwordyour password

      自行更改为你自己的密码),特别注意要顶格写,即 requirepass 666666 -> 设置密码

 20. ctrl + F 查找 masterauth,紧接着下面写一行 masterauth your passwordyour password 自行更改为

      你自己的密码),特别注意要顶格写,即 masterauth 666666 -> 设置主库密码

 21. 还有 7001 ~ 7005 配置与 7000 类似,仅下面三处不同,也就是把 7000 更改为对应的数字,其他配置一致

      ① port -> port 7000、port 7001...

      ② pidfile -> pidfile /var/run/redis_7000.pid、pidfile /var/run/redis_7001.pid...

      ③ cluster-config-file -> cluster-config-file nodes-7000.conf、cluster-config-file nodes-7001.conf...

启动每一个实例

  1. 输入命令 cd /usr/local/redis-cluster/7000/ -> 进入目录

  2. 输入命令 redis-server redis.conf -> 启动 Redis

  3. 还有 7001 ~ 7005 启动方式一样,进入到各自目录使用 redis-server redis.conf 命令启动

  4. 全部执行后,输入命令 ps -aux | grep redis -> 查看 Redis 启动情况

  注:使用 redis-trib.rb 可以把启动的 Redis 实例连接在一起构建成集群,但是这里是第一次所以需要一些环境

配置环境

  1. 输入命令 yum -y install ruby ruby-devel rubygems rpm-build -> 安装 ruby

  2. 输入命令 gem install redis -> 安装 Redis 和 ruby 接口

  3. 结果报了如下错误

ERROR:  Error installing redis:
        redis requires Ruby version >= 2.3.0.

  4. 默认安装的 Ruby 版本为 2.0.0 的,这里需要手动安装更高的版本

  5. 输入命令 yum -y install curl -> 安装 curl

  6. 输入命令 -> 安装 rvm 前配置公钥

gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

  7. 输入命令 curl -L get.rvm.io | bash -s stable -> 安装 rvm

  8. 输入命令 gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ -> 更改为

      国内镜像

  9. 输入命令 rvm list known -> 查看 rvm 库中已知的 ruby 版本

 10. 结果发现 rvm 不是内部命令

 11. 输入命令 find / -name 'rvm' -> 查找 rvm 相关目录及文件

/usr/local/rvm
/usr/local/rvm/lib/rvm
/usr/local/rvm/scripts/rvm
/usr/local/rvm/src/rvm
/usr/local/rvm/src/rvm/lib/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/bin/rvm

 12. 输入命令 source /usr/local/rvm/scripts/rvm -> 执行脚本

 13. 这时再输入命令 rvm -v -> 查看 rvm 版本

rvm 1.29.9 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]

 14. 输入命令 rvm install 2.3.3 -> 安装指定版本的 ruby

 15. 输入命令 rvm use 2.3.3 -> 使用指定版本的 ruby

 16. 输入命令 rvm use 2.3.3 --default -> 设置为默认版本

 17. 输入命令 rvm remove 2.0.0 -> 卸载不需要的版本

 18. 输入命令 ruby --version -> 查看 ruby 版本

ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]

 19. 输入命令 gem install redis -> 再次安装 Redis 和 ruby 接口

构建集群

  1. 输入命令 -> 使用 redis-trib.rb 构建集群

redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
  • --replicas 1:主节点和从节点的比例

  2. 结果发现又报错了

>>> Creating cluster
[ERR] Sorry, can't connect to node 127.0.0.1:7000

  3. 由于在 redis.conf 中配置了密码,所以需要设置访问密码

  4. 输入命令 find / -name 'client.rb' -> 查找 client.rb 相关目录及文件

/usr/share/ruby/xmlrpc/client.rb
/usr/local/rvm/gems/ruby-2.3.3/gems/redis-4.1.2/lib/redis/client.rb
/usr/local/rvm/src/ruby-2.3.3/lib/xmlrpc/client.rb
/usr/local/rvm/rubies/ruby-2.3.3/lib/ruby/2.3.0/xmlrpc/client.rb

  5. 输入命令 vim /usr/local/rvm/gems/ruby-2.3.3/gems/redis-4.1.2/lib/redis/client.rb -> 编辑文件

  6. 设置 password 为 redis.conf 中配置的密码,如下

DEFAULTS = {
      :url => lambda { ENV["REDIS_URL"] },
      :scheme => "redis",
      :host => "127.0.0.1",
      :port => 6379,
      :path => nil,
      :timeout => 5.0,
      :password => "666666",
      :db => 0,
      :driver => nil,
      :id => nil,
      :tcp_keepalive => 0,
      :reconnect_attempts => 1,
      :reconnect_delay => 0,
      :reconnect_delay_max => 0.5,
      :inherit_socket => false
    }

  7. 轮流输入命令 esc -> shift 冒号 -> wq -> 回车

  8. 再次输入命令 -> 使用 redis-trib.rb 构建集群

redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

  9. 询问 Can I set the above configuration? (type 'yes' to accept):,输入 yes 即可

 10. 可以清楚的看到主备情况(M 为主,S 为备)

验证

  1. 使用 Redis 客户端连接集群,只需连接集群中任意一个节点即可

  2. 输入命令 redis-cli -h 127.0.0.1 -c -p 7001 -a 666666 -> 连接 Redis 集群(这里是 7001 端口)

  • -h:ip 地址
  • -c:连接到集群
  • -p:端口
  • -a:连接密码,此密码为 redis.conf 中配置的密码

  3. 输入命令 set zwc cdy -> 存数据

  4. 这时 Redis 会根据自己的算法,把此 key-value 存到对应位置

-> Redirected to slot [4802] located at 127.0.0.1:7000
OK
127.0.0.1:7000>

  5. 此时发现连接的是 7001,key-value 被存入了 7000 中

  6. 输入命令 exit -> 退出

  7. 输入命令 redis-cli -h 127.0.0.1 -c -p 7003 -a 666666 -> 连接 Redis 集群(这次是 7003 端口)

  8. 输入命令 get zwc -> 取数据

127.0.0.1:7003> get zwc
-> Redirected to slot [4802] located at 127.0.0.1:7000
"cdy"
127.0.0.1:7000>

  9. 证明集群搭建成功

 


 

扩展

CentOS7中常用命令行

 

希望能够帮助到你

over