Redis一主多从及哨兵服务部署

Redis一主多从及哨兵服务部署


1、简述主从和哨兵的主要作用以及工作原理; 
2、利用三台服务器部署redis主从及哨兵(可以结合日志分析); 
 

 1、简述主从和哨兵的主要作用以及工作原理:

redis主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致。同时slave上还可以开启二级slave,三级slave从库。 Redis主从配置非常简单,只需要在Redis从库配置中指定slaveof ip port 即可,IP表示指定主库的ip,port表示redis监听端口。

redis主从虽然解决了单点导致的数据丢失问题,但是还是没有解决无缝的故障转移,也就是说在主库宕机后,从库无法自动切换为主库,需要手工去切换,在这一瞬间会对后端数据库造成极大的负载,可能直接导致后端数据宕机。

哨兵的主要作用:

监控:监控redis主库及从库运行状态;

通知:如果redis发生故障转移,可以通过邮件通知管理员;

自动故障转移:一旦发现主库宕机,则在从库中通过选举新的master进行故障转移

哨兵的工作原理:

哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。

每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方宕机了,这种宕机称为”主观认为宕机” Subjective Down,简称sdown)。

若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master真正宕机,即客观上认为宕机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。

2、利用三台服务器部署redis主从及哨兵(可以结合日志分析); 

环境:

Master:1772.20.26.167

Slave:172.20.26.198

Sentinel:172.20.26.24

在172.20.26.167服务器上,上传、编译安装redis-5.0.5

编辑源码目录中src文件里的Makefile 文件,修改安装目录

vim /usr/src/redis-5.0.5/src/Makefile

指定redis安装目录为/usr/local/redis

或者用这个命令直接覆盖Makefile里的安装目录,在redis源码目录里执行

 make PREFIX=/usr/local/redis install

在执行make && make install  #之前需要将相关的依赖环境安装好,如gcc环境

[root@localhost src]#yum -y install gcc gcc-c++ automake autoconf libtool make

[root@localhost src]#make distclean  #如再次编译失败,需要将上次编译失败的残留文件清除掉,再进行编译安装

[root@localhost src]# make && make install

[root@localhost redis-5.0.5]# ll /usr/local/redis/bin/

这里还缺少一个配置文件,需要从源码目录拷贝到redis 安装目录下

[root@localhost redis-5.0.5]# cp redis.conf /usr/local/redis/

[root@localhost redis-5.0.5]# cd /usr/local/redis  #进入安装目录下查看

[root@localhost redis]# /usr/local/redis/bin/redis-server ./redis.conf 

通过redis-server 命令 和redis.conf 配置文件启动redis 服务

从上图中可以查看redis 的版本信息、警告信息

接下来处理警告信息,并设置redis 后台运行以及日志显示问题,ctrl+c  关闭退出redis

[root@localhost redis]# vim /etc/sysctl.conf

net.core.somaxconn = 512

vm.overcommit_memory = 1

[root@localhost redis]# sysctl -p

net.core.somaxconn = 512

vm.overcommit_memory = 1

[root@localhost redis]# echo never > /sys/kernel/mm/transparent_hugepage/enabled

警告处理完成,接下来设置redis 后台运行

[root@localhost redis]# nohup /usr/local/redis/bin/redis-server ./redis.conf &

[root@localhost redis]#/usr/local/redis/bin/redis-cli -p 6379 shutdown    #关闭redis服务

也可以配置脚本启动,在源码目录下,使用install_server.sh脚本来配置实例。

[root@localhost redis]# /usr/src/redis-5.0.5/utils/install_server.sh

按回车键

查看redis 端口状态

关闭、开启redis服务

可以用绝对路径或者环境变量的方式来连接redis-cli

[root@localhost bin]# /usr/local/redis/bin/redis-cli

在slave172.20.26.198服务器上同样进行上传、编译安装redis,方法与在master172.20.26.167上一致。

在master 172.20.26.167服务器上

[root@localhost redis]# vim /usr/local/redis/6379/6379.conf

daemonize yes

bind 0.0.0.0 

[root@localhost redis]# /etc/init.d/redis_6379 restart

[root@localhost redis]# netstat -nltp

可以将/usr/local/redis/bin/redis-cli设置为redis-cli的别名

[root@localhost redis]# alias redis-cli='/usr/local/redis/bin/redis-cli'

在slave172.20.26.198服务器上

[root@localhost redis]# vim /usr/local/redis/6379/6379.conf

bind 0.0.0.0

[root@localhost redis]# /etc/init.d/redis_6379 restart

[root@localhost redis]# netstat -nltp

可以将/usr/local/redis/bin/redis-cli设置为redis-cli的别名

[root@localhost redis]# alias redis-cli='/usr/local/redis/bin/redis-cli'

配置主从库,在slave 172.20.26.198上指定master172.20.26.167主库即可

replicaof 172.20.26.167 6379   #主库IP地址、redis端口

info replication   验证是否成功

 [root@localhost redis]# tail /usr/local/redis/6379/redis_6379.log  #查看日志信息

也可以在主库172.20.26.167服务器查看日志

redis在连接成为slave 库之前的数据会在成为从库之后被清除掉,以master主库数据为准,保持一致。

再连接主库成为从库,将无法再写入,变为只读权限

