• docker 搭建 redis 主从模式


    1:搜索redis 镜像(当前最新版本是6.2.6)

    [root@localhost ~]# docker search redis
    NAME                             DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    redis                            Redis is an open source key-value store that…   10051               [OK]                
    sameersbn/redis                                                                  83                                      [OK]
    grokzen/redis-cluster            Redis cluster 3.0, 3.2, 4.0, 5.0, 6.0, 6.2      79                                      
    rediscommander/redis-commander   Alpine image for redis-commander - Redis man66                                      [OK]
    redislabs/redisearch             Redis With the RedisSearch module pre-loaded…   40                                      
    redislabs/redisinsight           RedisInsight - The GUI for Redis                35                                      
    kubeguide/redis-master           redis-master with "Hello World!"                33                                      
    redislabs/redis                  Clustered in-memory database engine compatib… 

    2:下载镜像

    docker pull redis

    3:创建Redis配置文件

         下载redis 最新的redis.conf 文件(可以官网下载redis的tar 包,然后解压。使用其中的redis.conf 文件)

          在物理机上创建 redis配置文件目录(自定义) /home/zhangxs/Documents/dockerdata/redis/config

    (1)创建主从配置文件(从redis.conf中复制出多份文件即可)

    [root@localhost config]# ll
    total 252
    -rw-rw-r--. 1 polkitd zhangxs 83390 Oct 20 16:20 redis.conf     // master节点6380
    -rw-r--r--. 1 polkitd root    83413 Oct 20 16:21 slave6381.conf // 从节点,端口6381
    -rw-r--r--. 1 polkitd root    83409 Oct 20 16:22 slave6382.conf //从节点,端口6382

    (2)redis.conf 修改

    bind 0.0.0.0 # 允许连接的客户端。默认是 127.0.0.1 。可以设置指定的客户端ip
    port 6380 # 设置访问端口

    (3)slave6381.conf

    bind 0.0.0.0 # 允许连接的客户端。默认是 127.0.0.1 。可以设置指定的客户端ip
    port 6381 # 设置访问端口
    slaveof master 6380 # 设置master节点的ip 端口。因为容器重启ip可能会发生变化,所以这里没有硬编码ip。使用别名的方式。下面会讲到

    (4)slave6382.conf

    bind 0.0.0.0 # 允许连接的客户端。默认是 127.0.0.1 。可以设置指定的客户端ip
    port 6382 # 设置访问端口
    slaveof master 6380 # 设置master节点的ip 端口。因为容器重启ip可能会发生变化,所以这里没有硬编码ip。使用别名的方式。下面会讲到

    4:启动容器

    (1)master节点(容器名 r-master)

    docker run -v /home/zhangxs/Documents/dockerdata/redis/config:/data/etc/redis -d -p 6380:6380 --name r-master redis redis-server /data/etc/redis/redis.conf

     - v(数据卷) : 映射物理机 与 容器目录共享
     -d :让容器后台运行

     -p:物理机的 6380 映射到 容器的 6380端口

    - name:r-master   masrer容器的名称

    redis-server /data/etc/redis/redis.conf  : 容器启动后执行的命令,这里是指定redis的配置文件

    (2)  启动slave6381 和 6382  容器

    docker run -v /home/zhangxs/Documents/dockerdata/redis/config:/data/etc/redis -d -p 6381:6381 --link r-master:master --name r-slave6381 redis redis-server /data/etc/redis/slave6381.conf
    docker run -v /home/zhangxs/Documents/dockerdata/redis/config:/data/etc/redis -d -p 6382:6382 --link r-master:master --name r-slave6382 redis redis-server /data/etc/redis/slave6382.conf

     slave 节点启动跟master 多了一个 --link 配置

     link使用 格式

        --link <name or id>:alias  # name:源容器名称,id:源容器id
        作用:可以连接两个容器,使两个容器可以相互通信。并且还可以接受源容器的环境变量等数据。当源容器重启会自动更新接收容器的/etc/hosts文件

    5:查看两个 slave 容器的 hosts 配置,看下 --link 是否生效

    [root@localhost config]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
    ca4da15e431f        redis               "docker-entrypoint.s…"   50 minutes ago      Up 50 minutes       6379/tcp, 0.0.0.0:6382->6382/tcp   r-slave6382
    25abe8e18d8a        redis               "docker-entrypoint.s…"   2 hours ago         Up 55 minutes       6379/tcp, 0.0.0.0:6381->6381/tcp   r-slave6381
    b4e37ae6e33e        redis               "docker-entrypoint.s…"   2 hours ago         Up 53 minutes       6379/tcp, 0.0.0.0:6380->6380/tcp   r-master
    [root@localhost config]# docker exec -it 25abe8e18d8a /bin/bash
    root@25abe8e18d8a:/data# more /etc/hosts 
    127.0.0.1    localhost
    ::1    localhost ip6-localhost ip6-loopback
    fe00::0    ip6-localnet
    ff00::0    ip6-mcastprefix
    ff02::1    ip6-allnodes
    ff02::2    ip6-allrouters
    172.18.0.2    master b4e37ae6e33e r-master # master节点
    172.18.0.3    25abe8e18d8a # 当前容器 r-slave6381
    [root@localhost config]# docker exec -it ca4da15e431f /bin/bash
    root@ca4da15e431f:/data# more /etc/hosts
    127.0.0.1    localhost
    ::1    localhost ip6-localhost ip6-loopback
    fe00::0    ip6-localnet
    ff00::0    ip6-mcastprefix
    ff02::1    ip6-allnodes
    ff02::2    ip6-allrouters
    172.18.0.2    master b4e37ae6e33e r-master # master 节点
    172.18.0.4    ca4da15e431f # 当前节点 r-slave6382

      从slave节点的hosts 文件可以看到link 生效了。

    6:登录master节点 查看两个从节点是否连接上来

    [root@localhost config]# docker exec -it b4e37ae6e33e /bin/bash
    root@b4e37ae6e33e:/data# redis-cli -h 127.0.0.1 -p 6380
    127.0.0.1:6380> info
    
    
    
    # Replication
    role:master # 表示当前节点的角色
    connected_slaves:2 # slave 的数量。可以看到有 6381,6382两个节点
    slave0:ip=172.18.0.3,port=6381,state=online,offset=5431,lag=1
    slave1:ip=172.18.0.4,port=6382,state=online,offset=5431,lag=0
    master_failover_state:no-failover
    master_replid:ff6a639562d45268e55caf72d27cab9332f03bab
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:5431
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:5431

    7:设置redis 数据卷

    目前配置只有redis.conf 是存在物理机上,其他数据比如dump.rdb,日志文件等 都是存在容器中,如果容器删除,丢失 就会造成数据丢失

    (2)创建dump存储目录(自定义) :/home/zhangxs/Documents/dockerdata/redis/dump

    (2)修改 master的redis.conf 配置。

             dbfilename dump.rdb # 改成 dbfilename dump6380.rdb
             dir ./  # 改成 dir ./dump/ (自定义)

    (3)删除master 容器

    (4)重新创建masrter 容器

    docker run -v /home/zhangxs/Documents/dockerdata/redis/config:/data/etc/redis -v /home/zhangxs/Documents/dockerdata/redis/dump:/data/dump -d -p 6380:6380 --name r-master redis redis-server /data/etc/redis/redis.conf

    新增了 -v /home/zhangxs/Documents/dockerdata/redis/dump:/data/dump 配置。 /data/dump 对应着[dir ./dump] 这个配置。[./]表示/data 目录

    (5)在我们映射的dump已经存在了dump6380.rdb文件

    [root@localhost dump]# ll
    total 4
    -rw-r--r--. 1 polkitd input 175 Oct 21 09:54 dump6380.rdb
    [root@localhost dump]# pwd
    /home/zhangxs/Documents/dockerdata/redis/dump

    其他节点同理

  • 相关阅读:
    MFC中CTREECTRL的checkbox问题
    GLOG的使用说明
    安装Electron
    WIN32中DLL的建立
    MFC动态创建菜单
    C++迭代器
    VIM常用命令
    层次遍历二叉树
    sql存储过程中加引号
    Apache Tomcat 绿色版安装Service(服务)
  • 原文地址:https://www.cnblogs.com/zhangXingSheng/p/15429670.html
Copyright © 2020-2023  润新知