Redis一主两从+3哨兵部署
一主两从搭建
/redis6.0/redis-6.0.6
10.123.10.201 node 主
10.123.10.202 node 从
10.123.10.203 node 从
主redis.conf
# 修改redis配置文件:/etc/redis.conf
# 1. 修改绑定ip为服务器内网ip地址,做绑定,三台各自填写各自的ip地址
bind 10.123.10.201
# 2. 保护模式修改为yes
protected-mode
yes
# 4. 设定密码
requirepass "123456789"
# 5. 设定主库密码与当前库密码同步,保证从库能够提升为主库
masterauth "123456789"
# 6. 打开AOF持久化支持
appendonly yes
#7. Port
6379
从redis.conf
基本配置和主库相同,bindip地址各自对应各自的,port是各自的端口6380,6381
需要添加主库同步配置
# 主库为主虚拟机的地址
slaveof 10.123.10.201 6379---slaveof 是老版本
replicaof 10.123.10.201 6379---replicaof是新版本
哨兵配置
哨兵模式已经被集成在redis2.4之后的版本中。
sentinel是redis高可用的解决方案,sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;
当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。
sentinel可以让redis实现主从复制,当一个集群中的master失效之后,sentinel可以选举出一个新的master用于自动接替master的工作,集群中的其他redis服务器自动指向新的master同步数据。
一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。其结构如下:
sentinel.conf
注意:含有mymaster的配置,都必须放置在sentinel monitor mymaster 10.123.10.201 6379 2之后,否则会出现问题
拷贝sentinel.conf为redis-sentinel.conf
# 修改redis-sentinel配置文件:/etc/redis-sentinel.conf
# 1. 绑定的地址
bind 172.19.131.247
# 2. 保护模式修改为yes
protected-mode yes
# 3. 设定sentinel
myid 每个都不一样,使用yum安装的时候,直接就生成了
sentinel myid
04d9d3fef5508f60498ac014388571e719188527
# 4. 设定监控地址,为对应的主redis库的内网地址
sentinel monitor mymaster 172.16.48.129
6379 2
# 5. 设定5秒内没有响应,说明服务器挂了,需要将配置放在sentinel monitor master 127.0.0.1
6379 1下面
sentinel down-after-milliseconds mymaster
5000
# 6. 设定15秒内master没有活起来,就重新选举主
sentinel failover-timeout mymaster 15000
# 7. 表示如果master重新选出来后,其它slave节点能同时并行从新master同步缓存的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保定的设置为1,只同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。
sentinel parallel-syncs mymaster 2
# 8. 主数据库密码,需要将配置放在sentinel monitor master 127.0.0.1 6379 1下面
sentinel auth-pass mymaster 123456
参数sentinel myid
如果是复制的sentinel.conf ,则sentinel myid如何查看
可以把参数sentinel myid给注销,启动sentinel后,日志文件有对应的sentinel id,再添加到sentinel.conf文件中即可。
启动哨兵进程
Redis-sentinel sentinel.conf
或者 redis-server sentinel.conf
- -sentinel
哨兵配置好后 需要重新启动redis
先master---再slave---最后sentinel
redis sentinel 相关命令
登录sentinel查看状态
Redis-cli –p 26379
Info sentinel
当前是只启动了一个sentinel进程
查看sentinel.log内容有:
查看sentinel.log
[root@yiyuan1 redis-6.0.6]# more
sentinel26379.log
5667:X 08 Mar 2023 14:59:40.310 #
oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
5667:X 08 Mar 2023 14:59:40.310 # Redis
version=6.0.6, bits=64, commit=00000000, modified=0, pid=5667, just started
5667:X 08 Mar 2023 14:59:40.310 #
Configuration loaded
5668:X 08 Mar 2023 14:59:40.322 * Increased maximum number of open files to 10032 (it was
originally set to 1024).
5668:X 08 Mar 2023 14:59:40.323 * Running
mode=sentinel, port=26379.
5668:X 08 Mar 2023 14:59:40.323 # WARNING:
The TCP backlog setting of 511 cannot be enforced because
/proc/sys/net/core/somaxconn is set to the lower va
lue of 128.
5668:X 08 Mar 2023 14:59:40.339 # Sentinel
ID is 612e15b8f6dbfcd6801c1d0288670346d347d022
5668:X 08 Mar 2023 14:59:40.339 # +monitor
master mymaster 10.123.10.201 6379 quorum 2
5668:X 08 Mar 2023 15:00:10.339 # +sdown
master mymaster 10.123.10.201 6379
5668:X 08 Mar 2023 15:12:44.592 # User
requested shutdown...
5668:X 08 Mar 2023 15:12:44.592 * Removing
the pid file.
5668:X 08 Mar 2023 15:12:44.592 # Sentinel
is now ready to exit, bye bye...
5883:X 08 Mar 2023 15:17:42.158 #
oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
5883:X 08 Mar 2023 15:17:42.160 # Redis
version=6.0.6, bits=64, commit=00000000, modified=0, pid=5883, just started
5883:X 08 Mar 2023 15:17:42.160 #
Configuration loaded
5884:X 08 Mar 2023 15:17:42.168 * Increased
maximum number of open files to 10032 (it was originally set to 1024).
5884:X 08 Mar 2023 15:17:42.170 * Running
mode=sentinel, port=26379.
5884:X 08 Mar 2023 15:17:42.170 # WARNING:
The TCP backlog setting of 511 cannot be enforced because
/proc/sys/net/core/somaxconn is set to the lower va
lue of 128.
5884:X 08 Mar 2023 15:17:42.170 # Sentinel
ID is 612e15b8f6dbfcd6801c1d0288670346d347d022
5884:X 08 Mar 2023 15:17:42.170 # +monitor
master mymaster 10.123.10.201 6379 quorum 2
5884:X 08 Mar 2023 15:18:12.179 # +sdown
master mymaster 10.123.10.201 6379
问题1:Increased maximum number of open files to 10032
(it was originally set to 1024).
方法:ulimit -n 10032 后,再启动sentinel
问题2:WARNING: The TCP backlog setting
of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the
lower value of 128
方法:内核参数默认128,对于负载很大的服务是不够的。改为2048或者更大
echo 2048 > /proc/sys/net/core/somaxconn ##系统重启后失效
vi /etc/sysctl.conf
net.core.somaxconn = 2048
保存,然后
sysctl -p
方法2:原因就是因为128太小了。
执行echo 511 >
/proc/sys/net/core/somaxconn命令就把这个问题解决了。
但是这个只是暂时的。如果想要永久解决,打开vi /etc/sysctl.conf
在/etc/sysctl.conf这里面添net.core.somaxconn= 1024
然后执行sysctl -p 就可以永久消除这个warning
Sentinel 启动后监控mymaster状态为sdown
master0:name=mymaster,status=sdown,address=10.123.10.201:6379,slaves=0,sentinels=1
问题3:
搭建好哨兵之后,哨兵一启动,过了30秒就会判断master sdown,但是检查配置是没有问题。
原因是没有设置节点认证的密码,也就是我的redis设置了节点通信的密码,那么在哨兵里面也是需要配置的。
即在哨兵配置文件中添加
sentinel auth-pass mymaster xxxx
添加重启后:
这里的slaves=2 是两个从库,sentinels=2
是由两个sentinel监控
Sentinel.conf文件中的其他参数-重要
sentinel known-replica mymaster
172.20.12.139 6381
sentinel known-replica mymaster
172.20.12.139 6379
sentinel known-sentinel mymaster
172.20.12.139 26381 0486f3d225c1c9c68b64237d1ee4e6a7290f9a03
sentinel known-sentinel mymaster
172.20.12.139 26379 6b352a315c93e32f4a607c149d0860954f5ee58d
故障测试
主动把201 6379主down
哨兵简单的配置后,把201 6379 redisshutdown后,再查看 202 和203状态,自动把202节点选举为主了
特别注意的是slaves=2竟然还是两个,原因看sentinel slaves mymaster 命令
看来即使把原来的主down了也会把ip添加为slave的。
再把原主201 6379起来
看日志会自动添加为从 ok




