当前位置: 首页 > news >正文

docker 部署Redis集群(三主三从,以及扩容、缩容)

1:创建6个redis容器

docker run -d --name redis01 --net host --privileged=true -v /opt/redis/redis01:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis02 --net host --privileged=true -v /opt/redis/redis02:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis03 --net host --privileged=true -v /opt/redis/redis03:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis04 --net host --privileged=true -v /opt/redis/redis04:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis05 --net host --privileged=true -v /opt/redis/redis05:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis06 --net host --privileged=true -v /opt/redis/redis06:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

2:查看容器运行状态

[root@localhost redis]# docker ps 
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS     NAMES
2230e0a5bf5c   redis:6.0.8   "docker-entrypoint.s…"   7 seconds ago    Up 6 seconds              redis06
0bc9f5da8601   redis:6.0.8   "docker-entrypoint.s…"   9 seconds ago    Up 8 seconds              redis05
e1431fb85072   redis:6.0.8   "docker-entrypoint.s…"   9 seconds ago    Up 8 seconds              redis04
01c2ff5e0090   redis:6.0.8   "docker-entrypoint.s…"   9 seconds ago    Up 8 seconds              redis03
88892f9eb9db   redis:6.0.8   "docker-entrypoint.s…"   9 seconds ago    Up 9 seconds              redis02
a13bfc991867   redis:6.0.8   "docker-entrypoint.s…"   44 seconds ago   Up 43 seconds             redis01

3:创建redis 3主3从集群

