150_实战:Redis集群部署


创建网卡

[root@ecs-214025 admin]# docker network create redis --subnet 172.20.0.0/16
5fc715b2e7d59146c144250e3dd1f11bccf2a088d5c1298e8fa77401314c7381
[root@ecs-214025 admin]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
c1e17e591880   bridge    bridge    local
e6a48c4d2378   host      host      local
4a8fbd908f27   mynet     bridge    local
50aac80a579d   none      null      local
5fc715b2e7d5   redis     bridge    local
[root@ecs-214025 admin]# docker network inspect redis
[
    {
        "Name": "redis",
        "Id": "5fc715b2e7d59146c144250e3dd1f11bccf2a088d5c1298e8fa77401314c7381",
        "Created": "2022-07-11T12:43:44.530896346+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.20.0.0/16"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
[root@ecs-214025 admin]# 

通过脚本创建六个redis配置并创建启动容器

image.png
:::info
下面的命令要放在 EOF 和 done 之间,for循环内
:::
image.png

for port in $(seq 1 6);
do
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.20.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.20.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; \
done
[root@ecs-214025 /]# for port in $(seq 1 6);
> do
> mkdir -p /mydata/redis/node-${port}/conf
> touch /mydata/redis/node-${port}/conf/redis.conf
> cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
> port 6379
> bind 0.0.0.0
> cluster-enabled yes
> cluster-config-file nodes.conf
> cluster-node-timeout 5000
> cluster-announce-ip 172.20.0.1${port}
> cluster-announce-port 6379
> cluster-announce-bus-port 16379
> appendonly yes
> EOF
> docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
> -v /mydata/redis/node-${port}/data:/data \
> -v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
> -d --net redis --ip 172.20.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; \
> done
a2dcd2aac94a3484d41a92668fcb4bbc3044afc9253ed36056a246774d0147fb
18d8015493f436ff179b68d57464c1c7db8f3668e82478e5227d4ce194c7b1f8
573b4a505e682fa4900d4fbc5abbafba07acc5fa95f8e356764442e093b00199
a9062c9d3f0a05f2076ac4553c9798eb7832d2ceb11ca3983b50d0891ae70314
72569fc93dab073c9c61d0f0be8ded725c89f90cc8971f48e65b825cd4f286f9
cad7f63bc49eb28d2612a729eaa120669e92292a3d2c9616bc56e494e8d1cbe7
[root@ecs-214025 /]# docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED         STATUS         PORTS                                                                                      NAMES
cad7f63bc49e   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   0.0.0.0:6376->6379/tcp, :::6376->6379/tcp, 0.0.0.0:16376->16379/tcp, :::16376->16379/tcp   redis-6
72569fc93dab   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   0.0.0.0:6375->6379/tcp, :::6375->6379/tcp, 0.0.0.0:16375->16379/tcp, :::16375->16379/tcp   redis-5
a9062c9d3f0a   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   0.0.0.0:6374->6379/tcp, :::6374->6379/tcp, 0.0.0.0:16374->16379/tcp, :::16374->16379/tcp   redis-4
573b4a505e68   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   6 seconds ago   Up 5 seconds   0.0.0.0:6373->6379/tcp, :::6373->6379/tcp, 0.0.0.0:16373->16379/tcp, :::16373->16379/tcp   redis-3
18d8015493f4   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   6 seconds ago   Up 5 seconds   0.0.0.0:6372->6379/tcp, :::6372->6379/tcp, 0.0.0.0:16372->16379/tcp, :::16372->16379/tcp   redis-2
a2dcd2aac94a   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   7 seconds ago   Up 6 seconds   0.0.0.0:6371->6379/tcp, :::6371->6379/tcp, 0.0.0.0:16371->16379/tcp, :::16371->16379/tcp   redis-1
[root@ecs-214025 /]# ls /mydata/redis/
node-1  node-2  node-3  node-4  node-5  node-6
[root@ecs-214025 /]# cat /mydata/redis/node-1/conf/redis.conf 
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.20.0.11
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
[root@ecs-214025 /]# 

创建集群

image.png

redis-cli --cluster create 172.20.0.11:6379 172.20.0.12:6379 172.20.0.13:6379 \
172.20.0.14:6379 172.20.0.15:6379 172.20.0.16:6379 --cluster-replicas 1 
[root@ecs-214025 /]# docker exec -it redis-1 /bin/sh

/data # ls
appendonly.aof  dump.rdb        nodes.conf

/data # redis-cli --cluster create 172.20.0.11:6379 172.20.0.12:6379 172.20.0.13:6379 \
> 172.20.0.14:6379 172.20.0.15:6379 172.20.0.16:6379 --cluster-replicas 1 
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.20.0.15:6379 to 172.20.0.11:6379
Adding replica 172.20.0.16:6379 to 172.20.0.12:6379
Adding replica 172.20.0.14:6379 to 172.20.0.13:6379
M: 67bc8ee0d01d943fe48fcbcb8e326a0b3b85e883 172.20.0.11:6379
   slots:[0-5460] (5461 slots) master
M: 9010c0c35414b792b7446757c319e4d18d9af7d0 172.20.0.12:6379
   slots:[5461-10922] (5462 slots) master
M: bb82af4c8efd18eab634fd2e6a8dea36d5903d5b 172.20.0.13:6379
   slots:[10923-16383] (5461 slots) master
S: f6bac43d0c34c52ca0034f196e69aacbe384a994 172.20.0.14:6379
   replicates bb82af4c8efd18eab634fd2e6a8dea36d5903d5b
S: 54f32d574c8d5848ad75cbe407b4796b66d8722f 172.20.0.15:6379
   replicates 67bc8ee0d01d943fe48fcbcb8e326a0b3b85e883
S: b50dffa3d34dc6a6bca2483d645b7a9202b9d219 172.20.0.16:6379
   replicates 9010c0c35414b792b7446757c319e4d18d9af7d0

Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
...
>>> Performing Cluster Check (using node 172.20.0.11:6379)
M: 67bc8ee0d01d943fe48fcbcb8e326a0b3b85e883 172.20.0.11:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: bb82af4c8efd18eab634fd2e6a8dea36d5903d5b 172.20.0.13:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 54f32d574c8d5848ad75cbe407b4796b66d8722f 172.20.0.15:6379
   slots: (0 slots) slave
   replicates 67bc8ee0d01d943fe48fcbcb8e326a0b3b85e883
M: 9010c0c35414b792b7446757c319e4d18d9af7d0 172.20.0.12:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: f6bac43d0c34c52ca0034f196e69aacbe384a994 172.20.0.14:6379
   slots: (0 slots) slave
   replicates bb82af4c8efd18eab634fd2e6a8dea36d5903d5b
S: b50dffa3d34dc6a6bca2483d645b7a9202b9d219 172.20.0.16:6379
   slots: (0 slots) slave
   replicates 9010c0c35414b792b7446757c319e4d18d9af7d0
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
/data # 

连接集群测试

:::info
连接集群:redis-cli -c
:::

/data # redis-cli -c

127.0.0.1:6379> 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:4663
cluster_stats_messages_pong_sent:4730
cluster_stats_messages_sent:9393
cluster_stats_messages_ping_received:4725
cluster_stats_messages_pong_received:4663
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:9393

127.0.0.1:6379> cluster nodes
bb82af4c8efd18eab634fd2e6a8dea36d5903d5b 172.20.0.13:6379@16379 master - 0 1657520853000 3 connected 10923-16383
54f32d574c8d5848ad75cbe407b4796b66d8722f 172.20.0.15:6379@16379 slave 67bc8ee0d01d943fe48fcbcb8e326a0b3b85e883 0 1657520853687 5 connected
9010c0c35414b792b7446757c319e4d18d9af7d0 172.20.0.12:6379@16379 master - 0 1657520852685 2 connected 5461-10922
67bc8ee0d01d943fe48fcbcb8e326a0b3b85e883 172.20.0.11:6379@16379 myself,master - 0 1657520853000 1 connected 0-5460
f6bac43d0c34c52ca0034f196e69aacbe384a994 172.20.0.14:6379@16379 slave bb82af4c8efd18eab634fd2e6a8dea36d5903d5b 0 1657520853586 4 connected
b50dffa3d34dc6a6bca2483d645b7a9202b9d219 172.20.0.16:6379@16379 slave 9010c0c35414b792b7446757c319e4d18d9af7d0 0 1657520852000 6 connected

127.0.0.1:6379> set a b
-> Redirected to slot [15495] located at 172.20.0.13:6379
OK

172.20.0.13:6379> get a
"b"
172.20.0.13:6379> 

:::info
关闭redis-3,再次获取a的值,可以获取到,redis-4由从机转为主机,提供服务
:::

172.20.0.13:6379> exit

/data # exit

[root@ecs-214025 /]# docker stop redis-3
redis-3

[root@ecs-214025 /]# docker exec -it redis-1 /bin/sh

/data # redis-cli -c

127.0.0.1:6379> cluster nodes
bb82af4c8efd18eab634fd2e6a8dea36d5903d5b 172.20.0.13:6379@16379 master,fail - 1657521344924 1657521344623 3 connected
54f32d574c8d5848ad75cbe407b4796b66d8722f 172.20.0.15:6379@16379 slave 67bc8ee0d01d943fe48fcbcb8e326a0b3b85e883 0 1657521384709 5 connected
9010c0c35414b792b7446757c319e4d18d9af7d0 172.20.0.12:6379@16379 master - 0 1657521384208 2 connected 5461-10922
67bc8ee0d01d943fe48fcbcb8e326a0b3b85e883 172.20.0.11:6379@16379 myself,master - 0 1657521384000 1 connected 0-5460
f6bac43d0c34c52ca0034f196e69aacbe384a994 172.20.0.14:6379@16379 master - 0 1657521384509 8 connected 10923-16383
b50dffa3d34dc6a6bca2483d645b7a9202b9d219 172.20.0.16:6379@16379 slave 9010c0c35414b792b7446757c319e4d18d9af7d0 0 1657521383707 6 connected

127.0.0.1:6379> get a
-> Redirected to slot [15495] located at 172.20.0.14:6379
"b"
172.20.0.14:6379> 

posted @   清风(学习-踏实)  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2021-07-11 080_Mybatis缓存
2021-07-11 070_Mybatis动态SQL
2021-07-11 060_Mybatis结果映射(多对一和一对多)
2021-07-11 050_Lombok
2021-07-11 040_Mybatis注解开发
2021-07-11 030_Mybatis日志和分页
2021-07-11 020_Mybatis配置解析
点击右上角即可分享
微信分享提示