• Docker部署Redis主从复制模式


    Redis主从复制

    Redis主从复制模式,是将一个redis服务器作为master,其余多个作为slave,从服务器只读不可写,主服务器可读可写,以此来让从服务器分担大部分的只读请求。主从复制模式的核心工作模式是主服务器和从服务器成为彼此的客户端,这样才能接收来自彼此的信息进行数据同步(从服务器也是会向主服务器发送信息的,比比如偏移量,同步指令等等)。

    准备环境和工具

    系统环境

    使用cat /etc/redhat-release查看
    
    CentOS Linux release 7.8.2003 (Core)
    

    安装docker

    这个就不介绍了,网上教程太多

    安装pip3

    yum -y install python3-pip
    

    安装docker-compose

    pip3 install docker-compose
    

    Redis配置

    我的配置文件存放路径

    /usr/local/etc/redis/master-slave
    

    配置master

    新建redis-master.conf文件

    # bind 127.0.0.1
    
    # 启用保护模式
    # 即在没有使用bind指令绑定具体地址时
    # 或在没有设定密码时
    # Redis将拒绝来自外部的连接
    # protected-mode yes
    
    # 监听端口
    port 6379
    
    # 启动时不打印logo
    # 这个不重要,想看logo就打开它
    always-show-logo no
    
    # 设定密码认证
    requirepass 123456
    
    # 禁用KEYS命令
    # 一方面 KEYS * 命令可以列出所有的键,会影响数据安全
    # 另一方面 KEYS 命令会阻塞数据库,在数据库中存储了大量数据时,该命令会消耗很长时间
    # 期间对Redis的访问也会被阻塞,而当锁释放的一瞬间,大量请求涌入Redis,会造成Redis直接崩溃
    rename-command KEYS ""
    
    # 此外还应禁止 FLUSHALL 和 FLUSHDB 命令
    # 这两个命令会清空数据,并且不会失败
    
    

    配置slave1

    新建redis-slave1.conf文件

    # bind 127.0.0.1
    
    # 启用保护模式
    # 即在没有使用bind指令绑定具体地址时
    # 或在没有设定密码时
    # Redis将拒绝来自外部的连接
    # protected-mode yes
    
    # 监听端口
    port 6380
    
    # 启动时不打印logo
    # 这个不重要,想看logo就打开它
    always-show-logo no
    
    # 设定密码认证
    requirepass 123456
    
    # 禁用KEYS命令
    # 一方面 KEYS * 命令可以列出所有的键,会影响数据安全
    # 另一方面 KEYS 命令会阻塞数据库,在数据库中存储了大量数据时,该命令会消耗很长时间
    # 期间对Redis的访问也会被阻塞,而当锁释放的一瞬间,大量请求涌入Redis,会造成Redis直接崩溃
    rename-command KEYS ""
    
    # 此外还应禁止 FLUSHALL 和 FLUSHDB 命令
    # 这两个命令会清空数据,并且不会失败
    
    # 配置master节点信息
    # 格式:
    #slaveof <masterip> <masterport>
    # 此处masterip所指定的redis-server-master是运行master节点的容器名
    # Docker容器间可以使用容器名代替实际的IP地址来通信
    slaveof 127.0.0.1 6379
    
    # 设定连接主节点所使用的密码
    masterauth "123456"
    
    

    配置slave2

    新建redis-slave2.conf文件

    # bind 127.0.0.1
    
    # 启用保护模式
    # 即在没有使用bind指令绑定具体地址时
    # 或在没有设定密码时
    # Redis将拒绝来自外部的连接
    # protected-mode yes
    
    # 监听端口
    port 6381
    
    # 启动时不打印logo
    # 这个不重要,想看logo就打开它
    always-show-logo no
    
    # 设定密码认证
    requirepass 123456
    
    # 禁用KEYS命令
    # 一方面 KEYS * 命令可以列出所有的键,会影响数据安全
    # 另一方面 KEYS 命令会阻塞数据库,在数据库中存储了大量数据时,该命令会消耗很长时间
    # 期间对Redis的访问也会被阻塞,而当锁释放的一瞬间,大量请求涌入Redis,会造成Redis直接崩溃
    rename-command KEYS ""
    
    # 此外还应禁止 FLUSHALL 和 FLUSHDB 命令
    # 这两个命令会清空数据,并且不会失败
    
    # 配置master节点信息
    # 格式:
    #slaveof <masterip> <masterport>
    # 此处masterip所指定的redis-server-master是运行master节点的容器名
    # Docker容器间可以使用容器名代替实际的IP地址来通信
    slaveof 127.0.0.1 6379
    
    # 设定连接主节点所使用的密码
    masterauth "123456"
    
    

    Docker-compose配置

    我的配置文件存放路径

    /usr/local/etc/redis/master-slave
    

    docker-compose配置文件

    新建docker-compose.yml文件

    ---
    
    version: '3'
    
    services:
      # 主节点的容器
      redis-server-master:
        image: redis
        container_name: redis-server-master
        restart: always
        # 为了规避Docker中端口映射可能带来的问题
        # 这里选择使用host网络
        network_mode: host
        # 指定时区,保证容器内时间正确
        environment:
          TZ: "Asia/Shanghai"
        volumes:
          # 映射配置文件和数据目录
          - ./redis-master.conf:/usr/local/etc/redis/redis.conf
          - ./data/redis-master:/data
        sysctls:
          # 必要的内核参数
          net.core.somaxconn: '511'
        command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
      # 从节点1的容器
      redis-server-slave-1:
        image: redis
        container_name: redis-server-slave-1
        restart: always
        network_mode: host
        depends_on:
          - redis-server-master
        environment:
          TZ: "Asia/Shanghai"
        volumes:
          - ./redis-slave1.conf:/usr/local/etc/redis/redis.conf
          - ./data/redis-slave-1:/data
        sysctls:
          net.core.somaxconn: '511'
        command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
      # 从节点2的容器
      redis-server-slave-2:
        image: redis
        container_name: redis-server-slave-2
        restart: always
        network_mode: host
        depends_on:
          - redis-server-master
        environment:
          TZ: "Asia/Shanghai"
        volumes:
          - ./redis-slave2.conf:/usr/local/etc/redis/redis.conf
          - ./data/redis-slave-2:/data
        sysctls:
          net.core.somaxconn: '511'
        command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    

    启动容器

    在docker-compose.yml这个配置文件的目录下执行docker-compose up命令
    

    启动成功以后使用docker ps查看一下容器状态
    docker ps

    主从模式验证

    查看状态

    客户端连接上master服务器,使用info replication命令查看其从服务器连接
    info replication

    connnected_slave:2 表示现在有两个从服务器正常连接
    slave0和slave1分别显示两个从服务器的ip和port,以及偏移量等等

    从服务器是只读的吗

    直接在从服务器上验证一下即可

    set b 200

    在主服务器上设置一个值,从服务器能否同步

    master:
    set a 100

    slave1:
    get a

    slave2:
    get a

    可以看到从服务器是同步成功的。

    参考文章

    使用 Docker 配置 Redis 主从复制
    Redis持久化之RDB持久化
    Redis主从复制新旧复制功能变化
    docker-compose安装---pip3

  • 相关阅读:
    C# Firefox Session Manager 文件的导出与管理
    安徒生的童话《冰雪皇后》原本是这样的
    许多人不知道的生活小秘方
    洗衣服窍门大全
    小窍门解决大问题(绝对值得收藏)
    日常生活小技巧
    谷歌浏览器应用商店打不开,下载不了扩展程序的解决办法
    食品安全如何让百姓放心
    把 WORD 里的换行符(向下的箭头)换成回车符(常用回车符)
    充满创意的生活小妙招 --爱生活爱创意!
  • 原文地址:https://www.cnblogs.com/alinainai/p/14086977.html
Copyright © 2020-2023  润新知