Docker下实现redis主从复制

Posted 是渣渣呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker下实现redis主从复制相关的知识,希望对你有一定的参考价值。

单机模拟集群实现

注:redis新版的配置文件和旧版有些区别

​ (旧版的)

(新版的)

  1. 创建两个文件夹redis1和redis2

  2. 准备好redis 的配置文件redis.conf(见)

  3. 将config下的配置文件分别拷贝到redis1 和 redis2里去

  4. 分别修改redis1和redis2下的配置文件(redis1的端口设置为6379,redis2为6380,以及在redis2中加入slaveof master-ip master-port 或者是 replicaof )----我们把redis1作为主服务器,redis2为副的

    注:1* 一定要daemonize no,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败!!

    ​ 2* 就是主redis服务器所在的 ip 和 端口号,并且中间不要加 :

[root@zch ~]# mkdir -p /usr/local/docker/redis/config/redis1
[root@zch ~]# mkdir -p /usr/local/docker/redis/config/redis2
[root@zch config]# cd /usr/local/docker/redis/config/
[root@zch config]# ls
redis1  redis2  redis.conf
[root@zch config]# cp redis.conf redis1/
[root@zch config]# cp redis.conf redis2/
[root@zch config]# vim redis1/redis.conf 
[root@zch config]# vim redis2/redis.conf 
  1. 然后就可以启动两个redis容器了(命名为redis1和redis2)
[root@zch config]# docker run -d  --name redis1 -v /usr/local/docker/redis/config/redis1/redis.conf:/etc/redis.conf -v /usr/local/docker/redis/data:/data -p 6379:6379 redis:6.0.12 redis-server /etc/redis.conf
ffeac01946f1d34115734fb1405a68f5a020e6bb1b0f6100c6dbd257630ffe7a
[root@zch config]# docker run -d  --name redis2 -v /usr/local/docker/redis/config/redis2/redis.conf:/etc/redis.conf -v /usr/local/docker/redis/data:/data -p 6380:6380 redis:6.0.12 redis-server /etc/redis.conf
ca58fb27e6f92d12afacebafaa854692f99fab9db4ce8fe66af8304cf8e9fffc
[root@zch config]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                              NAMES
ca58fb27e6f9   redis:6.0.12   "docker-entrypoint.s…"   13 seconds ago   Up 12 seconds   6379/tcp, 0.0.0.0:6380->6380/tcp   redis2
ffeac01946f1   redis:6.0.12   "docker-entrypoint.s…"   52 seconds ago   Up 51 seconds   0.0.0.0:6379->6379/tcp             redis1

  1. 于是,我们对主从复制进行一下简单的测试
  2. 先进入redis1的客户端访问,进行一些简单的存取数据(info replication可以查看主从的信息等)
  3. 再进入redis2的客户端查看(一定要加 -p 映射端口,否则就是访问6379,肯定会被拒绝)
[root@zch config]# docker exec -it redis1 redis-cli 
127.0.0.1:6379> flushdb 
OK
127.0.0.1:6379> set hero1 libai
OK
127.0.0.1:6379> set hero2 kaidie
OK
127.0.0.1:6379> set hero3 nakelulu
OK
127.0.0.1:6379> set hero4 ailin
OK
127.0.0.1:6379> keys *
1) "hero4"
2) "hero3"
3) "hero1"
4) "hero2"
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=123.57.254.115,port=6380,state=online,offset=7828,lag=0
master_replid:11a868928e6bf83e39a1ecb924e538f7d998bf41
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:7828
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:7828 
127.0.0.1:6379> exit
[root@zch config]# docker exec -it redis2 redis-cli -p 6380
127.0.0.1:6380> keys *
1) "hero2"
2) "hero1"
3) "hero3"
4) "hero4"
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:123.57.254.115
master_port:6379
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:7716
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:11a868928e6bf83e39a1ecb924e538f7d998bf41
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:7716
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:6807
repl_backlog_histlen:910
127.0.0.1:6380> exit

这时,我们可以发现虽然只在redis1里进行了操作,但是redis2中也出现了同样的数据,这就说明主从复制成功了!!!

(redis1的配置文件)

(redis2的配置文件)

以上是关于Docker下实现redis主从复制的主要内容,如果未能解决你的问题,请参考以下文章

docker搭建redis主从复制

docker-compose编排项目redis容器实现主从复制

Docker教程-5-基于Docker的Redis主从复制

Docker教程-5-基于Docker的Redis主从复制

Docker教程-5-基于Docker的Redis主从复制

实现Redis主从复制