在前三篇文章《大数据学习初级入门教程(二) —— Redis 3.x 单节点的安装、启动和测试》、《大数据学习初级入门教程(六) —— Redis 3.x 伪分布式集群的安装、配置、启动和测试》和《大数据学习初级入门教程(七) —— Redis 3.x 完全分布式集群的安装、配置、启动和测试》中,已经对 Redis3.x 的单节点安装、伪分布式集群安装和完全分布式集群安装过程详细做了安装、配置、启动和测试,但工作过程中发现,很多 Redis 集群都是哨兵模式,这篇文章主要借鉴前面的伪分布式集群,搭建一个伪分布式的哨兵模式集群。
集群搭建条件:
由于 Redis 集群哨兵一版配置奇数个节点,比如3、5、...,这里定三个哨兵节点,一个主节点和两个从节点,即 1 + 2 + 3 模式。所以总共需要6个redis节点。正好原先的搭建的 Redis 伪分布式集群有 6 个节点,复制过来直接改改配置。
第一步,创建存放集群环境的目录文件夹。
第二步,复制已经安装的 redis。
把已经安装的伪分布式 redis 集群目录下的 6 个节点所有文件复制到 redis-sentinel 目录下。
命令:cp -R redis-cluster/redis0* redis-sentinel/
第三步,删除原 redis0* 节点下的其它文件。
命令:cd redis-sentinel/
rm -f redis0*(型号自行替换)/dump.rdb
rm -f redis0*(型号自行替换)/appendonly.aof
rm -f redis0*(型号自行替换)/mybatis.log
rm -f redis0*(型号自行替换)/nodes.conf
第四步,修改 redis.conf 配置文件。
为了防止和原集群冲突,最好把主节点(redis01)和从节点(redis02、redis03)的配置改一下。
命令:vi redis01/redis.conf
修改几个地方,首先修改端口号,原来已经修改为 7000,现修改为 8000。
修改 pid 进程文件名,原来已经修改为 redis_7000.pid,现修改为 redis_8000.pid。
修改 log 文件名,原来已经修改为 redis_7000.log,现修改为 redis_8000.log,注意如果没有对应的文件夹,需要提前创建。
修改集群模式为 no。
同理,从节点相关部分修改为 8001、8002。并修改 slaveof 配置为如下:
slaveof 192.168.220.100 8000
第四步,复制 sentinel.conf 配置文件。
删除哨兵节点中的 redis.conf 配置文件,从安装包目录拷贝 sentinel.conf 到哨兵节点目录。修改配置如下:
bind 0.0.0.0
port 28003
pidfile /var/run/redis_28003.pid
logfile "/var/log/redis/redis_28003.log"
daemonize yesdir ./
sentinel monitor mymaster 192.168.220.100 8000 2
sentinel auth-pass mymaster 123456
另外两个哨兵模式中,相关端口部分分别修改为 28004 和 28005。
第五步,启动集群。
先启动主节点服务,再启动从节点服务,最后启动哨兵节点服务,启动命令如下:
主从节点:./redis-server redis.conf
哨兵节点:./redis-sentinel sentinel.conf
启动后查看进程是否正常:
打开哨兵节点配置文件,可以看到配置文件被动态修改,文件末尾添加了从节点及其它哨兵节点信息。
命令: cat redis04/sentinel.conf
sentinel known-slave mymaster 192.168.220.100 8002
sentinel known-slave mymaster 192.168.220.100 8001
sentinel known-sentinel mymaster 192.168.220.100 28005 6fbd835e6e19c45314a28f3fa26d262c15985753
sentinel known-sentinel mymaster 192.168.220.100 28004 f99299720cf52bc967f37a91cdb7ce465f119c24
sentinel current-epoch 0
第六步,测试集群。
连接主节点客户端,查看信息:
连接从节点客户端,查看信息:
连接哨兵节点客户端,查看信息:
杀掉主节点进程,查看从节点是否变为主节点:
可以看到从节点 redis02 变为了主节点。
哨兵节点配置文件也更新为如下信息。
sentinel known-slave mymaster 192.168.220.100 8002
sentinel known-slave mymaster 192.168.220.100 8000
sentinel known-sentinel mymaster 192.168.220.100 28004 f99299720cf52bc967f37a91cdb7ce465f119c24
sentinel known-sentinel mymaster 192.168.220.100 28005 6fbd835e6e19c45314a28f3fa26d262c15985753
sentinel current-epoch 1
当杀掉的原主节点启动后,则变为现在集群中的一个从节点而已。
常见错误解答
问题一:启动哨兵节点报错,信息如下:
*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 93
>>> 'sentinel auth-pass mymaster 123456'
No such master with specified name.
可能原因:需要吧密码配置放到哨兵信息下面,如果放上面,则报上面错误,如:
sentinel monitor mymaster 192.168.220.100 8001 2
sentinel auth-pass mymaster 123456
问题二:主节点杀掉后,从节点不自动变为主节点,及主从无法切换。
可能原因:哨兵模式中配置的主节点信息有误,或者是配置文件中 bind 0.0.0.0 配置有误导致的。
到此,搭建、配置、测试 Redis 在哨兵模式下主从节点的切换完成了,Good Luck!