Docker 搭建Redis主从复制
本文基于Redis最新的版本,Redis6.X,某些Redis配置可能与前面的版本不一致
创建Docker网络
因为两个容器间需要进行通信,所以创建一个网络redis网络来方便通信
docker network create --subnet 192.169.0.0/16 --gateway 192.169.0.1 redis-net
创建容器
创建master容器
docker run -itd --name redis-master -p 6379:6379 --net redis-net --ip 192.169.0.2 redis
创建slave容器
docker run -itd --name redis-slave1 -p 6380:6379 --net redis-net --ip 192.169.0.3 redis redis-server --slaveof 192.169.0.2 6379
docker run -itd --name redis-slave2 -p 6381:6379 --net redis-net --ip 192.169.0.4 redis redis-server --slaveof 192.169.0.2 6379
测试
docker exec -it redis-master redis-cli info replication
可以看到如下的信息,说明我们已经搭建成功了
分别进入master容器和slave容器的redis-cli,测试数据能否同步
docker exec -it redis-master redis-cli
和docker exec -it redis-slave1 redis-cli
master 存
slave 取
说明OK了
但是我们如果在slave里存数据的话就不可以了
因为默认的主从模式就是读写分离的,我们还需要在配置文件中进行配置,但是由于我们已经创建了容器,不方便修改,所以下面我们用另一种方式搭建,上面的这种方式应该是最简单的
配置文件搭建
保留上面的redis-master容器(PS:按道理master容器也应该用配置文件来配置,但是master需要配置的较少,所以这里就不演示了,道理都是一样的)
创建一个redis-slave.conf,然后写入如下内容
port 6379
replicaof 192.169.0.2 6379
replica-read-only no
“replica-read-only no”的配置,指定该服务器可读可写
创建容器
docker run -itd --name redis-slave1 -v /home/program/redis/redis-slave.conf:/usr/local/etc/redis/redis.conf -p 6380:6379 --net redis-net --ip 192.169.0.3 redis redis-server /usr/local/etc/redis/redis.conf
docker run -itd --name redis-slave2 -v /home/program/redis/redis-slave.conf:/usr/local/etc/redis/redis.conf -p 6381:6379 --net redis-net --ip 192.169.0.4 redis redis-server /usr/local/etc/redis/redis.conf
命令很简单,就是一个简单的挂载
测试发现成功,以后需要修改配置就可以直接修改宿主机上的配置文件