Redis 主从复制和哨兵的配置


1. 准备工作

安装服务:

首先从官网下载最新的包:redis-6.2.6.tar.gz

rz 命令上传到对应 linux 服务器。然后安装,可参考官网教程,大致过程如下:

tar xvzf redis-6.2.6.tar.gz
cd redis-6.2.6
make

如果 make 没法使用,还需要安装 GCC。

需要准备的配置文件,从redis的安装目录可以找到两个基础配置文件redis.confsentinel.conf,然后进行重命名,后续在对应文件中对相应配置项进行修改即可。

2. 主从复制

项目中添加配置(测试的时候其实不需要项目,这里的项目为SpringBoot2.0项目):

#Redis配置(单机版)
spring.redis.host=123.123.179.166
spring.redis.port=6380
spring.redis.password=123456789

我们以6380为主机器,6381和6382为备机器,在服务器上启动这三个redis服务(先主后备),就能实现一主两备了。
redis6380.confredis6381.confredis6382.conf。下面是它们的启动配置文件:

#导入原来的配置文件
include /srv/redis-5.0.4/redis.conf
#端口号
port 6380
#pid文件和log文件位置
pidfile "/var/run/redis_6380.pid"
logfile "/var/run/6380.log"
#持久化目录
dir "/run"
#持久化文件名
dbfilename "dump6380.rdb"
#表示后台启动
daemonize yes
#持久化保存的时间间隔
save 900 1
save 300 10
save 60 10000
#主机器的地址
#slaveof 123.123.179.166 6380
#redis本身密码
requirepass "123456789"
#如果该实例为主机器,哨兵连接使用的密码
masterauth "123456789"
#保护模式设置为no
protected-mode no
#导入原来的配置文件
include /srv/redis-5.0.4/redis.conf
#端口号
port 6381
#pid文件和log文件位置
pidfile "/var/run/redis_6381.pid"
logfile "/var/run/6381.log"
#持久化目录
dir "/run"
#持久化文件名
dbfilename "dump6381.rdb"
#表示后台启动
daemonize yes
#持久化保存的时间间隔
save 900 1
save 300 10
save 60 10000
#主机器的地址
slaveof 123.123.179.166 6380
#redis本身密码
requirepass "123456789"
#如果该实例为主机器,哨兵连接使用的密码
masterauth "123456789"
#保护模式设置为no
protected-mode no
#导入原来的配置文件
include /srv/redis-5.0.4/redis.conf
#端口号
port 6382
#pid文件和log文件位置
pidfile "/var/run/redis_6382.pid"
logfile "/var/run/6382.log"
#持久化目录
dir "/run"
#持久化文件名
dbfilename "dump6382.rdb"
#表示后台启动
daemonize yes
#持久化保存的时间间隔
save 900 1
save 300 10
save 60 10000
#主机器的地址
slaveof 123.123.179.166 6380
#redis本身密码
requirepass "123456789"
#如果该实例为主机器,哨兵连接使用的密码
masterauth "123456789"
#保护模式设置为no
protected-mode no

将上面的三个配置文件放入redis的安装目录下,使用命令启动redis服务。

最近安装了最新版本的 redis-6.2.6,发现默认的配置文件 redis.conf 中的 bind 参数是打开的,配置的是bind 127.0.0.1 -::1,所以上面三个配置文件还需要加上bind 0.0.0.0,或者直接在默认配置文件中注掉 bind 参数。

[root@wangbo src]# cd src
[root@wangbo src]# ./redis-server ../redis6380.conf
[root@wangbo src]# ./redis-server ../redis6381.conf
[root@wangbo src]# ./redis-server ../redis6382.conf

可以用可视化工具连接上每个redis服务做个简单的测试。可以看到已经实现了主从复制。

3. 哨兵模式

现在我们来配置一下哨兵(基于上面的配置和启动的服务)。
首先在项目中将redis的配置由单机版修改为哨兵版。(同理,这里只测试的话也不需要进行项目配置,这里的项目为SpringBoot2.0项目)

#Redis配置(单机版)
#spring.redis.host=123.123.179.166
#spring.redis.port=6380
#spring.redis.password=123456789

#Redis配置(哨兵版)
spring.redis.password=123456789
spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=123.123.179.166:26380,123.123.179.166:26381,123.123.179.166:26382

将另外三个配置文件传到Redis的安装目录下。
sentinel26380.confsentinel26381.confsentinel26382.conf
最终长这样:

我们来看一下这三个文件的内容,其实只有哨兵的端口号不同,其他内容都相同。这个配置文件里注释太多了,提供一种没有注释的哨兵配置文件,方便对比查看:

#关闭保护模式
protected-mode no
#哨兵端口号
port 26380
daemonize no
pidfile /var/run/redis-sentinel.pid
logfile ""
dir /tmp
#监听主机器,两个投票
sentinel monitor mymaster 123.123.179.166 6380 2
sentinel down-after-milliseconds mymaster 30000
#哨兵密码
sentinel auth-pass mymaster 123456789
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
#关闭保护模式
protected-mode no
#哨兵端口号
port 26381
daemonize no
pidfile /var/run/redis-sentinel.pid
logfile ""
dir /tmp
#监听主机器,两个投票
sentinel monitor mymaster 123.123.179.166 6380 2
sentinel down-after-milliseconds mymaster 30000
#哨兵密码
sentinel auth-pass mymaster 123456789
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
#关闭保护模式
protected-mode no
#哨兵端口号
port 26382
daemonize no
pidfile /var/run/redis-sentinel.pid
logfile ""
dir /tmp
#监听主机器,两个投票
sentinel monitor mymaster 123.123.179.166 6380 2
sentinel down-after-milliseconds mymaster 30000
#哨兵密码
sentinel auth-pass mymaster 123456789
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

接下来我们启动哨兵(先主后备):需要分别开三个窗口启动哨兵(主要是没配后台启动)。

[root@wangbo src]# ./redis-sentinel ../sentinel26380.conf
[root@wangbo src]# ./redis-sentinel ../sentinel26381.conf
[root@wangbo src]# ./redis-sentinel ../sentinel26382.conf

这里记录下后台启动的方法:

[root@wangbo src]# nohup ./redis-sentinel ../sentinel26380.conf &
[root@wangbo src]# nohup ./redis-sentinel ../sentinel26381.conf &
[root@wangbo src]# nohup ./redis-sentinel ../sentinel26382.conf &

此时可以使用下面命令看到已启动的服务:

[root@wangbo src]# ps -ef|grep redis

测试一下可以发现,当主机器挂掉后,一个从机器会变为主机器,redis和哨兵的配置文件都会自动修改,将主机器的IP修改为新的主机器所在的IP。如果之后挂了的那个主机器好了,也只会作为一个从机器存在。

详细介绍可参考这篇博客:Redis哨兵(Sentinel)模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值