下载Redis镜像
docker pull redis
下载中

下载完成

查看镜像状态
docker images

配置Redis Master
mkdir redis
# 在redis官网https://redis.io/topics/config/下载redis.conf
# 拷贝redis.conf
cp redis.conf redis-master.cnf
# 修改master配置
vi redis-master.conf
修改点如下
# bind 127.0.0.1
protected-mode no
daemonize yes
配置Redis Slave01
cp redis.conf redis-slave01.cnf
# 修改slave01配置
vi redis-slave01.cnf
修改点如下
# bind 127.0.0.1
protected-mode no
daemonize yes
replicaof 172.17.0.2 6379
配置Redis Slave02
cp redis.conf redis-slave02.cnf
# 修改slave02配置
vi redis-slave02.cnf
修改点如下
# bind 127.0.0.1
protected-mode no
daemonize yes
replicaof 172.17.0.2 6379
运行
# master
docker run -it --name redis-master -v /home/wing/docker-project/redis/redis-master.conf:/usr/local/etc/redis/redis.conf -d -p 16379:6379 redis /bin/bash
# slave 01
docker run -it --name redis-slave01 -v /home/wing/docker-project/redis/redis-slave01.conf:/usr/local/etc/redis/redis.conf -d -p 16380:6379 redis /bin/bash
# slave 02
docker run -it --name redis-slave02 -v /home/wing/docker-project/redis/redis-slave02.conf:/usr/local/etc/redis/redis.conf -d -p 16381:6379 redis /bin/bash


配置master容器
# 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客户端
redis-cli
# 执行info命令,查看服务器状态
127.0.0.1:6379> info
...
# 如果是主,这里的role的值会是master,如果是从,这里的role的值会是slave
role:slave
# 对于slave,还要查看master_link_status这个属性值。slave上这个属性值为up就说明主从复制是OK的,否者就有问题。如果从机状态不为up,首先排查主机的端口是否被限,然后查看redis日志排查原因
master_link_status:up
...
# 最后退出容器
exit

配置slave01容器
# slave 01
docker exec -it redis-slave01 bash
# 创建日志文件目录
mkdir /var/log/redis/
touch /var/log/redis/redis.log
# 启动redis服务器,如果没有任何输出,就说明成功了
redis-server /usr/local/etc/redis/redis.conf
# 在容器里启动一个redis客户端
redis-cli
# 执行info命令,查看服务器状态
127.0.0.1:6379> info
...
# 如果是主,这里的role的值会是master,如果是从,这里的role的值会是slave
role:slave
# 对于slave,还要查看master_link_status这个属性值。slave上这个属性值为up就说明主从复制是OK的,否者就有问题。如果从机状态不为up,首先排查主机的端口是否被限,然后查看redis日志排查原因
master_link_status:up
...
# 最后退出容器
exit

配置slave02容器
# slave 02
docker exec -it redis-slave02 bash
# 创建日志文件目录
mkdir /var/log/redis/
touch /var/log/redis/redis.log
# 启动redis服务器,如果没有任何输出,就说明成功了
redis-server /usr/local/etc/redis/redis.conf
# 在容器里启动一个redis客户端
redis-cli
# 执行info命令,查看服务器状态
127.0.0.1:6379> info
...
# 如果是主,这里的role的值会是master,如果是从,这里的role的值会是slave
role:slave
# 对于slave,还要查看master_link_status这个属性值。slave上这个属性值为up就说明主从复制是OK的,否者就有问题。如果从机状态不为up,首先排查主机的端口是否被限,然后查看redis日志排查原因
master_link_status:up
...
# 最后退出容器
exit

验证主从状态
# 以交互模式进入容器redis-master中
docker exec -it redis-master bash
# 运行一个redis-cli,向test_key写入一个值
redis-cli
127.0.0.1:6379> info replication

验证主从数据复制
# 在master节点写入数据
docker exec -it redis-master bash
redis-cli
127.0.0.1:6379> set test_key hello-world
OK

# 在任意slave机器上进入容器,也运行一个redis-cli,查询这个key的值。如果能查询到这个值,且与主机上的值相同,说明主从同步成功。经测试,主动同步成功。
docker exec -it redis-slave01 bash
# 或者
docker exec -it redis-slave02 bash
redis-cli
127.0.0.1:6379> get test_key
"hello-world"
