Redis的主从复制和高可用搭建(sentinel哨兵机制)

本文详细介绍了Redis的主从复制配置过程,包括软件安装、依赖包编译及配置文件修改。同时,深入探讨了如何利用哨兵机制实现主从切换,以提高Redis服务的高可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验环境:

server1:172.25.26.1 master
server2:172.25.26.2 slave
server3:172.25.26.3 slave

一、redis的主从复制

1.编译安装软件(server1,server2,server3都做)
(1)下载安装包,并解压

[root@server1 ~]# ls
redis-5.0.3.tar.gz
[root@server1 ~]# tar zxf redis-5.0.3.tar.gz 

2.安装依赖包,并编译安装

[root@server1 ~]# cd redis-5.0.3
[root@server1 redis-5.0.3]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README.md  runtest-cluster  src
[root@server1 redis-5.0.3]# yum install gcc -y
[root@server1 redis-5.0.3]# make && make install

3.执行redis安装脚本

[root@server1 redis-5.0.3]# cd utils/
[root@server1 utils]# ./install_server.sh 

在这里插入图片描述
此时netstat -antlp会出现6379端口 (server1,2,3上都一样)
在这里插入图片描述
2.server1配置redis

[root@server1 utils]# vim /etc/redis/6379.conf
  70 bind 0.0.0.0    
[root@server1 utils]# systemctl restart redis_6379.service		##重启服务

在配置文件redis.conf中,默认的bind 接口是127.0.0.1,也就是本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接,这样可以避免将redis服务暴露于危险的网络环境中,防止一些不安全的人随随便便通过远程连接到redis服务。如果将bind选项注释的话,那会接受所有来自于可用网络接口的连接。

3.server2和server3配置redis

[root@server2 utils]# vim /etc/redis/6379.conf 
70 bind 0.0.0.0
282 slaveof 172.25.26.1 6379   ##添加salve指向master为server1
[root@server2 utils]# systemctl restart redis_6379.service

[root@server3 utils]# vim /etc/redis/6379.conf 
70 #bind 0.0.0.0				##注意这里的注释
282 slaveof 172.25.26.1 6379
[root@server3 utils]# systemctl restart redis_6379.service

4.测试
(1)在server1(master)添加key-value值

[root@server1 utils]# redis-cli
127.0.0.1:6379> set name westos
OK

(2)在server2,server3上可以看到添加的信息,表示主从复制成功

[root@server2 utils]# redis-cli
127.0.0.1:6379> get name
"westos"

[root@server3 utils]# redis-cli
127.0.0.1:6379> get name
"westos"

二.redis的主从切换实现高可用(哨兵机制)
1.server1(master),将 sentinel.conf复制到 /etc/redis/,并做相应编辑

[root@server1 ~]# cd redis-5.0.3
[root@server1 redis-5.0.3]# cp sentinel.conf /etc/redis/
[root@server1 redis-5.0.3]# cd /etc/redis/
[root@server1 redis]# vim sentinel.conf 
17 protected-mode no  ##关闭保护模式

#指定要监控的master,mymaster是定义的master名字,quorum为法定票数2,此处指的是sentinel的数,
只有指定的sentinel同意时才认为sentinel做的决策是有效的,一般大于sentinel数量的半数。可以有多
个master,一组sentinel集群可以监控N个主从复制架构 
84 sentinel monitor mymaster 172.25.26.1 6379 2

#至少多长时间 连不上才认为主的离线了。单位为ms, 即连接超时时长
113 sentinel down-after-milliseconds mymaster 10000      (这里我设置为10秒)

#刚刚设定为新主时,允许同时有多少个从向主发起同步请求。
121 sentinel parallel-syncs mymaster 1

#当master故障时,把新的从提升为master,多长时间提不上就认为故障转移失败。 
146 sentinel failover-timeout mymaster 180000

2.将写好的配置文件发到两个slave上的/etc/redis下

[root@server1 redis]# scp sentinel.conf 172.25.26.2:/etc/redis
[root@server1 redis]# scp sentinel.conf 172.25.26.3:/etc/redis

3.查看状态
在server1上,看到两个slave分别是server2和server3

[root@server1 redis]# redis-cli 
127.0.0.1:6379> info

在这里插入图片描述
在slave2,3上查看指定master到server1上

[root@server2 redis]# redis-cli 
127.0.0.1:6379> info

在这里插入图片描述

测试:

1.server4(任意一个主机上),执行监控命令,并打入后台
[root@server4 redis-5.0.3]# redis-server /etc/redis/sentinel.conf --sentinel
或者redis-sentinel /etc/redis/sentinel.conf &
在这里插入图片描述
2.宕掉server1(master)

[root@server1 redis]# redis-cli
127.0.0.1:6379> shutdown
not connected> 

3.此时在server4上会输出一个switch参数,显示转换到了server2上在这里插入图片描述

4.然后在server2上显示已经是master,有一个slave是server3

[root@server2 redis]# redis-cli 
127.0.0.1:6379> info

在这里插入图片描述
5.在server3上显示是slave状态,master指向server2

[root@server2 redis]# redis-cli 
127.0.0.1:6379> info

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值