暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis一主两从+3哨兵部署

手机用户1559 2024-01-30
804

 

 

 

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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论