docker 搭建redis主从复制

利用docker来创建两个redis服务,一个做主服务器,一个做从服务器。
那这里的2个服务,就需要相互通信,之前用过--link这个参数进行过容器的互联。
随着 Docker 网络的完善, 强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器,而不是使用 --link 参数。

1、docker网络模式

docker安装后,默认会创建下面三种网络类型

[root@localhost phpproject]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
95403707bfb8   bridge    bridge    local
07df9970324e   host      host      local
b9cda0571ed5   none      null      local

1.1 bridge:桥接网络

默认情况下启动的Docker容器, 都是使用 bridge, Docker安装时创建的桥接网络, 每次Docker容器重启时, 会按照顺序获取对应的IP地址, 这个就导致重启下, Docker的IP地址就变
image
从上面的网络模型可以看出, 容器从原理上是可以与宿主机乃至外界的其他机器通信的。 同一宿主机上, 容器之间都是连接到docker0这个网桥上的, 它可以作为虚拟交换机使容器可以相互通信。 然而, 由于宿主机的IP地址与容器的IP地址均不在同一个网段,不足以使宿主机以外的网络主动发现容器的存在。 为了使外界可以方位容器中的进程,docker采用了端口绑定的方式, 也就是通过iptables的NAT, 将宿主机上的端口流量转发到容器内的端口上

在宿主机上, 可以通过iptables -t nat -L -n, 查到一条DNAT规则:

image

bridge模式的容器与外界通信时, 必定会占用宿主机上的端口, 从而与宿主机竞争端口资源, 对宿主机端口的管理会是一个比较大的问题。 同时, 由于容器与外界通信是基于三层上iptables NAT, 性能和效率上的损耗是可以预见的

1.2 none 无指定网络

无指定网络 使用 --network=none , docker 容器就不会分配局域网的IP

1.3 host 主机网络

主机网络 使用 --network=host, 此时, Docker 容器的网络会附属在主机上, 两者是互通的。 例如, 在容器中运行一个Web服务, 监听8080端口, 则主机的8080端口就会自动映射到容器中
image

弊端:

  • 最明显的就是容器不再拥有隔离、 独立的网络栈。 容器会与宿主机竞争网络栈的使用, 并且容器的崩溃就可能导致宿主机崩溃, 在生产环境中, 这种问题可能是不被允许的。
  • 容器内部将不再拥有所有的端口资源, 因为一些端口已经被宿主机服务、 bridge模式的容器端口绑定等其他服务占用掉了

1.4 指定自定义网络

因为默认的网络不能制定固定的地址, 所以我们将创建自定义网络, 并指定网段: 192.168.1.0/24 并命名为mynetwork, 指令如下:

~ docker network create --subnet=192.168.1.0/24 testnetwork #新增网络
~ docker run -itd --network=testnetwork --ip 192.168.1.10 --name dockerName imagesName  #创建容器,并选择网关,给对应ip
~ docker network ls   #网络查看
~ docker network rm testnetwork   #删除网络

!!! 注意:

2、 redis主从复制操作

先拉取redis服务 docker pull redis:5.0.12
然后创建容器 这里还是要挂载卷,要不然进去redis容器修改太麻烦了,在本地直接改比较方便
-v 是挂在目录的,如果挂在文件会提示警告,不过还是可以执行的
最后加上bash 是阻止CMD的运行nginx。
image

主服务器:
$ docker run -itd \
-v /root/redis/master/conf:/redis/conf \
--network=testnetwork --ip=192.168.1.100 \
-p 6300:6379 \
--name redis5_master redis:5.0.12 bash

从服务器:
$ docker run -itd \
-v /root/redis/slave/conf:/redis/conf \
--network=testnetwork --ip=192.168.1.110 \
-p 6310:6379 \
--name redis5_slave redis:5.0.12 bash

从服务器连接主服务器
image

测试主从效果:
image

备注:redis主从到时写一篇文章做记录,本文章直接做操作为主。
参考文章:https://www.cnblogs.com/kismetv/p/9236731.html

posted @ 2021-05-13 16:48  bogiang  阅读(285)  评论(0)    收藏  举报