zoukankan      html  css  js  c++  java
  • centos7 docker搭建redis主从集群+sentinel哨兵

    一、安装docker启动一个redis实例

    1.centos7可以使用yum安装

    yum install -y docker
    2.下载redis镜像

    docker pull redis
    3.查看下载的镜像

    docker images

    REPOSITORY TAG IMAGE ID CREATED SIZE
    docker.io/redis latest a55fbf438dfd 4 weeks ago 95 MB
    4.用docker启动redis实例

    docker run -d --name myredis -p 6379:6379 redis --requirepass 123456 --masterauth 123456
    -d 以守护进程模式运行

    -p 将容器的6379端口映射到宿主机的6379端口

    --requirepass 设置redis密码

    --masterauth 设置连接主服务的密码,需要和requirepass设置一样

    centos 7.2版本运行docker时可能会失败,运行yum update更新系统版本到7.4之后就可以解决

    二、配置redis主从集群

    1.启动3个redis实例

    docker run -d --name redis-master -p 6379:6379 redis --requirepass 123456 --masterauth 123456
    docker run -d --name redis-slave1 -p 6380:6379 redis --requirepass 123456 --masterauth 123456
    docker run -d --name redis-slave2 -p 6381:6379 redis --requirepass 123456 --masterauth 123456
    2.查看容器ip

    docker inspect containerid(容器ID)
    docker inspect containername (容器名)


    此时3个redis的内网ip为:

    redis-master: 172.18.0.2:6379

    redis-slave1: 172.18.0.3:6379

    redis-slave2: 172.18.0.4:6379

    3.以bash进入容器

    [root@toc-ble-lock ~]# docker exec -it redis-master bash
    root@8a39ebe78d0c:/data#
    4.进入redis命令行

    root@8a39ebe78d0c:/data# redis-cli
    127.0.0.1:6379> get name
    (error) NOAUTH Authentication required.
    127.0.0.1:6379> auth password
    OK
    127.0.0.1:6379> get name
    "hhh"
    127.0.0.1:6379> exit
    root@8a39ebe78d0c:/data# redis-cli -a password
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    127.0.0.1:6379> get name
    "hhh"
    127.0.0.1:6379>
    直接redis-cli也可以进入,但是命令不会执行成功需要执行auth password验证密码

    或者直接redis-cli -a password 进入

    5.查看redis信息

    127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:0
    master_replid:bd076dd94f07a91f49a1bbd2720e88873144c1ae
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:0
    second_repl_offset:-1
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    127.0.0.1:6379>
    会发现3个redis都是master

    6.进入另外2个redis容器配置集群

    127.0.0.1:6379> SLAVEOF 172.18.0.2 6379
    因为在启动redis容器的时候指定了masterauth,所以不需要再进入redis设置masterauth

    如果启动redis容器时没有指定masterauth,需要进入redis设置masterauth,命令如下:

    127.0.0.1:6379> CONFIG SET masterauth 123456
    再次查看redis-master的信息

    到此主从redis配置完成。

    三、配置redis sentinel哨兵

    1.创建sentinel.conf文件

    [root@toc-ble-lock ~]# touch sentinel1.conf

    [root@toc-ble-lock ~]# vim sentinel1.conf

    粘贴以下内容:

    sentinel monitor mymaster 172.18.0.2 6379 2
    daemonize yes
    sentinel auth-pass mymaster 123456
    sentinel down-after-milliseconds mymaster 10000
    logfile "/data/log.txt"
    复制sentinel1.conf文件为sentinel2.conf和sentinel3.conf

    sentinel monior mymaster 172.18.0.2 6379 2 监听名为mymaster(名字随便起)的主服务 ip为172.18.0.2 端口为6379

    daemonize yes 以守护进程方式运行

    sentinel auth-pass mymaster <password> 验证主redis密码
    sentinel down-after-milliseconds mymaster 10000 超过10秒没有响应认为下线
    sentinel failover-timeout mymaster 60000 60秒超时
    logfile "/data/log.txt" 日志输出位置

    2.运行3个sentinel容器

    docker run -it --name sentinel1 -v /root/sentinel1.conf:/data/sentinel.conf -d redis
    docker run -it --name sentinel2 -v /root/sentinel2.conf:/data/sentinel.conf -d redis
    docker run -it --name sentinel3 -v /root/sentinel3.conf:/data/sentinel.conf -d redis
    分别进入3个sentinel容器中启动sentinel

    docker exec -it sentinel1 bash
    redis-sentinel sentinel.conf
    tail -f log.txt
    三个sentinel容器都启动成功会在log.txt里显示如下:

    3.测试

    停掉redis-master容器

    docker stop redis-master
    10秒之后重启redis-master

    docker start redis-master


    发现172.18.0.4从redis提升为主redis,172.18.0.2变为从redis

    再停掉新的主redis

    docker stop redis-slave2
    10秒之后重启redis-slave2

    docker start redis-slave2


    发现172.18.0.2从redis提升为主redis,172.18.0.4变为从redis

    4.注意

    1.如果在启动redis容器的时候没有指定--masterauth参数,每次停掉redis容器后redis服务的masterauth会被清空需要重新进入设置。

    2.--requirepass 和--masterauth 需要设置成一样的密码。

    3.因为master也可能会变成slave所以master服务要要设置masterauth。

    4.所有的redis服务要设置相同的requirepass密码。
    ————————————————
    版权声明:本文为CSDN博主「gaotianhd」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/gaotianhd/java/article/details/89511186

  • 相关阅读:
    LeetCode 326. Power of Three
    LeetCode 324. Wiggle Sort II
    LeetCode 322. Coin Change
    LeetCode 321. Create Maximum Number
    LeetCode 319. Bulb Switcher
    LeetCode 318. Maximum Product of Word Lengths
    LeetCode 310. Minimum Height Trees (DFS)
    个人站点大开发!--起始篇
    LeetCode 313. Super Ugly Number
    LeetCode 309. Best Time to Buy and Sell Stock with Cooldown (DP)
  • 原文地址:https://www.cnblogs.com/miaozhihang/p/12848895.html
Copyright © 2011-2022 走看看