• 基于docker部署redis多主多从集群


    在docker中部署redis多主多从集群,准备部署三对一主一从服务,共6个

    首先获取镜像

    这里使用的是6.0.8版本

    docker pull redis:6.0.8

     

    启动六个容器

    1. docker run -d --name redis-node1 --net host --privileged=true -v /usr/local/redis/node1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6371
    2. docker run -d --name redis-node2 --net host --privileged=true -v /usr/local/redis/node2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6372
    3. docker run -d --name redis-node3 --net host --privileged=true -v /usr/local/redis/node3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6373
    4. docker run -d --name redis-node4 --net host --privileged=true -v /usr/local/redis/node4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6374
    5. docker run -d --name redis-node5 --net host --privileged=true -v /usr/local/redis/node5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6375
    6. docker run -d --name redis-node6 --net host --privileged=true -v /usr/local/redis/node6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6376

    命令说明:

    --net host : 使用宿主机的IP和端口,默认

    --privileged=true : 获取宿主机root用户权限

    -v /usr/local/redis/node1:/data : 挂载容器数据卷

    --cluster-enabled yes : 开启redis集群

    --appendonly yes : 开启持久化

    构建主从关系

    进入一个容器

    docker exec -it redis-node1 /bin/bash

    执行下面命令,下面命令中ip换成实际ip(记得打开6个容器使用的端口,以及每个端口+10000的端口,因为redis集群通信使用的端口是主端口+10000。我这里就打开了6371到6376 以及 16371到16376 几个端口)

    --cluster-replicas 1  表示1主1从分配

    redis-cli --cluster create 111.111.111.111:6371 111.111.111.111:6372 111.111.111.111:6373 111.111.111.111:6374 111.111.111.111:6375 111.111.111.111:6376 --cluster-replicas 1

    执行后出现下面内容,显示主从对应关系,可以看到是3主3从,如果同意配置输入yes回车 

     yes之后出现下面内容表示成功

    使用查看集群状态命令同样可以看到上面描述的对应关系等内容,如下

    redis-cli --cluster check 111.111.111.111:6371

     

    查看集群信息

    同样使用docker exec命令进入容器1 

    连接redis客户端

    redis-cli -p 6271

    查看信息

    cluster info

     可以看到已知节点为6个

    查看节点信息

    cluster nodes

     可以看到三个主节点和三个从节点的ip和端口,从对应的编码来看,4号从机挂在1号主机,5号从机挂在2号主机,6号从机挂在3号主机。这个对应关系不是固定的,可能下次部署的时候对应关系就不是这样了

     

    测试数据读写

    同样docker exec进入容器1

    使用集群模式连接redis1(普通的单机版连接方式连接之后,存数据可能会出现error情况,原因是存的key计算的hash值跟16383取余之后,不在当前redis节点的存储范围)

    后面加个-c就表示以集群方式连接

    redis-cli -p 6371 -c

    set一个k1 v1 ,会提示重定向到6373所在节点,因为k1计算出来的12706槽位在6373节点范围

     

    宕机切换迁移

    当一个主机宕机的时候,从机应该上位为主机

    docker stop redis-node1 把6371节点停掉,之后稍等一会儿,等集群内部发心跳通知

    进入6372容器,连接6372,查看集群状态

    可以看到6371节点已经是fail了,并且之前他的从节点6374上位成了主节点

    并且之前存的数据也是可以正常访问的

    再次启动6371节点后,查看节点状态,发现6374依旧是master节点,6371变成了slave节点

    如果希望还是恢复成原来的6371为主节点,可以把6374停一会儿再启动,两个节点身份就会再次互换回来

     

  • 相关阅读:
    nlp实战——使用IMDB数据集做情感分析
    设置背景图片大小的方法
    day05DHCP部署与安全以及DNS服务器搭建过程
    刷题记录:牛客NC22598Rinne Loves Edges
    14、获取1-10000之间的所有回文数
    读书的风景
    Linux搭建SFTP服务器
    Zabbix Centos8 安装笔记
    网络协议:透彻解析HTTPS协议
    第18章linux系统-备份与恢复
  • 原文地址:https://blog.csdn.net/qq_41890624/article/details/127893584