在Redis3.0以前,提供了Sentinel工具来监控Master的状态,如果Master异常,则会做主从切换,将slave作为master,将master作为slave。其配置也是稍微的复杂,并且各方面表现一般。现在redis3.0已经支持集群的容错功能,并且非常简单。
集群的搭建:至少三个master
第一步:创建一个文件夹redis-cluster,然后在其下面分别创建6个文件夹:
- mkdir -p /usr/local/redis-cluster
- mkdir 7001、mkdir 7002、mkdir 7003、mkdir 7004、mkdir 7005、mkdir 7006
第二步:把之前的redis.conf配置文件分别copy到700*下,进行修改各个文件内容,也就是对700*下的每一一个copy的redis.conf文件进行修改!如下
- daemonize yes
- port 700*(分别对每一个机器的端口号进行设置)
- bind 192.168.154.101(必须绑定当前机器的ip,不然会无限悲剧下去)
- dir /usr/local/redis-cluster/700*/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
- cluster-enabled yes(开启集群模式)
- cluster-config-file nodes700*.conf(这里700*最好和port对应上,集群内部的配置文件) 这个配置文件就是让其余的所有节点都知道自己的存在
- cluster-node-timeout 5000
- appendonly yes
- appendfsync always
- pidfile /var/run/redis_700*.pid
第三步:由于redis集群需要ruby命令,所以我们需要安装ruby
- yum install ruby
- yum install rubygems
- gem install redis(安装redis和ruby的接口)
- 在第三步的时候,我遇到了一个bug,Error installing redis: redis requires Ruby version >= 2.3.0.具体的解决办法请参考https://blog.csdn.net/weixin_41836393/article/details/94848178
第四步:分别启动6个redis实例,然后检查是否启动成功
- redis-server /user/local/redis-cluster/700*/redis.conf
- ps -ef | grep redis 查看是否启动成功
第五步:首先到redis5.0的安装目录下,然后执行redis-trib.rb命令
- cd /usr/local/redis5.0/src
- ./redis-trib.rb create --replicas 1 192.168.154.101:7001 192.168.154.101:7002 192.168.154.101:7003 192.168.154.101:7004 192.168.154.101:7005 192.168.154.101:7006(其中1是代表主节点与从节点的比值,前面3个代表主节点,后面3个代表从节点,第一个和第四个代表一个主从) -----这是redis3.0的命令
- redis-cli --cluster create 192.168.154.101:7001 192.168.154.101:7002 192.168.154.101:7003 192.168.154.101:7004 192.168.154.101:7005 192.168.154.101:7006 --cluster-replicas 1 ---这是redis5.0的命令(前面3个是主节点,后面3个是从节点,但是不一定是第一个和第四个组成一个主从节点了,虽然从下面看到的是7001对应7005,但是实际还是7001对应7004,而且在从节点中也可以写入,只是最终写入的结果会写入到3个主节点上)
第六步:到此为止我们的集群已经搭建成功了!进行验证:
- 连接任意一个客户端即可:redis-cli -c -h -p (-c表示集群模式,指定ip地址和端口号)如:redis-cli -c -h 192.168.154.101 -p 700*
- 进行验证:cluster info(查看集群信息)、cluster nodes(查看节点列表)
- 进行数据操作验证
- 关闭集群则需要逐个进行关闭,使用命令:redis-cli -c -h 192.168.154.101 -p 700* shutdown
第八步:友情提示:当出现集群无法启动时,删除临时的数据文件——nodes-700*.conf,再次重新启动每一个redis服务,然后重新构造集群环境。