在我的上一篇博文Redis汇总里主从和哨兵Sentinel讲的已经很明白了,但Redis集群虽说在之前的两篇文章Linux搭建集群、Windows搭建集群都有提到,且成功搭建运行。但,感觉还是不对劲,首先是不满足主从自动切换,因为我用的是多个服务商的云作为服务器来搭建,其次是任意一个主节点挂掉,Redis服务就死了,也就是说整个服务就宕机了,这绝对是不行的。
# 集群宕机规则
1、超过一半master挂掉,整个集群宕机,终止服务
2、任意一个master主节点挂掉、且它所属slave从节点也死掉,无论其他节点是否都正常运行,整个集群一样宕机,即:终止服务
后来,我通过在本地局域网重新进行搭建,解决了上述的两个问题,并验证了这两个规则,是正确的。首先将下载的Redis拷贝六份。因为Redis集群是多个主从+Sentinel哨兵的整和。也就是将一个服务均摊给多台机器进行负载均衡,从而缓解服务器的压力,避免一台机器对用户的请求和数据处理响应不过来。每份配置文件都一样,这就让搭建的过程变得方便的多。
Windows配置文件如下
# 端口
port 6371
# 支持持久化
appendonly yes
# 日志
logfile C:/Files/Redis/Cluster/Logs/Log.txt
# 日志类型
loglevel verbose
# 密码
#requirepass 123@456
# 主从切换密码验证
#masterauth 123@456
# 允许创建集群
cluster-enabled yes
# 允许远程
protected-mode no
Linux配置文件如下:
# 端口
port 6379
# 运行后台运行
daemonize yes
# 支持持久化
appendonly yes
# 启动服务配置文件
pidfile /var/run/redis/redis-server.pid
# 日志类型
loglevel verbose
# 日志位置
logfile /var/log/redis/redis-server.log
# redis目录
dir /var/lib/redis
# 配置密码
#requirepass 123@456
# 主从切换密码验证
#masterauth 123@456
# 从服务器只读选项,默认是yes,只读模式
slave-read-only yes
# 允许远程
protected-mode no
# 开启集群
cluster-enabled yes
这里有个小技巧,我的密码配置是注释了的。因为拥有密码验证的情况下是不允许创建集群的,因为没有进行密码验证。有朋友肯定会说,那就进行密码验证啊,对吧。不是不可以,只是处理起来很复杂,找了很多大牛的文章,都是通过脚本来进行处理,多麻烦啊。为什么不直接省事开始呢?创建完集群,再配置密码,流程清晰、简单,也省得到处去整些不是很明白的脚本,我们的目的就是搭建Redis集群啊,何必跑偏。配置完成后,启动把6个服务通通启动:
通过ipconfig命令得到本机所在局域网的IP:
进入上述6个Redis文件的任意一个的Redis目录下,使用如下命令创建集群,注意更换成你自己的IP:
redis-cli --cluster create 192.168.157.1:6371 192.168.157.1:6372 192.168.157.1:6373 192.168.157.1:6374 192.168.157.1:6375 192.168.157.1:6376 --cluster-replicas 1
根据提示输入yes即可:
创建成功:
接下来配置下密码验证,即:将配置文件的注释**#**去掉。记住,一定要创建集群后再配置密码啊,不然你创建的时候,会报错,没有auth认证授权。配置完成后,我们重启服务即可:
使用集群方式登录:
# 客户端集群模式登入
redis-cli -h 192.168.157.1 -c -p 6371
# 进行密码验证
auth 123@456
# 查看集群信息
cluster info
# 查看集群节点分配
cluster nodes
# 查看哈希槽分配
cluster slots
现在模拟宕机情景,当我们挂掉一个master,查看集群状态时发现:主节点挂掉一个,但集群仍然正常服务,但当主节点重启后,自动变成了从节点,也就说明集群的主从是自动切换的。
当我们同时宕机两个主节点,也就是挂掉两个master,发现:集群已经不再提供服务了。
当我们同时宕机掉其中一个主节点和它所有的从节点,发现:Redis集群服务又终止了。
当我们重启所有服务,集群正常运作。到此,我们的Redis集群,可算完成了,也基本了解和掌握其正常的运作方式,奥利给!