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.conf
和sentinel.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.conf
,redis6381.conf
,redis6382.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.conf
,sentinel26381.conf
,sentinel26382.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)模式