zoukankan      html  css  js  c++  java
  • Docker:docker搭建redis一主多从集群(配置哨兵模式)

    角色 实例IP 实例端口 宿主机IP 宿主机端口
    master 172.19.0.2 6382 192.168.1.200 6382
    slave01 172.19.0.3 6383 192.168.1.200 6383
    slave02 172.19.0.4 6384 192.168.1.200 6384

    1. 创建文件夹

    这里我习惯在home文件夹下创建文件夹

    #创建文件夹,方便之后生成配置文件
    cd /home
    
    mkdir redis

    2. 编写自动生成配置文件脚本

    首先编写配置文件 redis-cluster.tmpl

    #进入redis文件夹内
    cd redis
    
    #创建配置文件
    vi redis-cluster.tmpl

    内容如下

    # redis端口
    port ${PORT}
    # 关闭保护模式
    protected-mode no
    # 配置远程访问
    bind 0.0.0.0
    # 开启集群(配置主从节点需要关闭集群模式)
    cluster-enabled no
    # 集群节点配置
    cluster-config-file nodes.conf
    # 超时
    cluster-node-timeout 5000
    # 集群节点IP host模式为宿主机IP
    cluster-announce-ip 172.19.0.1
    # 集群节点端口 6379 - 6384
    cluster-announce-port ${PORT}
    cluster-announce-bus-port 1${PORT}
    #配置主节点IP
    slaveof 172.19.0.2 6382
    # 开启 appendonly 备份模式
    appendonly yes
    # 每秒钟备份
    appendfsync everysec
    # 对aof文件进行压缩时,是否执行同步操作
    no-appendfsync-on-rewrite no
    # 当目前aof文件大小超过上一次重写时的aof文件大小的100%时会再次进行重写
    auto-aof-rewrite-percentage 100
    # 重写前AOF文件的大小最小值 默认 64mb
    auto-aof-rewrite-min-size 64mb
    # 配置数据库个数
    databases 16

    编写哨兵模式配置文件 sentinel.conf (在redis的bin 目录下有一个redis.sentinel文件,这个文件用于启动哨兵的配置文件,哨兵的配置文件需要我们自己去创建)

    #创建哨兵模式配置文件
    vi sentinel.conf

    内容如下

    # 添加守护进程模式
    daemonize yes
    
    # 添加指明日志文件名
    logfile "/usr/local/redis/sentinel_log.log"
    
    # 修改启动端口
    port 26379
    
    # 添加关闭保护模式
    protected-mode no
    
    # 修改sentinel monitor为master的ip端口,最后的数字2表示: 有两个哨兵认证master挂掉,才会推选新的master
    sentinel monitor mymaster 172.19.0.2 6382 2
    
    sentinel auth-pass mymaster GaosiDev 
    
    sentinel down-after-milliseconds mymaster 30000
    
    sentinel parallel-syncs mymaster 1
    
    sentinel failover-timeout mymaster 10000  
    
    sentinel deny-scripts-reconfig yes

    最后编写自动生成脚本 redis-cluster-config.sh

    #创建自动生成脚本
    vi redis-cluster-config.sh

    内容如下

    #! /bin/bash
    # 6382 6384是准备创建的三个redis的端口区间
    for port in `seq 6382 6384`; do mkdir -p ./redis-cluster/${port}/conf && PORT=${port} envsubst < ./redis-cluster.tmpl > ./redis-cluster/${port}/conf/redis.conf && cp ./sentinel.conf ./redis-cluster/${port}/conf/sentinel.conf && mkdir -p ./redis-cluster/${port}/data; done

    3. 运行脚本自动生成配置文件

    #运行脚本
    bash redis-cluster-config.sh

    之后就会生成redis-cluster文件夹

    4. 创建docker容器

    首先创建网段

    #创建网段
    docker network create --driver bridge --subnet 172.19.0.1/24  redis_net

    开始创建redis容器

    docker run -d --network redis_net --ip 172.19.0.2 -p 6382:6382 -v /home/redis/redis-cluster/6382/conf/:/usr/local/etc/redis/ --name=redis1 redis:6.0.8 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
    docker run -d --network redis_net --ip 172.19.0.3 -p 6383:6383 -v /home/redis/redis-cluster/6383/conf/:/usr/local/etc/redis/ --name=redis2 redis:6.0.8 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
    docker run -d --network redis_net --ip 172.19.0.4 -p 6384:6384 -v /home/redis/redis-cluster/6384/conf/:/usr/local/etc/redis/ --name=redis3 redis:6.0.8 redis-server /usr/local/etc/redis/redis.conf --appendonly yes

    5. 启动哨兵模式

    #进入redis2容器
    docker exec -it redis2 bash
    
    #启动哨兵模式
    redis-server /usr/local/etc/redis/sentinel.conf --sentinel
    #进入redis3容器
    docker exec -it redis3 bash
    
    #启动哨兵模式
    redis-server /usr/local/etc/redis/sentinel.conf --sentinel

    至此搭建(一主多从(哨兵模式))redis完成。

    测试时,可进入容器查看当前redis的master是否变化,

    #登录redis
    redis-cli -h 172.19.0.3 -p 6383 -c
    
    #查看主从关系
    info replication

    文章整合至:https://blog.csdn.net/qq_38900565/article/details/108335532https://blog.csdn.net/macro_g/article/details/82593996?utm_medium=distribute.wap_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.wap_blog_relevant_pic&dist_request_id=1332024.8086.16189865735716115&depth_1-utm_source=distribute.wap_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.wap_blog_relevant_pichttps://www.cnblogs.com/daleyzou/p/docker-redis-sentinel.html

    ----------------------------------- 作者:怒吼的萝卜 链接:http://www.cnblogs.com/nhdlb/ -----------------------------------
  • 相关阅读:
    通用数据级权限控制解决方案的实现(二)(转)
    linux copy file to window
    日历 存储过程
    ssas 日期 时间维度表 sql 代码
    Dynamic CRM常用代码记录
    跨服务器查询sql (摘要)
    验证码实现
    office文档转pdf
    页面导出生成pdf,使用wkhtmltopdf第三方工具
    iTextSharp简单生成pdf和操作pdf添加水印
  • 原文地址:https://www.cnblogs.com/nhdlb/p/14687564.html
Copyright © 2011-2022 走看看