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配置并创建启动容器
:::info
下面的命令要放在 EOF 和 done 之间,for循环内
:::
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 /]#
创建集群
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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!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配置解析