目錄
- 一、新增服務節點到集群中
- 1、創建配置文件
- 2、啟動新的端口
- 3、將新增的兩個端口增加到現有集群中
- 4、設置從節點
- 5、設置主節點master
- 二、刪除節點
- 三、動態擴容內存
一、新增服務節點到集群中
1、創建配置文件
在主機127.0.0.5上創建新端口的配置文件,如之前有端口直接復制之前的配置文件即可。復制完然后修改下配置文件里的端口、內存大小、pid的路徑等。
cp redis7001.conf redis7002.conf

2、啟動新的端口
cd ../bin/
./redis-server ../etc/redis7002.conf

該操作在127.0.0.6上同樣再操作一次。
3、將新增的兩個端口增加到現有集群中
./redis-cli --cluster add-node 127.0.0.3:7002 127.0.0.1:7002
./redis-cli --cluster add-node 127.0.0.4:7002 127.0.0.1:700
21430f4be50444f20854193613fe1f4346fae577 127.0.0.3:7002@17002 slave 2ef3474dcb875522cd1b03465506065de2ada8e7 0 1630463304000 18 connected
b7e55a3d3eda2777c077c606c090bcfaf6b674fd 127.0.0.1:7002@17002 master - 0 1630463306333 17 connected 0-99 200-399 600-699 800-899 5461-10922
2ef3474dcb875522cd1b03465506065de2ada8e7 127.0.0.2:7002@17002 master - 0 1630463305000 18 connected 100-199 400-599 700-799 900-999 10923-16383
4d0c6a957452191e755c1bb0856307c9da838f79 127.0.0.1:7002@17002 slave b7e55a3d3eda2777c077c606c090bcfaf6b674fd 0 1630463307336 10 connected
1f42f45cd136239d95fc15bda9938821c33138cc 127.0.0.5:7002@17002 master connected 0
3bc21c09f3318342600205b1b5e6ea129e3608f3 127.0.0.6:6002@17002 myself,master - connected 0
使用命令 cluster nodes 查看集群狀態,發現兩個節點默認均為master。這是還沒有對節點進行分配的原因。
4、設置從節點
我們設置 127.0.0.6:7002 為從節點,登錄該節點
redis-cli -c -h 192.168.8.196 -p 5008
指定5008從節點的主節點ID,這里我們填寫127.0.0.5:6002的服務節點ID,節點ID為上面查出來第一列的值
cluster replicate 1f42f45cd136239d95fc15bda9938821c33138cc
查看當前集群節點信息 cluster nodes
21430f4be50444f20854193613fe1f4346fae577 127.0.0.3:7002@17002 slave 2ef3474dcb875522cd1b03465506065de2ada8e7 0 1630463304000 18 connected
b7e55a3d3eda2777c077c606c090bcfaf6b674fd 127.0.0.1:7002@17002 master - 0 1630463306333 17 connected 0-99 200-399 600-699 800-899 5461-10922
2ef3474dcb875522cd1b03465506065de2ada8e7 127.0.0.2:7002@17002 master - 0 1630463305000 18 connected 100-199 400-599 700-799 900-999 10923-16383
4d0c6a957452191e755c1bb0856307c9da838f79 127.0.0.1:7002@17002 slave b7e55a3d3eda2777c077c606c090bcfaf6b674fd 0 1630463307336 10 connected
1f42f45cd136239d95fc15bda9938821c33138cc 127.0.0.5:7002@17002 master 0 connected 0
3bc21c09f3318342600205b1b5e6ea129e3608f3 127.0.0.6:6002@17002 myself,slave 1f42f45cd136239d95fc15bda9938821c33138cc 0 1630463307336 0 connected
5、設置主節點master
因為新增節點時并未分配卡槽,需要我們手動對集群進行重新分片遷移數據,需要重新分片命令 reshard
./redis-cli --cluster reshard 127.0.0.5:7002
執行之后會出現下面幾個選項
How many slots do you want to move (from 1 to 16384)? 4096
#它提示我們需要遷移多少slot到7007上,我們平分16384個哈希槽給4個節點:16384/4 = 4096,我們需要移動4096個槽點到7007上。
#ps:這里分配可以根據你新增的節點內存和已存在的節點進行考慮,新增節點內存大可以相對分配的多點
What is the receiving node ID? 63aa476d990dfa9f5f40eeeaa0315e7f9948554d
#這里添加接收節點的ID,我們填寫127.0.0.5:7002服務節點的ID
1.Please enter all the source node IDs.
2.Type ‘all' to use all the nodes as source nodes for the hash slots.
3.Type ‘done' once you entered all the source nodes IDs.
4.Source node #1:
#redis-trib 會向你詢問重新分片的源節點(source node),即,要從特點的哪個節點中取出 4096 個哈希槽,還是從全部節點提取4096個哈希槽, 并將這些槽移動到7007節點上面。
#如果我們不打算從特定的節點上取出指定數量的哈希槽,那么可以向redis-trib輸入 all,這樣的話, 集群中的所有主節點都會成為源節點,redis-trib從各個源節點中各取出一部分哈希槽,湊夠4096個,然后移動到7007節點上:
1.Source node #1:all
然后開始從別的主節點遷移哈希槽,并且確認。
....省略分配內容
1.Do you want to proceed with the proposed reshard plan (yes/no)? yes
#注意這里一定要輸入yes,輸入Y或者其他會終止操作。
#確認之后,redis-trib就開始執行分片操作,將哈希槽一個一個從源主節點移動到127.0.0.5:7002目標主節點。
重新分片結束后我們可以check以下節點的分配情況。
./redis-trib.rb check 127.0.0.1:7001
...省略節點內容
#可以看到7007節點分片的哈希槽片不是連續的,間隔的移動。
至此主節點就添加完畢了
二、刪除節點
1、刪除從節點
先登錄 127.0.0.5:7002 節點,使用 cluster nodes 查看集群節點信息。
21430f4be50444f20854193613fe1f4346fae577 127.0.0.3:7002@17002 slave 2ef3474dcb875522cd1b03465506065de2ada8e7 0 1630463304000 18 connected
b7e55a3d3eda2777c077c606c090bcfaf6b674fd 127.0.0.1:7002@17002 master - 0 1630463306333 17 connected 0-99 200-399 600-699 800-899 5461-10922
2ef3474dcb875522cd1b03465506065de2ada8e7 127.0.0.2:7002@17002 master - 0 1630463305000 18 connected 100-199 400-599 700-799 900-999 10923-16383
4d0c6a957452191e755c1bb0856307c9da838f79 127.0.0.1:7002@17002 slave b7e55a3d3eda2777c077c606c090bcfaf6b674fd 0 1630463307336 10 connected
1f42f45cd136239d95fc15bda9938821c33138cc 127.0.0.5:7002@17002 myself,master - 0 1630463305000 18 connected 100-199 400-599 700-799 900-999 10923-16383
3bc21c09f3318342600205b1b5e6ea129e3608f3 127.0.0.6:6002@17002 slave 1f42f45cd136239d95fc15bda9938821c33138cc 0 1630463307336 0 connected
將127.0.0.6:7002的節點ID記錄下來(3bc21c09f3318342600205b1b5e6ea129e3608f3)
執行下面命令
./redis-cli --cluster del-node 127.0.0.6 3bc21c09f3318342600205b1b5e6ea129e3608f3

