• Docker搭建redis集群


    Redis Cluster要求至少需要3个master才能组成一个集群,同时每个master至少需要有一个slave节点,这里我们搭建3个集群节点,每个集群节点包含1个master和2个slave,全都部署在一台服务器上,分别赋予不同的端口。

    1.拉取镜像

    docker pull redis:latest
    
    • 1

    2.编写redis配置文件

    搭建的集群总共包含9个redis服务,每个redis服务需要一个配置文件。通过下面命令依次在服务器上创建出9个端口号不同的redis.conf配置文件。

    for port in $(seq 1 9); \
    do \
    mkdir -p /usr/local/src/redis-cluster/node-${port}/conf
    touch /usr/local/src/redis-cluster/node-${port}/conf/redis.conf
    cat << EOF > /usr/local/src/redis-cluster/node-${port}/conf/redis.conf
    port 736${port}
    protected-mode no
    masterauth 1234
    requirepass 1234
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    cluster-announce-ip 127.0.0.1
    cluster-announce-port 736${port}
    cluster-announce-bus-port 1736${port}
    appendonly yes
    EOF
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    port :redis服务端口;
    protected-mode:保护模式,默认值 yes,即开启。开启保护模式以后,需配置 bind ip 或者设置访问密码;关闭保护模式,外部网络可以直接访问;
    masterauth:如果主节点开启了访问认证,从节点访问主节点需要认证;
    requirepass:添加访问认证;
    cluster-enabled:是否开启集群模式,默认 no;
    cluster-config-file:集群节点信息文件;
    cluster-node-timeout:集群节点连接超时时间;
    cluster-announce-ip:集群节点 IP,填写宿主机的 IP;
    cluster-announce-port:集群节点映射端口;
    cluster-announce-bus-port:集群节点总线端口;
    appendonly:是否开启 AOF 持久化模式,默认 no;

    3.运行容器

    通过命令依次启动这9个容器。

    for port in $(seq 1 9); \
    do \
    docker run --privileged=true --name redis-node${port} --restart=always \
    -p 736${port}:736${port} -p 1736${port}:1736${port} \
    -v /usr/local/src/redis-cluster/node-${port}/data:/data \
    -v /usr/local/src/redis-cluster/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
    -d redis:latest redis-server /etc/redis/redis.conf
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.构建集群

    1.进入任一容器内
    docker exec -it 0704786d044e bash
    2.切换到 /usr/local/bin/ 目录
    cd /usr/local/bin/
    3.通过下面命令将所有的节点添加到集群中
    redis-cli -a 1234 --cluster create 127.0.0.1:7361 127.0.0.1:7362 127.0.0.1:7363 127.0.0.1:7364 127.0.0.1:7365 127.0.0.1:7366 127.0.0.1:7367 127.0.0.1:7368 127.0.0.1:7369 --cluster-replicas 2
    4.出现提示:Can I set the above configuration? (type 'yes' to accept): 后输入:yes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    完成集群构建先会出现一下信息:
    在这里插入图片描述

    5.查看集群

    1.进入任一容器内
    docker exec -it 0704786d044e bash
    2.切换到 /usr/local/bin/ 目录
    cd /usr/local/bin/
    3.通过下面命令连接到任一集群客户端,连接到客户端后就可以执行对应的读/写等操作了
    redis-cli -c -a 1234 -h 127.0.0.1 -p 7361
    4.通过下面命令查看集群连接信息
    cluster nodes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    查询的集群连接信息显示为:
    在这里插入图片描述

    当切换到 /usr/local/bin/ 目录后,也可以直接通过下面命令直接查询集群状态信息:

    redis-cli -a 1234 --cluster check 127.0.0.1:7361
    
    • 1

    显示结果为:
    在这里插入图片描述

    6.测试集群

    连接任一的节点插入一条数据,再查看这条数据会存储到哪个具体的节点上。
    在这里插入图片描述
    可以看到我们首先连接到7361端口的服务上,然后插入一个键为key1,集群会根据这个插入的键通过hash slot 算法来计算这个键的hash值由此来决定放置哪个槽,再根据放入的槽与节点的映射关系,最终插入的数据将会存储在槽所映射的节点上。由于每个集群节点又是一主二从的模式,所以3台redis服务上会存储同样的数据。
    在这里插入图片描述

  • 相关阅读:
    leetcode系列(双语)003——GO无重复字符的最长子串
    vue3组件事件传参
    详解字符串格式化输出
    Chapter 9 SVM实践
    SRM供应商平台哪些好用?
    Android应用开发-网络编程①
    Vue项目中使用element-plus的el-table组件-组件使用-样式修改
    CRDB-事务层知识点
    报错 | devtools工具安装问题
    【云原生 | 10】Docker数据管理
  • 原文地址:https://blog.csdn.net/qq_33807380/article/details/125418223