前置说明

现有三台虚拟机,IP地址如下
192.168.1.71  
192.168.1.72
192.168.1.73
##这里71服务器为默认的 master节点,其余的为 replication 节点

单机安装请参考上一篇文章,下面的redis镜像都是基于上次下载的

当前版本:

redis-6.0.9

主从复制

哨兵使用都是基于主从复制的,所以在启用哨兵之前,我们得安装好主从复制集群

redis.conf 配置文件

主从搭建有两种形式,这里我们主要介绍以配置文件的形式搭建主从复制集群

这里我们从官网上找到当前版本对应的 redis.conf 配置文件,修改以下内容:

master 节点配置文件

# 配置文件进行了精简,完整配置可自行和官方提供的完整conf文件进行对照。端口号自行对应修改 
#端口号(如果同一台服务器上启动,注意要修改为不同的端口)
port 6380
# IP绑定,注释此行
#bind 127.0.0.1
# 这个文件会自动生成(如果同一台服务器上启动,注意要修改为不同的端口)
pidfile /var/run/redis_6380.pid 
##这里的日志文件为了记录启动时的日志,方便排查错误,正常运行成功后,这里可以还原为空,使用docker查询日志
logfile "/data/redis.log"

replication 节点配置文件

port 6380
# IP绑定,注释此行
#bind 127.0.0.1
pidfile /var/run/redis_6380.pid 
logfile "/data/redis.log"
##副本配置 replicaof <masterip> <masterport> 
##192.168.1.71 为主节点IP ,6380为主节点的端口号
replicaof 192.168.1.71 6380

这里说明一下,不需要修改 daemonizeprotected-mode 等的配置

启动

在每一个服务器上,我们都运行以下命令,以启动服务

sudo docker run -d --privileged=true --restart=always -p 6380:6380 \
-v /mnt/data/redis-6380/redis.conf:/etc/redis/redis.conf \
-v /mnt/data/redis-6380/data:/data \
--name redis6 \
redis redis-server /etc/redis/redis.conf \
--requirepass "Sin1/2=30" \
--masterauth "Sin1/2=30"

说明:

其它配置这里不做说明了,只说明以下配置

–masterauth “Sin1/2=30” :如果设置了认证密码,就必须的配置此参数为master的密码

测试

首先查看docker容器是否在运行

sudo docker ps
##如正常运行就执行下面的验证,如总是不断的重启,这时就可以查看前面配置的日志文件了
##当然也可以直接用docker查看,但是有时候有些错误是看不到的,所以这时我们配置的日志文件就起到关键性的作用了

#进入主节点
##打开 redis 客户端
sudo docker exec -it redis6 redis-cli -p 6380
##密码认证
auth Sin1/2=30
##查看副本信息
info replication
##如返回以下信息,就说明主节点OK了,注意role为master,同时可以看到slave的信息
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.72,port=6380,state=online,offset=2421114,lag=1
slave1:ip=192.168.1.73,port=6380,state=online,offset=2421114,lag=1
master_replid:0670524eb7c36f68dc661a054241335b22cfb9ce
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2421114
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1372539
repl_backlog_histlen:1048576

#进入副本节点,同样执行以上命令,返回如下信息,就说明副本节点也OK了
##注意role为slave,可以看到master的信息,但是看不到其它副本节点的信息
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:192.168.1.71
master_port:6380
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:2548557
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:0670524eb7c36f68dc661a054241335b22cfb9ce
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2548557
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1499982
repl_backlog_histlen:1048576

数据测试

##进入主节点,随意设置key,并查看结果
127.0.0.1:6380> set test 11
OK
127.0.0.1:6380> get test
"11"
##进入任意节点,查看该key是否存在,如果存在,尝试获取key值
127.0.0.1:6380> keys *
1) "test"
127.0.0.1:6380> get test
"11"
127.0.0.1:6380> set test 22
(error) READONLY You can't write against a read only replica.
##从以上命令,我们可以看到该key的值,但是不能修改该key值,说明主从集群成功了

哨兵

sentinel.conf 配置文件

这里我们从官网上找到当前版本对应的 sentinel.conf 配置文件,修改以下内容:

#端口号(如果同一台服务器上启动,注意要修改为不同的端口)
port 26380
#监控的主redis服务器
sentinel monitor mymaster 192.168.1.71 6380 2
##认证密码
sentinel auth-pass mymaster Sin1/2=30
# 修改日志文件的路径
logfile "/mnt/sentinel.log"

复制修改过的哨兵配置文件到各个服务器上

启动

在每一个服务器上,我们都运行以下命令,以启动服务

sudo docker run -d --privileged=true --restart=always -p 26380:26380 \
-v /mnt/data/redis-6380/sentinel.conf:/etc/redis/sentinel.conf \
-v /mnt/data/redis-6380/data/:/data/ \
--name sentinel \
redis redis-sentinel /etc/redis/sentinel.conf

说明:

redis-sentinel /etc/redis/sentinel.conf : 指定配置文件启动 redis-sentinel 进程

测试

首先查看docker容器是否在运行

sudo docker ps
##看到了正常运行的docker容器sentinel了,我们就可以执行以下命令

##进入sentinel 客户端
sudo docker exec -it sentinel redis-cli -p 26380
##查看主节点信息
sentinel master mymaster
##出现以下内容即成功
29) "config-epoch"
30) "0"
31) "num-slaves"
32) "2"
33) "num-other-sentinels"
34) "3"
35) "quorum"
36) "2"

服务测试

关闭master
我们执行上面主从复制中的测试模块,多次执行 info replication 查看信息发生的变化
或者监听哨兵配置的日志文件,可以实时看到其发生的变化