出現以上信息代表刪除成功。
2、刪除主節點
因為主節點分配了 slot槽, 所以這里我們必須先把 7002的slot槽放到其他的可用節點中去,然后再進行移除節點操作才行,不然會出現數據丟失問題。
(1)先把數據遷移到其他主節點中。
./redis-cli --cluster reshard 127.0.0.5:7002

可以看到127.0.0.5:7002中有4461個slot槽,如果想要平均分配,就需要根據現有多少master主節點進行平均,然后重復執行以上命令。我下面操作是直接將所有slot槽分配到一個節點上。
1、How many slots do you want to move (from 1 to 16384)? 4461
2、What is the receiving node ID? b7e55a3d3eda2777c077c606c090bcfaf6b674fd
#這一步是問要將這些slot槽分配到哪個節點上,我分配到了127.0.0.1:7002上,所以填寫它的ID
3、Please enter all the source node IDs.
3.1、Type 'all' to use all the nodes as source nodes for the hash slots.
3.2、Type 'done' once you entered all the source nodes IDs.
3.3、Source node #1:
#這里需要數據源,其實就是 127.0.0.5:7002 節點的ID,因為你是把 7002 節點的數據放到其它地方去, 輸入 7002 的ID
#回車之后會出現再次輸入id
#其實是讓你還可以選擇源節點,但是我這里只要把 7002 節點分到其它地方就行,如果沒有再把其它主節點分攤的需要,此處輸入 done即可,否則輸入其它節點的ID,最后輸入 done
4.Do you want to proceed with the proposed reshard plan (yes/no)? yes
#注意這里一定要輸入yes,輸入Y或者其他會終止操作。
#這里就分配完slot槽了
執行完成之后,輸入 cluster nodes 查看節點信息
可以看到 7002 已經沒有槽分配了
接下來就可以按照刪除從節點的方法刪除主節點了。
./redis-cli --cluster del-node 127.0.0.6 主節點ID
再次查看集群信息,發現主節點也刪掉了。
三、動態擴容內存
在業務運行時,redis內存不夠了怎么辦,無非兩種辦法,要么刪除無用的key,要么就是增加節點內存,當刪除key之后還是無法滿足需求,就只能增加內存。redis提供了不停服務增加內存的命令 CONFIG SET parameter value
1、CONFIG SET 命令可以動態地調整 Redis 服務器的配置(configuration)而無須重啟。
2、你可以使用它修改配置參數,或者改變 Redis 的持久化(Persistence)方式。
3、CONFIG SET 可以修改的配置參數可以使用命令 CONFIG GET * 來列出,所有被 CONFIG SET 修改的配置參數都會立即生效。
1、動態將7002端口內存從5G提升至10G
1、先獲取當前最大內存
redis 127.0.0.1:7002> config get maxmemory
1) "maxmemory"
2) "5000000000"
2、設置新的最大內存
redis 127.0.0.1:6379> config set maxmemory 10G
OK
#其實set 10G是不規范的,最好的是換算下填寫10737418240
3、查看修改后的值
redis 127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "10000000000"
附:可以動態設置的值
127.0.0.1:6379> CONFIG GET *
1) "dbfilename"
2) "dump.rdb"
3) "requirepass"
4) "123456"
5) "masterauth"
6) ""
7) "unixsocket"
8) ""
9) "logfile"
10) "/diskc/redis-2.8.19/log/6379_slave.log"
11) "pidfile"
12) "/var/run/redis.pid"
13) "maxmemory"
14) "10000000000"
15) "maxmemory-samples"
16) "3"
17) "timeout"
18) "0"
19) "tcp-keepalive"
20) "0"
21) "auto-aof-rewrite-percentage"
22) "100"
23) "auto-aof-rewrite-min-size"
24) "67108864"
25) "hash-max-ziplist-entries"
26) "512"
27) "hash-max-ziplist-value"
28) "64"
29) "list-max-ziplist-entries"
30) "512"
31) "list-max-ziplist-value"
32) "64"
33) "set-max-intset-entries"
34) "512"
35) "zset-max-ziplist-entries"
36) "128"
37) "zset-max-ziplist-value"
38) "64"
39) "hll-sparse-max-bytes"
40) "3000"
41) "lua-time-limit"
42) "5000"
43) "slowlog-log-slower-than"
44) "100000"
45) "latency-monitor-threshold"
46) "0"
47) "slowlog-max-len"
48) "128"
49) "port"
50) "6379"
51) "tcp-backlog"
52) "511"
53) "databases"
54) "16"
55) "repl-ping-slave-period"
56) "10"
57) "repl-timeout"
58) "60"
59) "repl-backlog-size"
60) "1048576"
61) "repl-backlog-ttl"
62) "3600"
63) "maxclients"
64) "15000"
65) "watchdog-period"
66) "200"
67) "slave-priority"
68) "100"
69) "min-slaves-to-write"
70) "0"
71) "min-slaves-max-lag"
72) "10"
73) "hz"
74) "10"
75) "repl-diskless-sync-delay"
76) "5"
77) "no-appendfsync-on-rewrite"
78) "no"
79) "slave-serve-stale-data"
80) "yes"
81) "slave-read-only"
82) "yes"
83) "stop-writes-on-bgsave-error"
84) "yes"
85) "daemonize"
86) "yes"
87) "rdbcompression"
88) "yes"
89) "rdbchecksum"
90) "yes"
91) "activerehashing"
92) "yes"
93) "repl-disable-tcp-nodelay"
94) "no"
95) "repl-diskless-sync"
96) "no"
97) "aof-rewrite-incremental-fsync"
98) "yes"
99) "aof-load-truncated"
100) "yes"
101) "appendonly"
102) "no"
103) "dir"
104) "/diskc/redis-2.8.19"
105) "maxmemory-policy"
106) "volatile-lru"
107) "appendfsync"
108) "everysec"
109) "save"
110) "900 1 300 10 60 10000"
111) "loglevel"
112) "notice"
113) "client-output-buffer-limit"
114) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
115) "unixsocketperm"
116) "0"
117) "slaveof"
118) ""
119) "notify-keyspace-events"
120) ""
121) "bind"
122) ""
到此這篇關于Redis集群新增、刪除節點以及動態增加內存的方法的文章就介紹到這了,更多相關Redis集群新增刪除節點及動態增加內存內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Redis有序集合類型的操作_動力節點Java學院整理
- Redis集群增加節點與刪除節點的方法詳解
- redis事務_動力節點Java學院整理
- redis與memcached的區別_動力節點Java學院整理
- 了解redis中RDB結構_動力節點Java學院整理