Redis主从复制哨兵模式自动切换

Redis主从复制

1.概念
主从复制,是指将一台Redis服务器的数据复制到其他的redis服务器上。前者为主节点master,后者为从节点slave,数据的复制是单向的,由主节点复制到从节点(主节点复制写操作为主,从节点只能进行读操作)。
默认情况下,每台Redis服务器都是主节点,一个主节点可以有0个或者多个从节点,但是每个从节点只能有一个主节点。
2.作用
数据备份:主从复制实现了数据的热备份。
故障恢复:主节点故障时,从节点可以替代主节点提供服务。
负载均衡:在主从复制的基础上,配合读写分离,由主节点进行写操作,从节点进行读操作,分担服务器的负载;主要作用于多读少写的场景下,通过多个从节点分担负载,提供并发量。
高可用基石:主从复制还是哨兵和集群能够实施的基础。
3.配置
一主二从配置
Redis主从复制只需要配置从机就可以,主要分为两种第一种使用命令行临时配置,关闭命令行之后失效。使用redis-cli连接redis后执行以下命令即可设置为31.66的从机。

slaveof 192.168.31.66 6379

第二种修改redis.conf配置文件,永久生效。

(1) redis服务器列表

服务器名称 IP地址
Master 192.168.31.66:6379
Slave1 192.168.31.70:6379
Slave2 192.168.31.155:6379

(2) redis安装
三台服务器分别安装Redis软件,具体步骤如下:

#解压redis安装包
tar -xvf redis-4.0.9.tar.gz
mv redis-4.0.9 /usr/local/
cd /usr/local/
mv redis-4.0.9 redis
cd redis
make
cd src
make install
cd ../
mkdir etc
mkdir bin
mv redis.conf sentinel.conf etc/
mv src/mkreleasehdr.sh src/redis-benchmark src/redis-check-aof src/redis-check-rdb src/redis-cli src/redis-sentinel src/redis-server src/redis-trib.rb bin/
vim etc/redis.conf
# bind 127.0.0.1 修改成 bind 0.0.0.0
# 配置后台运行 daemonize no 修改成 daemonize yes 
# 从机需要配置 slaveof 192.168.31.66 6379

(3) 配置redis服务并设置开机启动

vim /etc/systemd/system/redis.service
#填写以下内容,注意路径要检查是否正确
[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

#设置开机启动
systemctl enable redis.service
#启动redis
systemctl start redis
#查看redis状态
systemctl status redis
#停止redis服务
systemctl stop redis

(4) 启动redis服务
依次启动主机从机66 70 155的Redis服务

systemctl start redis

(5) 查看服务信息

cd bin
./redis-cli
# 输入 info replication

master
slave
至此一主二从配置完成,自行测验复制功能。在master节点写入数据,在slave节点查看数据。

使用方法

  • 从机只读,不能写。主机可读可写多用于写。
  • 当主机宕机或服务关闭,默认情况从机不会发生变化。集群将只读不能写入,当主机恢复后恢复正常。
  • 当从机断电后,如果使用命令配置的从机,再次启动需要继续使用命令配置从机才能同步主机数据。

当主机宕机或服务关闭,不会出现新的主机,有两种方式可以产生新的主机。

  1. 在从机手动执行命令 slaveof no one,该从机会成为一个主机
  2. 使用哨兵模式自动选举出一个主机。

哨兵模式

  1. 概述
    Redis提供了哨兵的命令,是一个独立的进程,它会独立进行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
  2. 主从切换: 当主服务器 宕机后,需要手动切换的话就需要人工干预,不适合生产环境,所以优先考虑哨兵模式。
  3. 哨兵作用:哨兵主要有两个作用,第一个作用让Redis服务器返回监控其运行状态,包括主服务器和从服务器。第二个作用是当哨兵监测到master宕机后,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
    一般使用多个哨兵进行监控,各个哨兵之间还会进行监控,这样就形成了多哨兵模式。
  4. 哨兵配置:修改sentinel.conf文件
sentinel monitor mymaster 192.168.31.66 1
#配置后台运行 添加 daemonize yes

数字1表示:当一个哨兵认为主机断开,就认为主机故障,然后开始选举新的主机。当数字为大于1时,当一个哨兵认为主机断开,该哨兵主观的认为主服务器不可用,这个现象称为主管下限。当后面的哨兵也监测到主服务器不可用,并且数量达到该数字时,哨兵之间就会进行一次投票,投票结果由一个哨兵发起,进行failover操作。切换成功后,通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。

#启动哨兵进程
./redis-sentinel ../etc/sentinel.conf

或者可以参考redis配置成服务,不过注意不要设置成开机启动,因为哨兵模式需要注意启动顺序。首先是启动主机Redis服务然后从机Redis服务,最后启动哨兵的服务进程。

  1. 哨兵模式优缺点
    优点:哨兵集群基于主从复制,主从可以切换,系统可用性高。可以自动切换主从,更加健壮。
    缺点:哨兵模式配置较为复杂,配置项多

  2. 哨兵模式的其他配置项

配置项 参数类型 作用
port 整数 启动哨兵进程端口
dir 文件夹目录 哨兵进程服务临时文件夹,默认为/tmp,要保证有可写入的权限
sentinel down-after-milliseconds <服务名称><毫秒数(整数)> 指定哨兵在监控Redis服务时,当Redis服务在一个默认毫秒数内都无法回答时,单个哨兵认为的主观下线时间,默认为30000(毫秒)
sentinel parallel-syncs <服务名称><服务器数(整数)> 指定可以有多少个redis服务同步新的主机,这个数字越小同步时间越长,而越大,则对网络资源要求越高
sentinel failover-timeout <服务名称><毫秒数(整数)> 指定故障切换允许的毫秒数,超过这个时间,就认为故障切换失败,默认为3分钟
sentinel notification-script <服务名称> <脚本路径> 指定sentinel监测到该监控的redis实例指向的实例异常时,调用的报警脚本。该配置项可选,比较常用
  1. springboot连接哨兵集群
    redis-template 代码
    application.yml
#redis-single
#spring: 
#	redis:
#     password: ''
#     host: 127.0.0.1
#     port: 6379

#redis-sentinel
spring: 
	redis:
     password: ''
     sentinel: 
      master: mymaster
      nodes: 192.168.31.66,192.168.31.70,192.168.31.155

pom.xml

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

版权声明:本文为u012975987原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。