• openEuler 系统操作 Docker Compose 容器化部署 Redis Cluster 集群的节点添加、删除和可视化监控


    Redis Cluster 集群回顾

    上一篇文章 中我们讲解了在 openEuler 系统中容器化部署 Redis Cluster 集群模式,部署环境和镜像信息如下:

    • openEuler 22.03 lts x86_64,规格 4c8g,hdd 100G 硬盘
    • redis:7.2.3-alpine3.18
    • Docker Engine - Community 24.0.7
    • Docker Compose version v2.21.0

    查看 redis 集群运行状态如下:

    [root@redis redis-cluster]# docker compose version
    Docker Compose version v2.21.0
    [root@redis redis-cluster]# docker compose ls
    NAME                STATUS              CONFIG FILES
    redis-cluster       running(6)          /home/jeff/docker/redis-cluster/redis-compose.yaml
    [root@redis redis-cluster]# docker container ls
    CONTAINER ID   IMAGE                    COMMAND                   CREATED      STATUS      PORTS     NAMES
    0b1298e268c8   redis:7.2.3-alpine3.18   "docker-entrypoint.s…"   3 days ago   Up 3 days             redis6979
    6ab62db8b863   redis:7.2.3-alpine3.18   "docker-entrypoint.s…"   3 days ago   Up 3 days             redis6679
    89db0baf10ef   redis:7.2.3-alpine3.18   "docker-entrypoint.s…"   3 days ago   Up 3 days             redis6879
    bb52cfab5a13   redis:7.2.3-alpine3.18   "docker-entrypoint.s…"   3 days ago   Up 3 days             redis6579
    5648246b22fc   redis:7.2.3-alpine3.18   "docker-entrypoint.s…"   3 days ago   Up 3 days             redis6779
    626f5286a324   redis:7.2.3-alpine3.18   "docker-entrypoint.s…"   3 days ago   Up 3 days             redis6479
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 进入 master 节点 redis6479
    [root@redis redis-cluster]# docker container exec -it redis6479 /bin/sh
    /data # redis-cli -c -h 172.17.97.27 -p 6479 -a '123456' --raw
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    172.17.97.27:6479> 
    
    • 1
    • 2
    • 3
    • 4
    • 查看 redis cluster 信息
    172.17.97.27:6479> cluster info
    cluster_state:ok
    cluster_slots_assigned:16384
    cluster_slots_ok:16384
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:6
    cluster_size:3
    cluster_current_epoch:6
    cluster_my_epoch:1
    cluster_stats_messages_ping_sent:78
    cluster_stats_messages_pong_sent:74
    cluster_stats_messages_sent:152
    cluster_stats_messages_ping_received:69
    cluster_stats_messages_pong_received:78
    cluster_stats_messages_meet_received:5
    cluster_stats_messages_received:152
    total_cluster_links_buffer_limit_exceeded:0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 查看 redis cluster 集群节点信息
    172.17.97.27:6479> cluster nodes
    dd899a703c3625cc520a63b7d7ff43cd858fee2d 172.17.97.27:6679@16679 master - 0 1699610730191 3 connected 10923-16383
    03d72c6c044eca519a8d23819d11378e29a08a5f 172.17.97.27:6479@16479 myself,master - 0 1699610730000 1 connected 0-5460
    66b4a1b3a2a2228f2f5e29685d086ea91fb6f088 172.17.97.27:6579@16579 master - 0 1699610732202 2 connected 5461-10922
    f3a91b7a89526e176c9b910e8aaddc6a3053779a 172.17.97.27:6779@16779 slave dd899a703c3625cc520a63b7d7ff43cd858fee2d 0 1699610730000 3 connected
    95664c7b93b8c750e88c25cf008861dbbbf13af2 172.17.97.27:6879@16879 slave 03d72c6c044eca519a8d23819d11378e29a08a5f 0 1699610731196 1 connected
    83e58fd778bf873129d7c97cb0f85e3fefb86b6c 172.17.97.27:6979@16979 slave 66b4a1b3a2a2228f2f5e29685d086ea91fb6f088 0 1699610729185 2 connected
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这是我们之前 docker 容器化环境搭建的 redis cluster 环境信息,接下来我们使用 redis-cli 验证下基本的数据存储。

    openEuler 系统查看端口是否被占用

    此处我们可以使用 lsof 查看 redis 端口占用情况。

    • dnf 安装 lsof
    [root@redis redis-cluster]# dnf install -y lsof
    Last metadata expiration check: 0:32:37 ago on 2023年11月10日 星期五 13时51分50秒.
    Dependencies resolved.
    ================================================================================================================================
     Package                    Architecture                 Version                                 Repository                Size
    ================================================================================================================================
    Installing:
     lsof                       x86_64                       4.94.0-1.oe2203                         OS                        93 k
    
    Transaction Summary
    ================================================================================================================================
    Install  1 Package
    
    Total download size: 93 k
    Installed size: 193 k
    Downloading Packages:
    lsof-4.94.0-1.oe2203.x86_64.rpm                                                                 101 kB/s |  93 kB     00:00    
    --------------------------------------------------------------------------------------------------------------------------------
    Total                                                                                            69 kB/s |  93 kB     00:01     
    Running transaction check
    Transaction check succeeded.
    Running transaction test
    Transaction test succeeded.
    Running transaction
      Preparing        :                                                                                                        1/1 
      Installing       : lsof-4.94.0-1.oe2203.x86_64                                                                            1/1 
      Verifying        : lsof-4.94.0-1.oe2203.x86_64                                                                            1/1 
    
    Installed:
      lsof-4.94.0-1.oe2203.x86_64                                                                                                   
    
    Complete!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 指定端口查看,redismaster 节点 redis6479
    [root@redis redis-cluster]# lsof -i:6479
    COMMAND     PID             USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    redis-ser 45318 systemd-coredump    7u  IPv4 118707      0t0  TCP *:6479 (LISTEN)
    redis-ser 45318 systemd-coredump    8u  IPv6 118708      0t0  TCP *:6479 (LISTEN)
    redis-ser 45318 systemd-coredump   23u  IPv4 124974      0t0  TCP redis.mshome.net:6479->redis.mshome.net:45068 (ESTABLISHED)
    redis-ser 45549 systemd-coredump   23u  IPv4 122473      0t0  TCP redis.mshome.net:45068->redis.mshome.net:6479 (ESTABLISHED)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 查看所有监听端口
    lsof -i 
    
    • 1

    注意:上述命令均需要 root 权限才能执行。

    Redis Cluster 验证

    Redis CLI 客户端命令验证

    • 添加一个 test 键,值为 "hello,world"
    172.17.97.27:6479> set test "hello,world"
    -> Redirected to slot [6918] located at 172.17.97.27:6579
    OK
    172.17.97.27:6579> get test
    hello,world
    172.17.97.27:6579> PING
    PONG
    172.17.97.27:6579> exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    通过上面的信息操作验证,redis cli 命令操作正常。

    Redis GUI 工具验证

    Redis 客户端桌面工具这里我们使用官方推出的 RedisInsight

    RedisInsight 工具有两种模式,分别是:宿主机直接下载安装或者采用 docker 容器化部署。

    宿主机安装 RedisInsight

    注意:目前 RedisInsight 支持 Redis 版本 4 及更高版本。

    • RedisInsight v2.36https://github.com/RedisInsight/RedisInsight/releases/tag/2.36.0
    • The best Redis GUIhttps://redis.com/redis-enterprise/redis-insight/

    RedisInsight

    此处为了省事,我就不安装桌面客户端模式了,感兴趣的小伙伴自行下载安装。

    Docker 容器化部署 RedisInsight

    除了宿主机安装 RedisInsight for windows 桌面工具方式,此处还可以直接下载 docker 镜像 redislabs/redisinsight:latest,执行命令下载:

    PS C:\Users\Jeffrey.Chai> docker pull redislabs/redisinsight
    Using default tag: latest
    latest: Pulling from redislabs/redisinsight
    bd159e379b3b: Pull complete
    de08aeb7fd50: Pull complete
    7091270c8142: Pull complete
    2f44657947b6: Pull complete
    55e2b120f544: Pull complete
    2334b37e06e6: Pull complete
    d31ad784df66: Pull complete
    d88ac93467d5: Pull complete
    62e1f12ea619: Pull complete
    92457786662e: Pull complete
    eaeaaab2bb3c: Pull complete
    4f4fb700ef54: Pull complete
    61895bd73f82: Pull complete
    cd4f466154c9: Pull complete
    669853c54f83: Pull complete
    Digest: sha256:b03ab1426d0d861b0370e05ee670a8819c8ab36b987ca59e4a3e92e0038d089c
    Status: Downloaded newer image for redislabs/redisinsight:latest
    docker.io/redislabs/redisinsight:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    运行容器:

    PS E:\docker-volume> ls
    
    
        目录: E:\docker-volume
    
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    d-----         2023/4/11     14:15                database
    d-----         2023/7/28     13:44                esdata
    da----         2023/9/20     16:56                redisdata
    d-----        2023/11/15     15:19                redisinsight
    
    PS E:\docker-volume> docker run -d --name redisinsight -v ./redisinsight:/db -p 8001:8001 redislabs/redisinsight
    7b2aac61d63b7b54eb774c9cbcb820758e4452401325ea3398e9fa4e183c3163
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    本机使用的是 windows 环境,此处新建目录 E:\docker-volume\redisinsight,上面运行的命令挂载 volume 到指定目录文件夹。

    查看运行的容器 redisinsight,输出如下信息:

    PS E:\docker-volume> docker container ls
    CONTAINER ID   IMAGE                    COMMAND                   CREATED         STATUS                 PORTS                              NAMES
    7b2aac61d63b   redislabs/redisinsight   "bash ./docker-entry…"   7 minutes ago   Up 7 minutes           0.0.0.0:8001->8001/tcp             redisinsight
    
    • 1
    • 2
    • 3

    浏览器输入地址:http://localhost:8001/ 显示页面如下:

    redisinsight-1

    翻译信息如下:

    redisinsight-1-1

    点击【CONFIRM/确认】进入后页面显示入下:

    redisinsight-2

    此处我们已经有 redis-cluster-server,选择【I already have a database

    redisinsight-3-1

    • 单实例 Redis 连接

    由于我本地 docker for windows/wsl2 环境运行了一个单实例的 dapr_redis,如下所示:

    dapr_redis

    此处我们选择第一项【Connect to a Redis Database】,先尝试连接下该实例的 dapr_redis

    查看宿主机 ip 地址:

    [root@redis redis-cluster]# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:15:5d:03:36:16 brd ff:ff:ff:ff:ff:ff
        inet 172.17.97.27/20 brd 172.17.111.255 scope global dynamic noprefixroute eth0
           valid_lft 51316sec preferred_lft 51316sec
        inet6 fe80::6789:89e4:df04:ad30/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
        link/ether 02:42:25:a8:f6:1f brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
           valid_lft forever preferred_lft forever
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    输入如下配置信息:

    • ip: 192.168.2.46
    • port: 6379

    redisinsight-3-2
    redisinsight-3-3

    点击上面的【dapr_redis】进入如下页面:

    redisinsight-3-4

    • 集群模式 Redis 连接

    此时我们继续采用 Docker 容器化部署的 RedisInsight 连接 redis-cluster 环境,redis 集群环境信息如下:

    redis-cluster

    选择左上方的【ADD REDIS DATABASE】添加 redis-cluster 连接:

    redisinsight-4

    输入 redis.conf 配置信息:

    • IP:Port => 172.17.97.27:6479
    • Password => 123456
      redisinsight-5

    链接 redis-cluster 被拒绝,提示信息如下:

    Could not connect: Error 113 connecting to 172.17.97.27:6479. No route to host.
    
    • 1

    出错原因:redis server 端的防火墙设置了过滤规则。

    • 查看防火墙运行状态:
    systemctl status firewalld
    
    • 1

    显示 Active: active (running),说明防火墙在运行状态。

    Active: active (running)

    解决办法,关闭防火墙。

    • 暂时性关闭
    systemctl stop firewalld
    
    • 1
    • 永久性关闭
    systemctl disable firewalld 
    
    • 1

    再次查看防火墙的状态,显示信息如下图:

    Active: inactive (dead)

    从上图中可以看到状态信息 Active: inactive (dead) ,说明 firewalld 已经停止运行。此时我们在输入上面信息点击【ADD REDIS DATABASE】即可。

    除了使用官方的 Redisinsight GUI 连接访问, 我们还可以使用第三方工具【Another Redis Desktop Manager】连接测试:

    Another-Redis-1

    连接进入后,显示信息如下:

    Another-Redis-2

    博文参考:redis 搭建集群,拒绝连接问题解决 => https://blog.csdn.net/youtiantin/article/details/121972562

    添加集群节点

    注意:下面的添加集群节点操作环节,均需要进入容器内执行才可执行 redis-cli 命令,因此在下面的环节中就不做过多说明。

    启动 Reids 扩容服务

    我们当前的 redis-cluster 环境是 3主3从,现在对该环境进行扩容,变成 4主4从,另外就还需要启动两个 redis-server,由于此处的演示环境是采用 1vm 部署 docker 容器化的 reids 服务,因此这里需要启动 2redis 容器。

    规划新扩容的两个 redis 服务服下:

    • redis7079(当作 master 节点),对应端口 7079
    • redis7179(当作 slave/replica 节点),对应端口 7179

    注意:实际情况中,更具具体情况编排 redis 端口。

    为了现有集群环境风格统一,同样在当前目录下新建两个 redis 分别对应的目录文件夹:

    mkdir redis7079 redis7179
    
    • 1

    准备 redis7079redis.conf 文件:

    # 修改为后台启动
    #daemonize yes
    # 修改端口号
    port 7079
    # 指定数据文件存储位置
    #dir /usr/local/redis-app/7079/
    # 开启集群模式
    cluster-enabled yes
    # 集群节点信息文件配置
    cluster-config-file nodes-7079.conf
    # 集群节点超时间
    cluster-node-timeout 15000
    # 去掉bind绑定地址
    # bind 127.0.0.1 -::1 (这里没写错就是加#注释掉bind配置)
    # 关闭保护模式
    protected-mode no
    # 开启aof模式持久化
    appendonly yes
    # 设置连接Redis需要密码123(选配)
    requirepass 123456
    # 设置Redis节点与节点之间访问需要密码123(选配)
    masterauth 123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    可以执行命令依次单个运行 redis,注意 port/端口 编排:

    docker run -p 6379:6379 --name redis7079 \
    -v /home/jeff/docker/redis-cluster/redis7079/redis.conf:/etc/redis/redis.conf \ 
    -v /home/jeff/docker/redis-cluster/redis7079/data:/data \ 
    -d redis:7.2.3-alpine3.18 redis-server /etc/redis/redis.conf \ 
    --appendonly yes
    
    • 1
    • 2
    • 3
    • 4
    • 5

    说明:这里拿一个点举例,其他的类似。

    此处为了方便省事,这里就不手动单个运行新扩容的 redis 服务了,直接采用 docker composeyaml 文件动态执行,copy 一份原来的 redis-compose.yaml 文件重命名为 redis-compose-expand.yaml

    cp ./redis-compose.yaml ./redis-compose-expand.yaml
    
    • 1

    文件 redis-compose-expand.yaml 修改内容如下:

    version: '3.8'
    services:
      redis7079:
        network_mode: 'host'
        image: redis:7.2.3-alpine3.18
        container_name: redis7079
        restart: always
        command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
        logging:
          driver: 'json-file'
          options:
            max-size: '3g'
        volumes:
          - ./redis6479/data:/data
          - ./redis6479/redis.conf:/usr/local/etc/redis/redis.conf
          - ./redis6479/logs:/logs
    
      redis7179:
        network_mode: 'host'
        image: redis:7.2.3-alpine3.18
        container_name: redis7179
        restart: always
        command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
        logging:
          driver: 'json-file'
          options:
            max-size: '3g'
        volumes:
          - ./redis6579/data:/data
          - ./redis6579/redis.conf:/usr/local/etc/redis/redis.conf
          - ./redis6579/logs:/logs
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    然后再 copy 一份 redis-build.sh 命名为 redis-build-expand.sh

    cp ./redis-build.sh ./redis-build-expand.sh
    
    • 1

    文件 redis-build-expand.sh 修改内容如下:

    #!/bin/bash
    echo "1.创建 redis-app 目录,路径 /usr/local/redis-app/"
    cd /usr/local/
    sudo mkdir ./redis-app
    
    echo "2.准备 redis7079 节点目录文件"
    cd /usr/local/redis-app/
    sudo mkdir ./7079
    cd /home/jeff/docker/redis-cluster;
    sudo mkdir ./redis7079
    cp -f ./redis.conf ./redis7079/redis.conf;
    sed -i "s/6379/7079/g" ./redis7079/redis.conf;
    cd ./redis7079
    sudo rm -rf ./redis7079/data;
    sudo rm -rf ./redis7079/logs;
    
    echo "3.准备 redis7179 节点目录文件"
    cd /usr/local/redis-app/
    sudo mkdir ./7179
    cd /home/jeff/docker/redis-cluster;
    sudo mkdir ./redis7179
    cp -f ./redis.conf ./redis7179/redis.conf;
    sed -i "s/6379/7179/g" ./redis7179/redis.conf;
    cd ./redis7179
    sudo rm -rf ./redis7179/data;
    sudo rm -rf ./redis7179/logs;
    
    echo "4.指定 redis-compose-expand.yaml 文件执行 docker compose 部署"
    cd /home/jeff/docker/redis-cluster;
    docker compose -f redis-compose-expand.yaml up -d
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    准备好上面环节后,此时执行 ./redis-build-expand.sh 脚本启动 redis 扩容服务。

    查看 redis 新扩容的容器服务是否启动:

    docker container ls
    
    • 1

    添加 Redis Master 主节点

    规划的主节点:172.17.97.27:7079

    • 添加主节点

    使用如下命令即可添加节点将一个新的节点添加到 redis-cluster 集群中。

    # -a 密码认证(没有密码不用带此参数)
    # --cluster add-node 添加节点 新节点IP:新节点PORT 任意存活节点IP:任意存活节点PORT
    ./bin/redis-cli -a 123456 --cluster add-node 172.17.97.27:7079 172.17.97.27:6479
    
    • 1
    • 2
    • 3

    此时我们使用 cluster nodes 命令查看集群信息表,可以看到 7079 已经被添加到了新的集群中了,但是 7079 并且没有任何的槽位信息,这时就需要迁移槽位(slots)。

    • 迁移主节点槽位

    使用如下命令将其它主节点的分片迁移到当前节点中。

    # -a 密码认证(没有密码不用带此参数)
    # --cluster reshard 槽位迁移 从节点IP:节点端口,迁移槽位到当前节点中
    ./bin/redis-cli --cluster reshard 172.17.97.27:6879
    
    • 1
    • 2
    • 3

    输入完成后会打印一片执行计划给你看,输入 yes 就会把槽位与数据全部迁移到新节点了。

    说明:从原来的 redis-cluster 中任意找一个从节点即可。

    迁移完毕后再 查看集群信息(cluster nodes) 可以看到新扩展的主节点 7079 已经添加了槽位了。

    添加 Redis Slave/Replica 从节点

    规划的从节点:172.17.97.27:7179

    同上操作,此处我们也需要把该从节点添加到 redis-cluster 集群环境中。

    • 添加从节点

    使用如下命令即可添加节点将一个新的节点添加到 redis-cluster 集群中。

    # -a 密码认证(没有密码不用带此参数)
    # --cluster add-node 添加节点 新节点IP:新节点端口 任意存活节点IP:任意存活节点端口
    ./bin/redis-cli -a 123456 --cluster add-node 172.17.97.27:7179 172.17.97.27:6479
    
    • 1
    • 2
    • 3

    执行命令 cluster nodes 查看集群节点,可以看到 7179 节点已经添加进去了,但是任何的节点添加都是主节点,那么接下来我们需要把 7179 改成从节点。

    • 配置从节点

    我们需要使用客户端命令连接到刚刚新添加的 7179 节点的上,并且为它设置一个主节点,设置完毕后再次查看集群节点信息,可以看到 7179 已经是 7079 的从节点了。

    进入新添加的 7179 从节点容器服务,执行 redis-cli 连接服务:

    # 连接需设为从节点的 Redis 服务
    ./bin/redis-cli -a 123456 -p 7179
    # 将当前节点分配为 8cf44439390dc9412813ad27c43858a6bb53365c 的从节点
    CLUSTER REPLICATE 8cf44439390dc9412813ad27c43858a6bb53365c
    
    • 1
    • 2
    • 3
    • 4

    说明:编号 8cf44439390dc9412813ad27c43858a6bb53365c 可以从 cluster nodes 集群节点查看,该编号代表的是 7079 主节点。

    此处我们就在原来 redis-cluster 集群中添加了新扩容的节点集群,由原来的 3主3从 扩容为 4主4从 集群。

    删除集群节点

    在删除主节点之前,首先需要对该主节点的槽进行迁移,把该主节点槽位移动到别的主节点中,其次在执行删除该主节点操作。

    删除 Redis Master 主节点

    • 新增的主节点:172.17.97.27:7079

    进入 7079 节点容器环节,执行如下命令:

    ./bin/redis-cli -a 123456 --cluster reshard 172.17.97.27:6479
    
    • 1

    迁移完后再次 查看集群节点/cluster nodes 信息,可以看到 6479 的槽位增加了,7079 的槽位已经没有了。

    • 删除主节点

    执行如下命令删除节点:

    # -a 密码认证(没有密码不用带此参数)
    # --cluster del-node 连接任意一个存活的节点IP:连接任意一个存活的节点PORT 要删除的节点ID 
    ./bin/redis-cli -a 123456 --cluster del-node 172.17.97.27:6479 8cf44439390dc9412813ad27c43858a6bb53365c
    
    • 1
    • 2
    • 3
    • 删除 redis 对应的容器

    由于要删除的 redis 主节点是 docker 容器化运行的,执行完上面步骤后,先停止该节点再执行删除。

    # 先停止 redis 节点容器
    docker stop <containerid>
    # 再删除 redis 节点容器
    docker rmi -f <containerid>
    
    • 1
    • 2
    • 3
    • 4

    删除 Redis Slave/Replica 从节点

    • 新增的从节点:172.17.97.27:7179

    从节点删除比较简单,直接删除即可(因为没有槽位要迁移),现在要删除 7179 节点。

    • 删除从节点

    执行如下命令删除节点:

    # -a 密码认证(没有密码不用带此参数)
    # --cluster del-node 连接任意一个存活的节点IP:连接任意一个存活的节点端口 要删除的节点ID 
    ./bin/redis-cli -a 123456 --cluster del-node 172.17.97.27:7179 71cb4fe842e83252f0ffabdc2b31eddb98fd4c89
    
    • 1
    • 2
    • 3

    删除成功后,再次 查看集群节点/cluster nodes ,可以看到 7179 节点已经在集群中消失了。

    • 删除 redis 对应的容器

    从节点也是 docker 容器化部署的,所以同上操作先停止该节点再执行删除。

    重新分配槽位(slots)

    注意:重新分配槽位慎用!!!

    该功能可以让集群的槽位重新平均分配,但是由于涉及到槽位大量迁移会导致整个 Redis 阻塞停止处理客户端的请求。

    执行如下命令重新分配槽位:

    # -a 密码认证(没有密码不用带此参数)
    # --cluster rebalance 重新分配集群中的槽位
    ./bin/redis-cli -a 123456 --cluster rebalance 172.17.97.27:6479
    
    • 1
    • 2
    • 3

    槽位(slots)重新分配完成后,再次 查看集群节点/cluster nodes ,可以看到所有的主节点的槽位都被重新分配了。

    Redis 新特性

    输入命令搜索:

    docker search redislabs
    
    • 1

    输出信息如下:

    [root@redis redis-cluster]# docker search redislabs
    NAME                                DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED
    redislabs/redisearch                Redis With the RedisSearch module pre-loaded…   60                   
    redislabs/rebloom                   A probablistic datatypes module for Redis        24                   [OK]
    redislabs/redisinsight              RedisInsight - The GUI for Redis                 92                   
    redislabs/rejson                    RedisJSON - Enhanced JSON data type processi…   53                   
    redislabs/operator                                                                   7                    
    redislabs/redis                     Clustered in-memory database engine compatib…   40                   
    redislabs/operator-internal         This repository contains pre-released versio…   1                    
    redislabs/redisgraph                A graph database module for Redis                26                   [OK]
    redislabs/redismod                  An automated build of redismod - latest Redi…   41                   [OK]
    redislabs/redistimeseries           A time series database module for Redis          12                   
    redislabs/redis-py                                                                   5                    
    redislabs/k8s-controller-internal                                                    0                    
    redislabs/k8s-controller                                                             2                    
    redislabs/memtier_benchmark         Docker image to run memtier_benchmark            0                    
    redislabs/olmtest                   Test artefact for OLM CSV                        1                    
    redislabs/redis-webcli              A tiny Flask app to provide access to Redis …   5                    [OK]
    redislabs/redisai                                                                    6                    
    redislabs/ng-redis-raft             Redis with redis raft module                     0                    
    redislabs/olm-bundle                                                                 0                    
    redislabs/redisgears                An automated build of RedisGears                 4                    
    redislabs/gesher                    K8s Admission control proxy                      0                    
    redislabs/ng-ci-runner                                                               0                    
    redislabs/rcp-kubectl               Container for running kubectl commands (plus…   1                    
    redislabs/redisml                   A Redis module that implements several machi…   3                    [OK]
    redislabs/fake-kubelet              The pod on this node will always be in the r…   0                    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    RedisMod 简介

    Redis 经过多年发展,早已不仅仅是一个单纯的内存数据库了。

    有了RedisMod 的支持,Redis 的功能将变得非常强大。

    RedisMod 中包含了如下增强模块:

    • RediSearch:一个功能齐全的搜索引擎;
    • RedisJSON:对 JSON 类型的原生支持;
    • RedisTimeSeries:时序数据库支持;
    • RedisGraph:图数据库支持;
    • RedisBloom:概率性数据的原生支持;
    • RedisGears:可编程的数据处理;
    • RedisAI:机器学习的实时模型管理和部署。

    使用 Docker 来安装 Redis,注意下载 Redis 的完全体版本 RedisMod,它是内置了所有模块的增强版 Redis,快速安装操作如下:

    • 下载 RedisMod 的镜像
    docker pull redislabs/redismod:latest
    
    • 1
    • 在容器中运行 RedisMod 服务
    docker run -p 6379:6379 --name redismod \
    -v /mydata/redismod/data:/data \
    -d redislabs/redismod:latest
    
    • 1
    • 2
    • 3

    RedisMod 服务安装完毕,接下来我们就使用 RedisInsight 来管理它了。

    Redis 可视化监控

    除了官方推出的 RedisInsight 工具可以用来可视化监控,还可以使用 Grafana 来作为 redis 的可视化监控。

    1. 下载 GrafanaDocker 镜像;
    docker pull grafana/grafana:latest
    
    • 1
    1. 下载完成后运行 Grafana
    docker run -p 3000:3000 --name grafana \
    -d grafana/grafana:latest
    
    • 1
    • 2
    1. 接下来下载 PrometheusDocker 镜像;
    docker pull prom/prometheus:latest
    
    • 1
    1. /mydata/prometheus/ 目录下创建 Prometheus 的配置 prometheus.yaml 文件:
    global:
      scrape_interval: 5s
    
    • 1
    • 2
    1. 运行 Prometheus,把宿主机中的配置文件 prometheus.yaml 挂载到容器中去;
    docker run -p 9090:9090 --name prometheus \
    -v /mydata/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
    -d prom/prometheus
    
    • 1
    • 2
    • 3
    1. 进入 grafana 容器并安装 redis-datasource 插件,安装完成后需要重启grafana 服务。
    docker exec -it grafana /bin/bash
    grafana-cli plugins install redis-datasource
    
    • 1
    • 2

    使用 RedisMod

    • 连接到 redismod 需要使用到它的容器 IP 地址,使用如下命令查看redismod 容器的 IP 地址;
    docker inspect redismod | grep IPAddress
    
    • 1
    • Grafana 中配置好 Redis 数据源,使用 admin:admin 账户登录,访问地址【http://172.17.97.27:3000/

    Grafana添加reids数据源

    • 配置 Redis 地址信息,注意使用 redismod 的容器 IP 地址;

    使用redismod容器ip

    • 打开 GrafanaDashboard 选择 Redis

    在这里插入图片描述

    • 接下来就可以看到一个非常完善的 Redis监控仪表盘 了,基本能满足Redis 的监控需求。

    Redis监控仪表盘

    欢迎关注/点赞/分享,希望该文章能帮助到您,感兴趣的小伙伴可自行尝试哟。

  • 相关阅读:
    web渗透测试----5、暴力破解漏洞--(9)MS-SQL密码破解
    《Go Web 编程》之第1章 Go与Web应用
    组件通信的方法
    MCAL系列介绍02-WDG(内狗)
    华为云云耀云服务器L实例评测|华为云耀云服务器L实例评测包管理工具安装软件(六)
    IOS使用WebView内嵌H5页面,使用a标签点击跳转无效问题解决
    Java开发学习(三)----Bean基础配置及其作用范围
    阿里云2核4G服务器5M带宽5年费用价格明细表
    MySQL-MHA高可用配置及故障切换
    初识asio
  • 原文地址:https://blog.csdn.net/ChaITSimpleLove/article/details/134403751