前言
实现 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 password(your password
自行更改为你自己的密码),特别注意要顶格写,即 requirepass 666666 -> 设置密码
20. ctrl + F 查找 masterauth,紧接着下面写一行 masterauth your password(your 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. 证明集群搭建成功
扩展
希望能够帮助到你
over