zoukankan      html  css  js  c++  java
  • docker-compose编排项目redis容器实现主从复制

    一.pip管理工具安装

      docker-compose是python项目,所以安装需要通过python下的包管理工具pip安装。一般linux服务器都会预安装有python环境,所以优先检查python是否已经安装,pip管理工具是否已经安装

      

    # wget https://bootstrap.pypa.io/get-pip.py    #下载pip脚本
    # python2.7 get-pip.py                 #将pip绑定到python2.7中
    # pip install --upgrade pip        #更新pip
    # pip install docker-compose==1.22    #安装指定版本的docker-compose
    # docker -v
    Docker version 18.09.0

       当安装docker-compose可能遇到一些错误提示,如:自动删除request包失败时可以通过pip install --ignore-installed request命令忽略安装request包再安装docker-compose

    二.资料准备

      创建目录如/workdir作为redis容器的工作目录。在/workdir中创建redis-master.conf(主reids配置文件)、redis-slave.conf(从reids配置文件)、redis-master.sh(主容器的redis启动脚本)、redis-slave.sh(从容器的redis启动脚本)

      redis-master.conf主要配置如下:

      

    ################################## NETWORK #####################################
    bind 0.0.0.0  
    port 6379
    
    ################################## SECURITY ###################################
    requirepass 1
    
    
    ################################# REPLICATION #################################
    masterauth 1            #以防以后使用哨兵切换主节点后连接不到新主节点
    

       redis-slave.conf主要配置如下:

    ################################## NETWORK #####################################
    bind 0.0.0.0
    port 6379
    
    ################################## SECURITY ###################################
    requirepass 1
    
    
    ################################# REPLICATION #################################
    slaveof 172.20.0.2 6379      #指定主节点的ip
    masterauth 1
    

       redis-master.sh代码如下:

    #!/usr/bin/bash
    redis-server /workdir/redis-master.conf
    

       redis-slave.sh代码如下:

    #!/usr/bin/bash
    redis-server /workdir/redis-slave.conf
    

       准备docker-compose编排文件,由于当前docker引擎版本是18.09.0所以这里version使用3.7版本

    version: "3.7"
    services:
      redis-master:
         image: redis
         container_name: redis-master
         stdin_open: true
         tty: true
         networks:
           redis:
             ipv4_address: 172.20.0.2
         volumes:
           - "/workdir:/workdir"
         expose:
           - "6379"
         command: ["/bin/bash","/workdir/redis.sh"]
    
      redis-slave:
         image: redis
         container_name: redis-slave
         stdin_open: true
         tty: true
         depends_on:
           - redis-master
         networks:
           redis:
             ipv4_address: 172.20.0.3
         volumes:
           - "/workdir:/workdir"
         expose:
           - "6379"
         command: ["/bin/bash","/workdir/redis.sh"]
    
    
    networks:
      redis:
         driver: bridge
         ipam:
           driver: default
           config:
             - subnet: 172.20.0.0/16
    

      执行编排文件。

    # docker-compose up -d
    Creating network "docker-compose_redis" with driver "bridge"
    Creating redis-master ... done
    Creating redis-slave  ... done
    # docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    3f586ac5a1b8        redis               "/bin/bash /workdir/…"   11 seconds ago      Up 10 seconds       6379/tcp            redis-slave
    354d20e933bf        redis               "/bin/bash /workdir/…"   11 seconds ago      Up 10 seconds       6379/tcp            redis-master
    

      备注:

      1.如果在编排文件测试的过程中遇到error等错误,经重新编写后不能马上执行docker-compose up -d执行编排任务。因为之前的命令中很可能已经创建了指定的容器或网络等。需要执行 docker-compose down先停掉编排任务再执行 docker-compose up -d执行编排任务。

      2.写编排文件的时候曾经踩了一个大坑,容器建立完后使用bash脚本启动主、从redis服务时曾经尝试公用一个配置文件来启动。后来一台启动成功一台启动不成功。经过docker logs redis-slave查看日志后发现是

    ':C 15 Dec 09:43:39.423 # Fatal error, can't open config file '/workdir/docker-compose/redis-master.conf
    

       经过测试发现当一个redis服务通过一个配置文件启动后会把该配置文件的权限修改并且在服务执行的过程中会主动根据环境配置(如:哨兵或客户端设置环境变量时)的变动修改配置文件的值。所以两个redis服务不能共用一个配置文件,需要独立拥有自己的配置文件。

      3.根据上面的道理,在容器的使用过程中,不同容器尽量不要共用同一个文件或脚本,尽量分开使用,尽管使用的脚本内容一样也不要自己去跳这些坑。

  • 相关阅读:
    CEGUI的使用简单说明 冷夜
    Dword、LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR 冷夜
    WideCharToMultiByte和MultiByteToWideChar函数的用法 冷夜
    CEGUI数据文件 冷夜
    vc 编译连接选项 冷夜
    Microsoft Visual Studio is waiting for an internal operation to complete 解决方法 冷夜
    加载Torchlight(火炬之光)的layout布局文件 冷夜
    Jstl函数库
    <logic:empty/>,<logic:present/>和<logic:iterator/>标签
    动态ActionFormDynaActionForm
  • 原文地址:https://www.cnblogs.com/walterfong/p/10125506.html
Copyright © 2011-2022 走看看