Redis主从复制哨兵模式自动切换
Redis主从复制 哨兵模式 Springboot连接哨兵集群
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节点查看数据。
使用方法
- 从机只读,不能写。主机可读可写多用于写。
- 当主机宕机或服务关闭,默认情况从机不会发生变化。集群将只读不能写入,当主机恢复后恢复正常。
- 当从机断电后,如果使用命令配置的从机,再次启动需要继续使用命令配置从机才能同步主机数据。
当主机宕机或服务关闭,不会出现新的主机,有两种方式可以产生新的主机。
- 在从机手动执行命令 slaveof no one,该从机会成为一个主机
- 使用哨兵模式自动选举出一个主机。
哨兵模式
- 概述
Redis提供了哨兵的命令,是一个独立的进程,它会独立进行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。 - 主从切换: 当主服务器 宕机后,需要手动切换的话就需要人工干预,不适合生产环境,所以优先考虑哨兵模式。
- 哨兵作用:哨兵主要有两个作用,第一个作用让Redis服务器返回监控其运行状态,包括主服务器和从服务器。第二个作用是当哨兵监测到master宕机后,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
一般使用多个哨兵进行监控,各个哨兵之间还会进行监控,这样就形成了多哨兵模式。 - 哨兵配置:修改sentinel.conf文件
sentinel monitor mymaster 192.168.31.66 1
#配置后台运行 添加 daemonize yes
数字1表示:当一个哨兵认为主机断开,就认为主机故障,然后开始选举新的主机。当数字为大于1时,当一个哨兵认为主机断开,该哨兵主观的认为主服务器不可用,这个现象称为主管下限。当后面的哨兵也监测到主服务器不可用,并且数量达到该数字时,哨兵之间就会进行一次投票,投票结果由一个哨兵发起,进行failover操作。切换成功后,通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。
#启动哨兵进程
./redis-sentinel ../etc/sentinel.conf
或者可以参考redis配置成服务,不过注意不要设置成开机启动,因为哨兵模式需要注意启动顺序。首先是启动主机Redis服务然后从机Redis服务,最后启动哨兵的服务进程。
-
哨兵模式优缺点
优点:哨兵集群基于主从复制,主从可以切换,系统可用性高。可以自动切换主从,更加健壮。
缺点:哨兵模式配置较为复杂,配置项多 -
哨兵模式的其他配置项
配置项 | 参数类型 | 作用 |
---|---|---|
port | 整数 | 启动哨兵进程端口 |
dir | 文件夹目录 | 哨兵进程服务临时文件夹,默认为/tmp,要保证有可写入的权限 |
sentinel down-after-milliseconds | <服务名称><毫秒数(整数)> | 指定哨兵在监控Redis服务时,当Redis服务在一个默认毫秒数内都无法回答时,单个哨兵认为的主观下线时间,默认为30000(毫秒) |
sentinel parallel-syncs | <服务名称><服务器数(整数)> | 指定可以有多少个redis服务同步新的主机,这个数字越小同步时间越长,而越大,则对网络资源要求越高 |
sentinel failover-timeout | <服务名称><毫秒数(整数)> | 指定故障切换允许的毫秒数,超过这个时间,就认为故障切换失败,默认为3分钟 |
sentinel notification-script | <服务名称> <脚本路径> | 指定sentinel监测到该监控的redis实例指向的实例异常时,调用的报警脚本。该配置项可选,比较常用 |
- 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>
更多推荐
所有评论(0)