上面是主从关系为临时立即生效,只在当前进程生效,当重启服务后会失效,

如果要使主从关系持久化,还需在配置文件里设置

[root@localhost redis]# vim /usr/local/redis/6379/6379.conf

replicaof 172.20.26.167 6379

[root@localhost redis]# /etc/init.d/redis_6379 restart

也可以在主库上查看状态

也可以设置密码认证,在主库中设置认证密码为123456

127.0.0.1:6379> auth 123456   主库上进行认证

127.0.0.1:6379> info replication  #查看主从关系状态

在从库上配置认证密码

再查看主从关系状态

在172.20.26.24服务器上同样进行上传、编译安装redis,方法与在master172.20.26.167上一致。

我们将172.20.26.24 添加为172.20.26.198 的从库

bind 0.0.0.0

replicaof 172.20.26.198 6379

重启redis 服务,状态为down ,检查主库是否设置了密码或者主库宕机,这里我们前面172.20.26.167、172.20.26.198 设置了密码认证。

我们将主库172.20.26.167、172.20.26.198里的密码认证设置一行注释掉,停止、再启动redis服务,再查看主从库的连接状态,主库连接了2台从库,172.20.26.198、172.20.26.24。

查看172.20.26.198从库的连接状态

查看172.20.26.24从库的连接状态

Redis 一主多从配置完成。

接下来配置哨兵模式,配置哨兵模式前先要确认好主从关系是否正常

因为哨兵模式涉及法定认为下线人数,所以哨兵模式一般选择单数量的服务器,因此我们继续选择在172.20.26.167\172.20.26.198\172.20.26.24三台服务器上都配置哨兵模式。

在172.20.26.167服务器上从redis源码目录下复制哨兵配置文件sentinel.conf到redis安装目录下

[root@localhost ~]# cp /usr/src/redis-5.0.5/sentinel.conf /usr/local/redis

[root@localhost redis]# vim sentinel.conf

在修改好sentinel.conf 文件后,须在没有启动哨兵服务之前,将配置文件拷贝给172.20.26.198、172.20.26.24其他哨兵节点服务器,因为哨兵在启动后将由它自己来管理配置文件,一旦启动后,配置文件将发生变化

sentinel.conf 文件均已拷贝过来,因哨兵主库的IP地址都一样,所以不用再修改

在主库172.20.26.167上启动哨兵,查看配置文件的变化、以及端口

[root@localhost redis]# /usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel.conf  #启动哨兵

[root@localhost redis]# vim sentinel.conf   #查看配置文件的变化

查看端口

两台从库也启动哨兵,查看配置文件的变化以及端口情况

在主从库服务器上通过/usr/local/redis/bin/redis-cli -p 26379 连接哨兵服务器,看到的信息是一样的,都能看到状态是ok,主库IP地址和端口,slave是2个,哨兵节点是3个,表示我们的哨兵模式配置完成.

如果我们将主库redis服务stop掉,从库在到达设定的时间(30秒)后将重新提升一台从库变为主库

30秒后查看状态以及查看日志信息

我们在新主库上查看redis-cli 的info replication 状态

[root@localhost redis]# /usr/local/redis/bin/redis-cli

127.0.0.1:6379> info replication

发现只有1台从库,因为172.20.26.167 已经宕机

我们把172.20.26.167 启动

目前三台服务器优先级是默认的100,如果想让哪台充当主库,可以将优先级设置小点即可,比如我们现在将172.20.26.167的优先级改为90,再把目前的主库172.20.26.198 stop掉,那么172.20.26.167将按照优先级的高低转移成为新的主库

保存退出,重新启动

再将现在的主库172.20.26.198 服务stop掉,根据优先级,172.20.26.167将成为新主库。

将172.20.26.198服务启动

[root@localhost redis]# /etc/init.d/redis_6379 start

哨兵模式配置完成。

  • 25
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Redis一主一从哨兵模式中,需要先安装好主从模式。然后在所有节点上部署哨兵模式,哨兵模式会监控所有的Redis工作节点是否正常。当主节点出现问题时,其他节点与主节点失去联系,哨兵会进行投票,投票过半认为主节点出现问题。然后哨兵会通知其他哨兵,并从从节点中选取一个作为新的主节点。自动故障转移的过程中,断开主节点与从节点的连接,选取一个从节点作为新的主节点,并将其他从节点连接到新的主节点。\[1\]\[3\] 启动哨兵模式时,需要先启动主节点,然后再启动从节点。可以使用以下命令启动哨兵模式: ``` redis-sentinel redis-5.0.4/sentinel.conf & ``` 其中,`redis-5.0.4/sentinel.conf`是配置文件的路径。可以使用`tail -f /var/log/sentinel.log`命令查看哨兵模式的日志。\[2\] 需要注意的是,哨兵也是一台Redis服务器,但不提供数据服务哨兵的启动依赖于主从模式,所以在部署哨兵模式之前,需要先安装好主从模式。\[1\]\[3\] #### 引用[.reference_title] - *1* *2* [Redis哨兵模式](https://blog.csdn.net/weixin_50345054/article/details/111479297)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [详解Redis主从及哨兵模式](https://blog.csdn.net/weixin_47403060/article/details/109613140)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lqcbj_IT老混混

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值