Redis的主从复制和高可用搭建

版权声明:©2004 Microsoft Corporation. All rights reserved. https://blog.csdn.net/qq_42036824/article/details/88044186

实验环境:

  • server1:172.25.19.1 master
  • server2:172.25.19.2 slave
  • server3:172.25.19.3 slave

一、redis的主从复制

【server1,server2,server3】同样步骤

  1. 下载安装包,并解压
[root@server1 ~]# ls
redis-5.0.3.tar.gz
[root@server1 ~]# tar zxf redis-5.0.3.tar.gz 
  1. 安装依赖包,并编译安装
[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
  1. 执行redis安装脚本
[root@server1 redis-5.0.3]# cd utils/
[root@server1 utils]# ./install_server.sh 

在这里插入图片描述

  • 此时netstat -antlp会出现6379端口 (server1,2,3上都一样)

【server1】

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

【server2,server3】

  • 编辑配置文件
[root@server2 utils]# vim /etc/redis/6379.conf 
70 bind 0.0.0.0
282 slaveof 172.25.19.1 6379   ##添加salve指向master为server1
[root@server3 utils]# vim /etc/redis/6379.conf 
70 #bind 0.0.0.0
282 slaveof 172.25.19.1 6379
  • 重启三个主机的服务
[root@server1 utils]# systemctl restart redis_6379.service
[root@server2 utils]# systemctl restart redis_6379.service
[root@server3 utils]# systemctl restart redis_6379.service

测试:

  1. 在server1(master)添加key-value值
    在这里插入图片描述
  2. 在server2上可以看到添加到额信息,表示主从复制成功
    在这里插入图片描述

二、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/

protected-mode no  ##关闭保护模式

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

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

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

#当master故障时,把新的从提升为master,多长时间提不上就认为故障转移失败。 
sentinel failover-timeout mymaster 180000
  • 注意:以上参数都在配置文件中可以找到,不用手打
  1. 将写好的配置文件发到两个slave上的/etc/redis下
[root@server1 redis]# scp sentinel.conf 172.25.19.2:/etc/redis
[root@server1 redis]# scp sentinel.conf 172.25.19.3:/etc/redis
  1. 查看状态
  • 在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. Server2(任意一个主机上),执行监控命令,并打入后台
[root@server4 redis-5.0.3]# redis-server  /etc/redis/sentinel.conf  --sentinel
或者redis-sentinel  /etc/redis/sentinel.conf  &

在这里插入图片描述

  1. 宕掉server1(master)
[root@server1 redis]# redis-cli 
127.0.0.1:6379> shutdown
  1. 此时在server2上会输出一个switch参数,显示转换到了server2上
    在这里插入图片描述
  2. 然后在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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42036824/article/details/88044186