您的位置:首页 > 运维架构 > Docker

docker:搭建单机redis主从集群

2017-11-24 21:58 585 查看
最近在学习docker和kubernetes,在看《docker容器与容器云》这本书的时候,就按照书中的教程搭建第一个docker应用栈,其中遇到了一些坑。现把搭建过程中遇到的困难记录下来。主要是在搭建redis主从集群时遇到的困难。

1、获取redis镜像

首先从Docker Hub中或者其他的镜像仓库中获取现有的可用镜像,在这些镜像的基础上启动镜像,这里我选择从docker官方镜像中获取redis镜像构建redis主从集群。

docker pull redis


镜像下载完成后执行docker images查看已下载的镜像



2、容器间的连接

鉴于在同一主机下搭建redis主从集群,只需要完成容器互联来实现容器之间的通信即可,这里采用 docker run命令的–link选项来建立容器之间的连接。这里介绍一下–link选项的用法,通过–link选项能够进行容器间的安全的交互通信,使用的格式为:name:alias,可在一个docker run命令中重复使用该参数。使用实例如下:

docker run --link redis:redis --name console ubuntu bash


上例中在ubuntu镜像上启动一个容器,并命名为console,同时将新启动的console容器连接到名为redis的容器上。在使用–link选项时,连接通过容器名来确定容器。

通过–link选项来建立容器之间的连接,不但可以避免容器的IP和端口暴露到外网导致的安全问题,还可以防止容器自重启后IP地址发生变化导致的访问的失效,它的原理类似于DNS服务器的与域名和IP地址的映射。当容器的IP地址发生变化时,Docker自动维护映射关系中的IP地址



该容器中的/etc/hosts记录了master的IP地址为172.17.0.2.即redis-master容器的IP地址。

3、配置redis集群

在配置redis集群之前,需要一个redis.conf配置文件。docker的redis镜像不提供这个配置文件,需要自己从网上下载。此处从官方网站上下载

wget -c http://download.redis.io/redis-stable/redis.conf[/code] 
下载完成后,将redis配置文件拷贝成三分,并因此命名为:redis-master.conf, redis.slave1.conf,redis-slave2.conf。将这三个文件放在主机上一个文件夹下。如:/root/redis/下。

在redis-master.conf下做如下修改

daemonize yes
pidfile /var/run/redis.pid
bind 0.0.0.0


在redis-slave.conf下做如下修改:

daemonize yes
pidfile /var/run/redis.pid
slaveof master 6379
bind 0.0.0.0


注:我在配置完毕后启动容器,运行info命令查看到上述信息中connected_slaves的值为0,测试主从复制也没有成功,后来搜索了相关资料,需要将所有配置文件中的bind 127.0.0.1修改为bind 0.0.0.0,修改完毕后重启所有服务。这个问题害的我调试了一下午没有成功。从网上找到一个博客说只修该redis-master.conf即可。但是我发现没有用,最后把三个全部都修改了就可以了。

首先启动master容器再启动slave容器,启动命令如下:

docker run -it -v /root/redis/redis-master.conf:/usr/local/bin/redis.conf --name redis-master redis /bin/bash

docker run -it -v /root/redis/redis-slave1.conf:/usr/local/bin/redis.conf --name redis-slave1 --link redis-master:master redis /bin/bash

docker run -it -v /root/redis/redis-slave2.conf:/usr/local/bin/redis.conf --name redis-slave2 --link redis-master:master redis /bin/bash


需要注意的是-v参数,-v参数用于将宿主机上的某个目录挂载到容器中。由于容器都是轻量化设计,只包含运行时的必须文件,所以在容器中使用vim之类的命令很不方便(可能需要自行安装vim编辑器),所以我们将之前配置好的redis.conf文件挂载到对应的容器中。因此,我们可以直接在宿主机上使用vim命令或其他文本编辑器编辑redis.conf文件。

接下来是启动redis服务,这里推荐为每个容器分配一个shell窗口,方便直接在容器内执行命令。先启动master,然后启动slaver。分别在master、slave1和slave2中运行启动redis服务的命令:

redis-server /usr/local/bin/redis.conf


启动容器后在master节点启动客户端,查看redis服务运行的状态redis-cli





之前没有修改bind 127.0.0.1的时候,connected_slaves的值为0。





在主节点上设置的信息,在从节点上也可以查看到。至此一个单机的redis主从集群搭建完成。

参考:Docker:创建Redis集群
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis 集群 应用 docker