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

发布时间:2024年01月21日

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

哨兵模式配置完成。

文章来源:https://blog.csdn.net/lqcbj/article/details/135665047
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。