1.拉取redis镜像:
docker pull redis
2.拉取镜像后,在三台服务器上创建文件redis.conf,其中主机内容如下:
port 6379
logfile "redis.log"
dir /data
#是否持久化
appendonly yes
3.另两台的redis.conf内容如下:
port 6379
logfile "redis.log"
dir /data
appendonly yes
replicaof 192.168.2.11
4.在三台服务器上创建文件sentinel.conf:
port 26379
dir /data
logfile "sentinel.log"
daemonize yes
sentinel monitor redismaster 192.168.2.11 6379 2
5.在三台服务器上执行:
docker run -d -p 6379:6379 -v /home/data/redis.conf:/data/redis.conf --name redis1 redis
6.交互模式进入redis1容器:
docker exec -it redis1 /bin/bash
7.打开redis客户端:
redis-cli
8.查看redis服务器信息:
info replication
9.得到如下信息:
# Replication
role:master
connected_slaves:0
master_replid:30172b10011fa14fbea5ccc271622e956d3af32d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:56
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:56
10.通过以上信息得知,redis.conf并没有起作用,而是使用的默认配置文件,解决方法,redis-cli 打开客户端后:
replicaof 192.168.2.11
11.再次查看redis服务器信息,从机role已变为slave。
12.在redis1容器内启动哨兵,首先复制sentinel.conf到容器内:
docker cp /home/data/sentinel.conf redis1:/data/sentinel.conf
13.进入交互模式后,启动哨兵:
redis-sentinel sentinel.conf
14.打开哨兵客户端:
redis-cli -h 127.0.0.1 -p 26379
15.退出哨兵客户端:
exit
16.查看哨兵日志:
cat sentinel.log
17.关闭主机redis1容器,过几秒后查看,有一台从机完成从到主角色提升
遇到的问题及解决方案:
1.redis.conf不起作用,可以在创建容器时添加启动命令redis-server及启动参数redis.conf:
docker run -d -p 6379:6379 -v /home/data/redis.conf:/data/redis.conf --name redis1 redis redis-server redis.conf
这样在运行redis服务时,就会使用指定的redis.conf配置,不然配置无效,会使用默认配置。
2.可以创建单独的哨兵容器,也可以添加启动命令redis-sentinel及启动参数sentinel.conf,指定服务启动配置:
docker run -d -p 26379:26379 -v /home/data/sentinel.conf:/data/sentinel.conf --name sentinel redis redis-sentinel sentinel.conf
这样就不会配置无效,因为-v只是映射数据卷到容器内,而不是服务启动的默认配置