docker:搭建单机redis主从集群
2017-11-24 21:58
585 查看
最近在学习docker和kubernetes,在看《docker容器与容器云》这本书的时候,就按照书中的教程搭建第一个docker应用栈,其中遇到了一些坑。现把搭建过程中遇到的困难记录下来。主要是在搭建redis主从集群时遇到的困难。
镜像下载完成后执行docker images查看已下载的镜像
上例中在ubuntu镜像上启动一个容器,并命名为console,同时将新启动的console容器连接到名为redis的容器上。在使用–link选项时,连接通过容器名来确定容器。
通过–link选项来建立容器之间的连接,不但可以避免容器的IP和端口暴露到外网导致的安全问题,还可以防止容器自重启后IP地址发生变化导致的访问的失效,它的原理类似于DNS服务器的与域名和IP地址的映射。当容器的IP地址发生变化时,Docker自动维护映射关系中的IP地址
该容器中的/etc/hosts记录了master的IP地址为172.17.0.2.即redis-master容器的IP地址。
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 集群搭建,主从搭建以及单机安装
- 单机架构升级集群架构--redis主从集群搭建工作记
- 【胖鱼头】基于Sentinel的Redis主从分片集群搭建
- redis主从集群的搭建
- Redis3.2.1分布式集群搭建(非单机版本)
- Redis单机及其集群的搭建
- 基于docker的 redis集群之主从复制
- ubuntu虚拟机搭建docker内的redis集群
- 详解CentOS 6.5搭建Redis3.2.8单机分布式集群
- Redis单机搭建主从复制以及哨兵机制
- Docker:Docker搭建Redis集群(6)
- redis单机及其集群的搭建
- Redis单机及其集群的搭建
- redis主从集群搭建及容灾部署(哨兵sentinel)
- Redis集群~windows下搭建Sentinel环境及它对主从模式的实际意义
- Redis主从集群搭建及容灾部署(哨兵sentinel)
- redis主从集群搭建及容灾部署(哨兵sentinel)
- centos6搭建redis集群搭建(单机多节点)