下载Redis镜像

docker pull redis

下载中

redis双重检测锁_bash

下载完成

 

redis双重检测锁_redis双重检测锁_02

查看镜像状态

docker images

redis双重检测锁_docker_03

配置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

 

redis双重检测锁_docker_04

redis双重检测锁_docker_05

 配置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

 

redis双重检测锁_docker_06

 配置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

redis双重检测锁_redis_07

 配置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双重检测锁_redis双重检测锁_08

验证主从状态

# 以交互模式进入容器redis-master中
docker exec -it redis-master bash

# 运行一个redis-cli,向test_key写入一个值

redis-cli

127.0.0.1:6379> info replication

 

redis双重检测锁_redis双重检测锁_09

 验证主从数据复制

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

redis双重检测锁_docker_10

# 在任意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"

redis双重检测锁_docker_11