docker:搭建单机redis主从集群

来源:互联网 发布:php直播系统源码下载 编辑:程序博客网 时间:2024/05/23 16:53

最近在学习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

下载完成后,将redis配置文件拷贝成三分,并因此命名为:redis-master.conf, redis.slave1.conf,redis-slave2.conf。将这三个文件放在主机上一个文件夹下。如:/root/redis/下。
在redis-master.conf下做如下修改

daemonize yespidfile /var/run/redis.pidbind 0.0.0.0

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

daemonize yespidfile /var/run/redis.pidslaveof master 6379bind 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/bashdocker run -it -v /root/redis/redis-slave1.conf:/usr/local/bin/redis.conf --name redis-slave1 --link redis-master:master redis /bin/bashdocker 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集群

原创粉丝点击