[root@localhost ~]# docker exec -it redis01 /bin/bash--cluster-replicas 1 表示为每个master,创建一个slave节点
root@localhost:/data# redis-cli --cluster create 192.168.1.31:6381 192.168.1.31:6382 192.168.1.31:6383 192.168.1.31:6384 192.168.1.31:6385 192.168.1.31:6386 --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 192.168.1.31:6385 to 192.168.1.31:6381
Adding replica 192.168.1.31:6386 to 192.168.1.31:6382
Adding replica 192.168.1.31:6384 to 192.168.1.31:6383
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-5460] (5461 slots) master
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[5461-10922] (5462 slots) master
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[10923-16383] (5461 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384replicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385replicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386replicates cd9a9149593770a920258bf75e1235ca4b904cd5
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 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-5460] (5461 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

4:查看集群状态

root@localhost:/data# redis-cli -p 6381
127.0.0.1:6381> keys *
(empty array)
127.0.0.1:6381> 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:300
cluster_stats_messages_pong_sent:310
cluster_stats_messages_sent:610
cluster_stats_messages_ping_received:305
cluster_stats_messages_pong_received:300
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:610127.0.0.1:6381> cluster nodes
cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381@16381 myself,master - 0 1700124241000 1 connected 0-5460
eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384@16384 slave 89228357317c6b7d6850fffa2f0819085def1a2f 0 1700124242176 2 connected
89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382@16382 master - 0 1700124242000 2 connected 5461-10922
5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386@16386 slave cd9a9149593770a920258bf75e1235ca4b904cd5 0 1700124240000 1 connected
d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385@16385 slave c2436c65625e1d74d8ea5bde328df04699d494e9 0 1700124239000 3 connected
c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383@16383 master - 0 1700124241149 3 connected 10923-16383可以看出主从关系如下:
192.168.1.31:6381 -> 192.168.1.31:6386
192.168.1.31:6382 -> 192.168.1.31:6384
192.168.1.31:6383 -> 192.168.1.31:6385

5:存储数据,必须连接redis集群,不能连接单节点

root@localhost:/data# redis-cli -p 6381 -c
127.0.0.1:6381> keys *
(empty array)
127.0.0.1:6381> set k1 v1
(error) MOVED 12706 192.168.1.31:6383
127.0.0.1:6381> set k2 v2
OK
127.0.0.1:6381> set k3 v3
OK
127.0.0.1:6381> set k4 v4
(error) MOVED 8455 192.168.1.31:6382
127.0.0.1:6381> 127.0.0.1:6381> set k1 v-cluster1
-> Redirected to slot [12706] located at 192.168.1.31:6383
OK
192.168.1.31:6383> set k2 v-cluster2
-> Redirected to slot [449] located at 192.168.1.31:6381
OK
192.168.1.31:6381> set k3 v3
OK
192.168.1.31:6381> set k4 v4
-> Redirected to slot [8455] located at 192.168.1.31:6382
OK

6:主从容错切换迁移
6.1:查看集群信息

root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381
192.168.1.31:6381 (cd9a9149...) -> 2 keys | 5461 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 5462 slots | 1 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 5461 slots | 1 slaves.
[OK] 4 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-5460] (5461 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

6.2:停止6381,redis01

[root@localhost redis]# docker stop redis01

6.3:查看集群状态

[root@localhost redis]# docker exec -it redis02 /bin/bash
root@localhost:/data# redis-cli -p 6382 -c查看集群状态:
127.0.0.1:6382> cluster nodes
eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384@16384 slave 89228357317c6b7d6850fffa2f0819085def1a2f 0 1700133223366 2 connected
5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386@16386 master - 0 1700133224000 7 connected 0-5460
d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385@16385 slave c2436c65625e1d74d8ea5bde328df04699d494e9 0 1700133224388 3 connected
89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382@16382 myself,master - 0 1700133223000 2 connected 5461-10922
cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381@16381 master,fail - 1700133123340 1700133116000 1 disconnected
c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383@16383 master - 0 1700133225412 3 connected 10923-16383192.168.1.31:6386,成为master了,192.168.1.31:6381宕机了。# 可以正常查询数据
127.0.0.1:6382> get k1
-> Redirected to slot [12706] located at 192.168.1.31:6383
"v-cluster1"
192.168.1.31:6383> get k2
-> Redirected to slot [449] located at 192.168.1.31:6386
"v-cluster2"
192.168.1.31:6386> get k3
"v3"
192.168.1.31:6386> get k4
-> Redirected to slot [8455] located at 192.168.1.31:6382
"v4"

6.4:启动redis01

[root@localhost redis]# docker start redis01

6.5:查看redis 集群状况

[root@localhost redis]# docker exec -it redis02 /bin/bash
root@localhost:/data# redis-cli -p 6382 -c
127.0.0.1:6382> cluster nodes
eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384@16384 slave 89228357317c6b7d6850fffa2f0819085def1a2f 0 1700134213000 2 connected
5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386@16386 master - 0 1700134213004 7 connected 0-5460
d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385@16385 slave c2436c65625e1d74d8ea5bde328df04699d494e9 0 1700134214020 3 connected
89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382@16382 myself,master - 0 1700134211000 2 connected 5461-10922
cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381@16381 slave 5b40728c470dac59556f7b51866e590e9038bbd9 0 1700134211000 7 connected
c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383@16383 master - 0 1700134212000 3 connected 10923-163836381成为slave,6386是master

6.6:恢复成原来的 6381位master,6386为slave,只需要重启redis06

docker stop redis06
docker start redis06

6.7:检查集群状况

root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381
192.168.1.31:6381 (cd9a9149...) -> 2 keys | 5461 slots | 1 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 5461 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 4 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-5460] (5461 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

7:主从扩容,增加一个节点6387为master,一个节点6388为slave

docker run -d --name redis07 --net host --privileged=true -v /opt/redis/redis07:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis08 --net host --privileged=true -v /opt/redis/redis08:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388[root@localhost redis]# docker exec -it redis07 /bin/bash
将新增的6387作为master节点加入集群
6387就是将要作为master新增节点
6381就是原来集群节点里面的领导
root@localhost:/data# redis-cli --cluster add-node 192.168.1.31:6387 192.168.1.31:6381
>>> Adding node 192.168.1.31:6387 to cluster 192.168.1.31:6381
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-5460] (5461 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.1.31:6387 to make it join the cluster.
[OK] New node added correctly.root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381
192.168.1.31:6381 (cd9a9149...) -> 2 keys | 5461 slots | 1 slaves.
192.168.1.31:6387 (f32e0d73...) -> 0 keys | 0 slots | 0 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 5461 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-5460] (5461 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots: (0 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.重新分配槽号:
root@localhost:/data# redis-cli --cluster reshard 192.168.1.31:6381
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-6826],[10923-12287] (8192 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots: (0 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096 
What is the receiving node ID? f32e0d7320635a5873beb3594927ed6eea318976 #6387的节点id
Please enter all the source node IDs.Type 'all' to use all the nodes as source nodes for the hash slots.Type 'done' once you entered all the source nodes IDs.
Source node #1: all   #从其他3个主节点拿槽位root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381  
192.168.1.31:6381 (cd9a9149...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6387 (f32e0d73...) -> 1 keys | 4096 slots | 0 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[1365-5460] (4096 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covere可以看到6387是3个新的区间,以前的还是连续?
重新分配成本太高,所以3家各匀出来一部分,从6381、6382、6383三个旧节点,分别匀出1364个槽位给新节点6387给6387 添加slave 6388,f32e0d7320635a5873beb3594927ed6eea318976是6387的编号
root@localhost:/data# redis-cli --cluster add-node 192.168.1.31:6388 192.168.1.31:6387 --cluster-slave --cluster-master-id f32e0d7320635a5873beb3594927ed6eea318976
>>> Adding node 192.168.1.31:6388 to cluster 192.168.1.31:6387
>>> Performing Cluster Check (using node 192.168.1.31:6387)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[1365-5460] (4096 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.1.31:6388 to make it join the cluster.
Waiting for the cluster to join
>>> Configure node as replica of 192.168.1.31:6387.
[OK] New node added correctly.root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381
192.168.1.31:6381 (cd9a9149...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6387 (f32e0d73...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[1365-5460] (4096 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
S: a8fd323608979efd31be1222d281db20b250820b 192.168.1.31:6388slots: (0 slots) slavereplicates f32e0d7320635a5873beb3594927ed6eea318976
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

8:主从缩容,将6387、6388踢出集群,恢复3主3从

1:先清除从节点6388
root@localhost:/data# redis-cli --cluster del-node 192.168.1.31:6388 a8fd323608979efd31be1222d281db20b250820b
>>> Removing node a8fd323608979efd31be1222d281db20b250820b from cluster 192.168.1.31:6388
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.
root@localhost:/data# 
root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381                                            
192.168.1.31:6381 (cd9a9149...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6387 (f32e0d73...) -> 1 keys | 4096 slots | 0 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[1365-5460] (4096 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
检查发现6388被删除了,只剩下7台redis 2:清理出来的槽号重新分配
将6387的槽号清空,重新分配,本例将清出来的槽号都给6381
root@localhost:/data# redis-cli --cluster reshard 192.168.1.31:6381
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[1365-5460] (4096 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096 
What is the receiving node ID? cd9a9149593770a920258bf75e1235ca4b904cd5   #6381节点id,用来接收空出来的槽号
Source node #1: f32e0d7320635a5873beb3594927ed6eea318976                  #6387节点id,被删除的那个
Source node #2: doneMoving slot 12284 from f32e0d7320635a5873beb3594927ed6eea318976Moving slot 12285 from f32e0d7320635a5873beb3594927ed6eea318976Moving slot 12286 from f32e0d7320635a5873beb3594927ed6eea318976Moving slot 12287 from f32e0d7320635a5873beb3594927ed6eea318976
Do you want to proceed with the proposed reshard plan (yes/no)? yes
Moving slot 12284 from 192.168.1.31:6387 to 192.168.1.31:6381: 
Moving slot 12285 from 192.168.1.31:6387 to 192.168.1.31:6381: 
Moving slot 12286 from 192.168.1.31:6387 to 192.168.1.31:6381: 
Moving slot 12287 from 192.168.1.31:6387 to 192.168.1.31:6381:root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381  
192.168.1.31:6381 (cd9a9149...) -> 2 keys | 8192 slots | 1 slaves.
192.168.1.31:6387 (f32e0d73...) -> 0 keys | 0 slots | 0 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-6826],[10923-12287] (8192 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots: (0 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.6387的4096个槽位都给6381了,6381有8192个槽位了3:再删除6387
root@localhost:/data# redis-cli --cluster del-node 192.168.1.31:6387 f32e0d7320635a5873beb3594927ed6eea318976
>>> Removing node f32e0d7320635a5873beb3594927ed6eea318976 from cluster 192.168.1.31:6387
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.4:恢复成3主3从
root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381                                            
192.168.1.31:6381 (cd9a9149...) -> 2 keys | 8192 slots | 1 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 4 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-6826],[10923-12287] (8192 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

相关文章:

docker 部署Redis集群(三主三从,以及扩容、缩容)

1:创建6个redis容器 docker run -d --name redis01 --net host --privilegedtrue -v /opt/redis/redis01:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381 docker run -d --name redis02 --net host --privilegedtrue -v /opt/redis/redis0…...

JavaScript 浮点数运算的精度问题及解决

JavaScript 浮点数运算的精度问题及解决 在 JavaScript 中整数和浮点数都属于 Number 数据类型,当浮点数做数学运算的时候,你经常会发现一些问题,举几个例子: 0.1 0.2 0.30000000000000004 console.log(0.1 0.2) 0.3000000…...

基于STM32的无线传感器网络(WSN)通信方案设计与实现

无线传感器网络(Wireless Sensor Network,简称WSN)是由一组分布式的无线传感器节点组成的网络,用于监测和收集环境中的各类物理信息。本文将基于STM32微控制器,设计并实现一个简单的无线传感器网络通信方案&#xff0c…...

Flink和Kafka连接时的精确一次保证

Flink写入Kafka两阶段提交 端到端的 exactly-once(精准一次) kafka -> Flink -> kafka 1)输入端 输入数据源端的 Kafka 可以对数据进行持久化保存,并可以重置偏移量(offset) 2)Flink内…...

UE4动作游戏实例RPG Action解析三:实现效果,三连击Combo,射线检测,显示血条,火球术

一、三连Combo 实现武器三连击,要求: 1.下一段Combo可以随机选择, 2.在一定的时机才能再次检测输入 3. 等当前片段播放完才播放下一片段 1.1、蒙太奇设置 通过右键-新建蒙太奇片段,在蒙太奇里创建三个片段,并且移除相关连接,这样默认只会播放第一个片段 不同片段播…...

Linux/麒麟系统上部署Vue+SpringBoot前后端分离项目

目录 1. 前端准备工作 1.1 在项目根目录创建两份环境配置文件 1.2 环境配置 2. 后端准备工作 2.1 在项目resources目录创建两份环境配置文件 2.2 环境配置 3. 前后端打包 3.1 前端打包 3.2 后端打包 4、服务器前后端配置及部署 4.1 下载、安装、启动Nginx 4.2 前端项目部署…...

STM32在FreeRTOS下的us延时

STM32在FreeRTOS下的us延时 前言 freeRTOS下跑SPI时需要微秒级别的延时,但是freeRTOS只提供了毫秒级的,记录一下实现us延时的方法。 前期分析 最简单的方式就是开个定时器或者干脆直接计算一下用nop做都可以实现us延时,但是显然还是使用滴…...

软件测试/人工智能丨深入人工智能软件测试:PyTorch引领新时代

在人工智能的浪潮中,软件测试的角色变得愈发关键。本文将介绍在人工智能软件测试中的一些关键技术,以及如何借助PyTorch深度学习框架来推动测试的创新与升级。 PyTorch:深度学习的引擎 PyTorch作为一种开源的深度学习框架,为软件…...

Android 当中的 Fragment 协作解耦方式

Android 当中的 Fragment 协作解耦方式 文章目录 Android 当中的 Fragment 协作解耦方式第一章 前言介绍第01节 遇到的问题第02节 绘图说明 第二章 核心代码第01节 代理人接口第02节 中间人 Activity第03节 开发者A第04节 开发者B第05节 测试类 第一章 前言介绍 第01节 遇到的…...

城市网吧视频智能监控方案,实现视频远程集中监控

网吧环境较为复杂,电脑设备众多且人员流动性大,极易发生人员或消防事故,亟需改变,TSINGSEE青犀AI智能网吧视频监管方案可以帮助实现对网吧环境和用户活动的实时监控和管理。 1、视频监控系统 在网吧内部布置高清摄像头&#xff0…...

C#WPF视频播放器实例

本文实例演示C#WPF视频播放器 实例如下: 修改mainwindow的代码 <Windowx:Class="PlayerDemo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xml…...

【uniapp】Google Maps

话不多说 直接上干货 提前申请谷歌地图账号一、新建地图 使用h5获取当前定位或者使用三方uniapp插件 var coords ""navigator.geolocation.getCurrentPosition(function(position) {coords {lat: position.coords.latitude,lng: position.coords.longitude};lats …...

C语言变量与常量

跟着肯哥&#xff08;不是我&#xff09;学C语言的变量和常量、跨文件访问、栈空间 栈空间还不清楚&#xff0c;期待明天的课程内容 C变量 变量&#xff08;Variable&#xff09;是用于存储和表示数据值的名称。 主要包括四个环节&#xff1a;定义、初始化、声明、使用 在我刚…...

AI创作系统ChatGPT网站源码/支持DALL-E3文生图/支持最新GPT-4-Turbo模型+Prompt应用

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...

二维码智慧门牌管理系统升级,异常门牌聚合解决方案助力高效管理

文章目录 前言一、异常门牌聚合解决方案 前言 在今天的数字化时代&#xff0c;智慧城市已成为发展趋势&#xff0c;其中二维码智慧门牌管理系统扮演着至关重要的角色。通过对门牌信息进行数字化管理&#xff0c;该系统极大提升了城市管理的效率和便捷性。然而&#xff0c;随着…...

【XTDrone Ubuntu20.04】XTDrone+ Ubuntu20.04 + PX4安装

XTDrone仿真平台配置 文章目录 XTDrone仿真平台配置依赖安装 ROS一键安装Marvos安装PX4 安装安装QTGroundControlXTDrone下载安装 环境&#xff1a; VMWare 16.0 Ubuntu 22.04 &#xff08;因为没人配过&#xff09;Ubuntu 20.04 参考文章&#xff1a; 仿真平台基础配置 (yuq…...

河北大学选择ZStack Cube超融合一体机打造实训云平台

河北大学通过云轴科技ZStack Cube超融合一体机构建校园实训云平台&#xff0c;部署测试仅耗时1天&#xff0c;该平台能够更快地为学生提供高性能、高可用的云主机、云存储和云网络服务&#xff1b;同时也能满足日常运维管理要求&#xff0c;为学生提供更好的实训环境。 河北省…...

IDEA远程一键部署SpringBoot到Docker

IDEA是Java开发利器&#xff0c;Spring Boot是Java生态中最流行的微服务框架&#xff0c;docker是时下最火的容器技术&#xff0c;那么它们结合在一起会产生什么化学反应呢&#xff1f; 一、开发前准备 1. Docker安装 可以参考&#xff1a;https://docs.docker.com/install/ 2…...

索引三星结构

三星索引的定义&#xff0c;可以先给我们对索引优化提供一个大概的思路&#xff1a; 满足第1颗星&#xff1a; 取出所有的等值谓词的列&#xff0c;作为索引最开头的列——以任意顺序都可以。 满足第2颗星&#xff1a; 将order by加入到索引列&#xff0c;不要改变这些列的顺…...

rust 笔记 高级错误处理

文章目录 错误处理组合器or() 和 and()or_else() 和 and_then()filtermap() 和 map_err()map_or() 和 map_or_else()ok_or() and ok_or_else() 自定义错误类型错误转换 From 特征 归一化不同的错误类型Box<dyn Error>自定义错误类型 简化错误处理thiserroranyhow 错误处理…...

python+Django 使用apscheduler实现定时任务 管理调度

apscheduler实现定时任务 管理调度 在Django 项目中经常会用到定时任务去处理一些业务处理 使用 APScheduler 可以轻松地实现定时任务的管理和调度。你可以通过以下步骤来创建、启动、停止和删除定时任务&#xff1a; 1.创建调度器对象&#xff1a; from apscheduler.schedu…...

Java编程中,异步操作流程中,最终一致性以及重试补偿的设计与实现

一、背景 微服务设计中&#xff0c;跨服务的调用&#xff0c;由于网络或程序故障等各种原因&#xff0c;经常会出现调用失败而需要重试。另外&#xff0c;在异步操作中&#xff0c;我们提供接口让外部服务回调。回调过程中&#xff0c;也可能出现故障。 这就要求我们主动向外…...

吴恩达《机器学习》8-7:多元分类

在机器学习领域&#xff0c;经常会遇到不止两个类别的分类问题。这时&#xff0c;需要使用多类分类技术。本文将深入探讨多类分类&#xff0c;并结合学习内容中的示例&#xff0c;了解神经网络在解决这类问题时的应用。 一、理解多类分类 多类分类问题是指当目标有多个类别时…...

Postman批量运行用例

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 一&#xff09;注意点 有上传文件的接口&#xff0c;需要做如下设置&#xff1a; 1、打开能读取外部文件的开关 2、把需要…...

20个Golang最佳实践

在本教程中&#xff0c;我们将探讨 Golang 中的 20 个最佳编码实践。它将帮助您编写有效的 Go 代码。 #20&#xff1a;使用正确的缩进 良好的缩进使您的代码具有可读性。一致地使用制表符或空格&#xff08;最好是制表符&#xff09;并遵循 Go 标准缩进约定。 package main …...

Java 类之 java.lang.System

Java 类之 java.lang.System 文章目录 Java 类之 java.lang.System一、简介二、主要功能1、currentTimeMillis() - 获取当前时间的毫秒数说明代码示例 2、getProperty(String key) - 获取系统属性说明代码示例 3、exit(int status) - 终止虚拟机说明代码示例 4、arraycopy(Obje…...

认识Modbus通信协议(笔记)

Modbus 莫迪康 1979年 PLC 1969年 什么是modbus&#xff1f; 它是一个Bus&#xff0c;即总线协议。比如串口协议、IIC协议、SPI都是通信协议。 协议&#xff0c;顾名思义是一种规定和约束 Modbus协议是一种引用层的报文传输协议&#xff0c;RTU、ASCLL、TCP,都属于Modbus协…...

【算法】距离(最近公共祖先节点)

题目 给出 n 个点的一棵树&#xff0c;多次询问两点之间的最短距离。 注意&#xff1a; 边是无向的。所有节点的编号是 1,2,…,n。 输入格式 第一行为两个整数 n 和 m。n 表示点数&#xff0c;m 表示询问次数&#xff1b; 下来 n−1 行&#xff0c;每行三个整数 x,y,k&am…...

基于SpringBoot的SSMP整合案例(消息一致性处理与表现层开发)

消息一致性处理 在后端执行完相应的操作后&#xff0c;我们需要将执行操作后的结果与数据返回前端&#xff0c;前端 调用我们传回去的数据&#xff0c;前端是如何知道我们传回去的数据名称的&#xff1f; 答&#xff1a;前后端遵循了同一个"协议"。这个协议就是定义…...

c#之反射详解

总目录 文章目录 总目录一、反射是什么&#xff1f;1、C#编译运行过程2、反射与元数据3、反射的优缺点 二、反射的使用1、反射相关的类和命名空间1、System.Type类的应用2、System.Activator类的应用3、System.Reflection.Assembly类的应用4、System.Reflection.Module类的应用…...

synchronized jvm实现思考

底层实现时&#xff0c;为什么使用了cxq队列和entryList双向链表&#xff1f;这里为什么不跟AQS中使用一个队列就行了&#xff0c;加了一个entryList的目的是为了什么&#xff1f; 个人理解这里多一个entryList&#xff0c;可能是用于减少频繁的cas操作。假设存在很多锁竞争时&…...

【hive基础】hive常见操作速查

文章目录 一. hive变量操作1. 查看当前hive配置信息2. 设置变量3. 修改变量4. 进入hive终端重新加载配置 二. 执行hive sql三. 启动hive 一. hive变量操作 1. 查看当前hive配置信息 # 查看当前所有配置信息 hive > set ;# 查看某一项配置信息 hive >set hive.metastore…...

2024年山东省职业院校技能大赛中职组“网络安全”赛项竞赛试题-A

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A 一、竞赛时间 总计&#xff1a;360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A、B模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略设置 A-3 流量完整性保护 A-4 …...

基于51单片机电子钟温度计数码显示设计( proteus仿真+程序+设计报告+讲解视频)

这里写目录标题 ✅1.主要功能&#xff1a;✅讲解视频&#xff1a;✅2.仿真设计✅3. 程序代码✅4. 设计报告✅5. 设计资料内容清单&&下载链接✅[资料下载链接&#xff1a;](https://docs.qq.com/doc/DS0Nja3BaQmVtWUpZ) 基于51单片机电子钟温度检测数码显示设计( proteu…...

jenkins+centos7上传发布net6+gitlab

工作中实践了一下jenkins的操作&#xff0c;所以记录一下这次经验&#xff0c;没有使用到docker 先看下成果&#xff1a; 选择发布项目 选择要发布的分支 构建中 发布成功 开始 首先安装好jenkins并注册自己的jenkins账号 因为我们的项目代码管理使用的是gitlab&#xff0c…...

python趣味编程-5分钟实现一个F1 赛车公路游戏(含源码、步骤讲解)

Python 中的 F1 赛车公路游戏及其源代码 F1 Race Road Game是用Python编程语言开发的,它是一个桌面应用程序。 这款 Python 语言的 F1 赛道游戏可以免费下载开源代码,它是为想要学习 Python 的初学者创建的。 该项目系统使用了 Pygame 和 Random 函数。 Pygame 是一组跨平…...

Kafka快速入门

文章目录 Kafka快速入门1、相关概念介绍前言1.1 基本介绍1.2 常见消息队列的比较1.3 Kafka常见相关概念介绍 2、安装Kafka3、初体验前期准备编码测试配置介绍 bug记录 Kafka快速入门 1、相关概念介绍 前言 在当今信息爆炸的时代&#xff0c;实时数据处理已经成为许多应用程序和…...

基于Pytorch的从零开始的目标检测

引言 目标检测是计算机视觉中一个非常流行的任务&#xff0c;在这个任务中&#xff0c;给定一个图像&#xff0c;你预测图像中物体的包围盒(通常是矩形的) &#xff0c;并且识别物体的类型。在这个图像中可能有多个对象&#xff0c;而且现在有各种先进的技术和框架来解决这个问…...

interview review

M: intrinsic matrix [ f x s c x 0 f y c y 0 0 1 ] \begin{bmatrix}f_x & s & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1\end{bmatrix} ​fx​00​sfy​0​cx​cy​1​ ​ ( c x , c y ) (c_x, c_y) (cx​,cy​): camera center in pixels ( f x , f y …...

layui表头多出一列(已解决)

问题描述 &#xff1a;layui表头多出来一列&#xff0c;但是表体没有内容&#xff0c;很影响美观。 好像是原本的表格有滚轮&#xff0c;我操作放大之后滚轮没有了&#xff0c;但是滚轮自带的表头样式还在&#xff0c; 之后手动把这个样式隐藏掉了&#xff0c;代码如下&#xf…...

​LeetCode解法汇总307. 区域和检索 - 数组可修改

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 给你一个数…...

Java源码分析:Guava之不可变集合ImmutableMap的源码分析

原创/朱季谦 一、案例场景 遇到过这样的场景&#xff0c;在定义一个static修饰的Map时&#xff0c;使用了大量的put()方法赋值&#xff0c;就类似这样—— public static final Map<String,String> dayMap new HashMap<>(); static {dayMap.put("Monday&q…...

详解自动化测试之 Selenium

目录 1. 什么是自动化 2.自动化测试的分类 3. selenium&#xff08;web 自动化测试工具&#xff09; 1&#xff09;选择 selenium 的原因 2&#xff09;环境部署 3&#xff09;什么是驱动&#xff1f; 4. 一个简单的自动化例子 5.selenium 常用方法 5.1 查找页面元素&…...

vue监听对象属性值变化

一、官方文档 二、实现方法 方法一、直接根据watch来监听 export default {data() {return {object: {username: ,password: }}},watch: {object.username(newVal, oldVal) {console.log(newVal, oldVal)}} }方法二&#xff1a;利用watch和computed来实现监听 利用computed定…...

Unicode编码的emoji表情如何在前端页面展示(未完成)

Unicode编码的emoji表情如何在前端页面展示 一、首先几个定义解决办法 一、首先几个定义 U1F601 和 0x1F601 表示同一个 Unicode 代码点&#xff0c;即笑脸 Emoji 的代码点。它们之间的区别在于表示方式和数据类型。 1.U1F601 是一种常见的表示方式&#xff0c;也称为 “U” 标…...

基于SSM的设备配件管理和设备检修系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…...

鸿蒙开发|鸿蒙系统项目开发前的准备工作

文章目录 鸿蒙项目开发的基本流程介绍鸿蒙项目开发和其他项目有什么不同成为华为开发者-注册和实名认证1.登录官方网站 鸿蒙项目开发的基本流程介绍 直接上图&#xff0c;简单易懂&#xff01; 整个项目的开发通过4个模块进行&#xff1a;开发准备、开发应用、运行调试测试和发…...

Evil靶场

Evil 1.主机发现 使用命令探测存活主机&#xff0c;80.139是kali的地址&#xff0c;所以靶机地址就是80.134 fping -gaq 192.168.80.0/242.端口扫描 开放80&#xff0c;22端口 nmap -Pn -sV -p- -A 192.168.80.1343.信息收集 访问web界面 路径扫描 gobuster dir -u http…...

第77题. 组合

原题链接&#xff1a;第77题. 组合 全代码&#xff1a; class Solution { private:vector<vector<int>> result; // 存放符合条件结果的集合vector<int> path; // 用来存放符合条件结果void backtracking(int n, int k, int startIndex) {if (path.size() …...

读书笔记:彼得·德鲁克《认识管理》第21章 企业与政府

一、章节内容概述 企业社会责任最重要的维度之一是政企关系。无论对于企业的顺利运作&#xff0c;还是对于政府的顺利运作&#xff0c;政企关系都至关重要。然而&#xff0c;重商主义典范和宪政主义典范这两种传统理论越来越不适应社会现实&#xff0c;越来越失效。虽然当前尚…...