搭建主从复制
这里用docker启动三个redis服务,在一台Mac机器上(临时IP为192.168.0.103),分别为redis-master(端口6379),redis-slave1(端口6388),redis-slave2(端口6389)
配置文件
redis官方配置文件详解。
配置本地的配置文件,用于docker运行配置文件挂载。
redis-master配置文件如下:
# 注释这一行,表示Redis可以接受任意ip的连接
# bind 127.0.0.1
port 6379
# 关闭保护模式
protected-mode no
# 让redis服务后台运行
daemonize yes
# 设定密码(可选,如果这里开启了密码要求,slave的配置里就要加这个密码. 只是练习配置,就不使用密码认证了)
# requirepass masterpassword
# 配置日志路径,为了便于排查问题,指定redis的日志文件目录
logfile "/var/log/redis/redis.log"
redis-slave1配置如下:
# 注释这一行,表示Redis可以接受任意ip的连接
# bind 127.0.0.1
port 6388
# 关闭保护模式
protected-mode no
# 让redis服务后台运行
daemonize yes
# 设定密码(可选,如果这里开启了密码要求,slave的配置里就要加这个密码)
#requirepass masterpassword
# 设定主库的密码,用于认证,如果主库开启了requirepass选项这里就必须填相应的密码
#masterauth <master-password>
# 设定master的IP和端口号,redis配置文件中的默认端口号是6379
# 低版本的redis这里会是slaveof,意思是一样的,因为slave是比较敏感的词汇,所以在redis后面的版本中不在使用slave的概念,取而代之的是replica
replicaof 192.168.0.103 6379
# 配置日志路径,为了便于排查问题,指定redis的日志文件目录
logfile "/var/log/redis/redis.log"
redis-slave2只是改下端口port为6389
创建完如下:
启动主从服务
创建并启动容器
redis-master
docker run -it --name redis-master -v /Users/用户名/home/redis-sentinel/master/redis.conf:/usr/local/etc/redis/redis.conf -d -p 6379:6379 redis /bin/bash
redis-slave1
docker run -it --name redis-slave1 -v /Users/用户名/home/redis-sentinel/slave-1/redis.conf:/usr/local/etc/redis/redis.conf -d -p 6388:6388 redis /bin/bash
redis-slave2
docker run -it --name redis-slave2 -v /Users/用用户名/home/redis-sentinel/slave-2/redis.conf:/usr/local/etc/redis/redis.conf -d -p 6389:6389 redis /bin/bash
启动redis服务
先启动主服务redis-master,执行以下命令
#进入容器
docker exec -it redis-master bash
#创建指定日志路径
mkdir /var/log/redis/
touch /var/log/redis/redis.log
#启动redis服务
redis-server /usr/local/etc/redis/redis.conf
连接服务,并查看主服务信息
# 或者直接redis-cli 默认127.0.0.1 端口6379
redis-cli -c -h 192.168.0.103 -p 6379
#查看服务信息
info replication
依照类似步骤,启动redis-slave1和redis-slave2服务,这里放下redis-slave1的服务信息
验证主从复制
redis-master执行
redis-slave1查询
redis-slave2查询
sentinel监控服务
用docker启动三个sentinel服务,sentinel-1(6397)、sentinel-2(6398)、sentinel-3(6399)
配置文件
sentinel官方配置文件。
sentinel-1配置文件sentinel.conf内容如下:
# 让sentinel服务后台运行
daemonize yes
#配置端口
port 6397
# 修改日志文件的路径
logfile "/var/log/redis/sentinel.log"
# 修改监控的主redis服务器(监控redis-master)
# 最后一个2表示,两台机器判定主被动下线后,就进行failover(故障转移)
# 这里的mymaster可以更改,下面介绍spring-data-redis使用时,会用到
sentinel monitor mymaster 192.168.0.103 6379 2
看下官网对sentinel monitor 配置的描述
sentinel-2配置文件修改端口6398,sentinel-3配置文件修改端口6399,然后创建新的文件挂载路径等与主从配置类似。
启动sentinel集群
这里以sentinel-1为例, sentinel-2、sentinel-3类似。
创建并启动容器:
# sentinel-2、sentinel-3修改端口,修改挂载映射路径
docker run -it --name sentinel-1 -p 6397:6397 -v /Users/用户名/home/redis-sentinel/sentinel/sentinel1/sentinel.conf:/usr/local/etc/redis/sentinel.conf -d redis /bin/bash
进入容器:
docker exec -it sentinel-1 bash
接下里执行以下命令,启动sentinel服务
#创建日志路径
mkdir /var/log/redis
touch /var/log/redis/sentinel.log
#启动服务
redis-sentinel /usr/local/etc/redis/sentinel.conf
看下日志:
验证sentinel监控
验证步骤如下,成功实现主服务宕机下,从服务晋升为主
再来看下,sentinel的日志
spring-data-redis使用sentinel
使用比较简单,利用Springboot自动注入特性。
修改配置文件
## 配置sentinel集群
spring.redis.sentinel.nodes=192.168.0.103:6397,192.168.0.103:6398,192.168.0.103:6399
## 配置监听的主服务,就是上面配置文件sentinel monitor 后面的名称
spring.redis.sentinel.master=mymaster
下面就可以直接使用RedisTemplate、StringRedisTemplate
参考
https://juejin.im/post/5d26b03de51d454fa33b1960
https://juejin.im/post/5d93d9b8f265da5b794f1232
https://juejin.im/post/5d0f7da66fb9a07ef44410db