• docker搭建redis主从复制


    1、安装镜像

    docker pull redis:6.2.6

    2、新建目录

    D:\redis-data\node1

    3、修改mast 的 redis.conf配置

    命令功能
    appendonly yes 启动Redis持久化功能
    protected-mode no 关闭protected-mode模式,此时外部网络可以直接访问 
    bind 0.0.0.0 注释掉,设置所有IP都可以访问 
    requirepass 密码 设置密码
    dir ./ 输入本地redis数据库存放文件夹

    4、创建并启动

    docker run -d --name redis-master --restart=always --privileged=true -p 6379:6379 -v /d/redis-data/node1/redis.conf:/etc/redis/redis.conf -v /d/redis-data/node1:/data redis:6.2.6 redis-server /etc/redis/redis.conf

    命令描述
    -d 后台运行
    --restart=always 重启docker时,自动启动相关容器
    --privileged=true 以特权方式启动容器,解决报错问题(Permission denied)
    --appendonly yes redis持久化
    redis-server /etc/redis/redis.conf Redis 容器中设置 redis-server 每次启动读取 /etc/redis/redis.conf 这个配置为准
    \ shell 命令换行

    5、设置网络

     docker network connect newwork redis-master

    6、安装slave从库

    复制主库的配置文件,然后修改以下项

    # 配置连接主库信息 replicaof 172.19.0.2 6379

    此处是主库的网络ip地址,通过 docker inspect

    docker inspect redis-master

    # 从机只读模式默认是开启的: replica-read-only yes

    # 配置主库密码 masterauth 123456

    执行

    docker run -d --name redis-slave-01 --restart=always --privileged=true -p 6380:6379 -v /d/redis-data/node2/redis.conf:/etc/redis/redis.conf redis:6.2.6 redis-server /etc/redis/redis.conf

    # 进入容器 docker exec -it redis-slave-01 /bin/bash # 连接redis redis-cli -h 127.0.0.1 -p 6379 -a 123456 # 查看主从配置 info replication

     为up表示连接主库成功

    7、失败及原因

    通过docker logs 容器 查看日志

    1、docker run时,docker run repository name must be lowercase.
    解决:-v /C/Program Files/Docker/redis/data:/redis/data 路径存在空格,使用"“包裹有空格的部分:-v /C/”Program Files”/Docker/redis/data:/redis/data
    2、can’t open config file ‘/etc/redis/redis-6379.con’: No such file or directory
    3、注意dir: 快照文件在容器中的存放目录,要与挂载目录一致
    4、不要在配置文件写daemonize yes,会与docker run冲突,想后台运行只可以在docker run 里加上-d
    5、Error condition on socket for SYNC: Connection refused
    slaveof写的不对,master的ip不是127.0.0.1,去master控制台
    cat /etc/hosts,下面的才是master的ip
    6、Failed trying to load the MASTER synchronization DB from disk
    取消data挂载,即取消-v D:\docker\redis\data:/redis/data的挂载,还要注释slave.conf中dir的路径
    7、如何在windows登录容器内redis客户端查看redis信息
    解决:打开Windows PowerShell,docker exec -it 07de9938cf17 redis-cli -p 端口号,(07de9938cf17是容器id)登录用auth 123,(123是redis密码),执行info replication,查看role:master
    感谢:https://blog.csdn.net/qq_33067315/article/details/114995533
    8、redis master重启后无法同步
    在master的conf里也加上masterauth 123(123是master密码,当master成为slave也需要masterauth)

    导出镜像:docker save -o image-id,输出位置在命令行所在路径

    来源:https://www.cnblogs.com/lvlinguang/p/15120440.html

    https://blog.csdn.net/hu_mingwei/article/details/119299018

  • 相关阅读:
    Magento开发文档(一):Magento入门
    Magento开发文档(三):Magento控制器
    CSS 第一天
    iOS 关闭定时器
    thinkphp 5.0 Request使用
    iOS icon与启动图片
    数组
    PHP获取表单变量
    iOS ipa 包优化
    UIImage 渲染模式
  • 原文地址:https://www.cnblogs.com/huangguojin/p/16174988.html
Copyright © 2020-2023  润新知