使用redis工具自動部署cluster集群
手動搭建集群便于理解集群創建的流程和細節,不過手動搭建集群需要很多步驟,當集群節點眾多時,必然會加大搭建集群的復雜度和運維成本,因此官方提供了 redis-trib.rb的工具方便我們快速搭建集群,
redis-trib.rb是采用 Ruby 實作的 redis 集群管理工具,內部通過 Cluster相關命令幫我們簡化集群創建、檢查、槽遷移和均衡等常見運維操作,使用前要安裝 ruby 依賴環境
redis-trib.rb無法實作所有節點都交叉復制,總會有一個節點不交叉,因此在安裝完cluster以后,需要手動調整交叉
環境準備
| IP | 主機名 | 埠號 | 節點 |
|---|---|---|---|
| 192.168.81.210 | redis-1 | 6380 | master |
| 192.168.81.210 | redis-1 | 6381 | slave—>redis-2 |
| 192.168.81.220 | redis-2 | 6380 | master |
| 192.168.81.220 | redis-2 | 6381 | slave—>redis-3 |
| 192.168.81.230 | redis-3 | 6380 | master |
| 192.168.81.230 | redis-3 | 6381 | slave—>redis-1 |
1.安裝ruby環境
只在使用redis-trib的機器上安裝即可
//安裝ruby管理工具
[root@redis-1 ~]# yum -y install rubygems
//移除官網源
[root@redis-1 ~]# gem sources --remove https://rubygems.org/
https://rubygems.org/ removed from sources
//增加阿里云源
[root@redis-1 ~]# gem sources -a http://mirrors.aliyun.com/rubygems/
http://mirrors.aliyun.com/rubygems/ added to sources
//更新快取
[root@redis-1 ~]# gem update --system
ruby2.3.0以下版本執行會報錯
//安裝ruby支持redis的插件
[root@redis-1 ~]# gem install redis -v 3.3.5
Fetching: redis-3.3.5.gem (100%)
Successfully installed redis-3.3.5
Parsing documentation for redis-3.3.5
Installing ri documentation for redis-3.3.5
1 gem installed
2.使用redis-trib自動部署cluster集群
2.1.所有節點安裝redis
1.創建部署路徑
mkdir -p /data/redis_cluster/redis_{6380,6381}/{conf,data,logs,pid}
2.準備組態檔
cat > /data/redis_cluster/redis_6380/conf/redis_6380.conf <<EOF
bind $(ifconfig | awk 'NR==2{print $2}')
port 6380
daemonize yes
logfile /data/redis_cluster/redis_6380/logs/redis_6380.log
pidfile /data/redis_cluster/redis_6380/pid/redis_6380.log
dbfilename "redis_6380.rdb"
dir /data/redis_cluster/redis_6380/data
cluster-enabled yes
cluster-config-file node_6380.conf
cluster-node-timeout 15000
save 60 10000
save 300 10
save 900 1
EOF
cat > /data/redis_cluster/redis_6381/conf/redis_6381.conf <<EOF
bind $(ifconfig | awk 'NR==2{print $2}')
port 6381
daemonize yes
logfile /data/redis_cluster/redis_6381/logs/redis_6381.log
pidfile /data/redis_cluster/redis_6381/pid/redis_6381.log
dbfilename "redis_6381.rdb"
dir /data/redis_cluster/redis_6381/data
cluster-enabled yes
cluster-config-file node_6381.conf
cluster-node-timeout 15000
save 60 10000
save 300 10
save 900 1
EOF
3.啟動redis
./redis_shell.sh start 6380
./redis_shell.sh start 6381

2.2.使用redis-trib部署cluster集群
語法格式:./redis-trib.rb create --replicas 每個主節點的副本數量(從庫數量) cluster節點地址
create //創建
–replicas //指定主庫的副本數量,也就是從庫數量
使用redis-trib安裝的cluster集群,總會有一個節點不是交叉復制的,需要手動調整,因為trib也是根據節點地址交叉對應,到了最后一個機器已經沒有第二個可以與它交叉的機器,它只能和自己去復制
[root@redis-1 ~]# cd /data/redis_cluster/redis-3.2.9/src
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb create --replicas 1 192.168.81.210:6380 192.168.81.220:6380 192.168.81.230:6380 192.168.81.210:6381 192.168.81.220:6381 192.168.81.230:6381
安裝完查看集群準備已經是可用的
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380
192.168.81.210:6380> 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_sent:1618
cluster_stats_messages_received:1618

2.3.手動調整三主三從交叉復制
由于只有redis-3的復制不是交叉的,如果直接讓redis-3去交叉復制某一個節點,那么就沒有節點去復制redis-3的6380了,因此我們要手動調整所有節點之間的交叉入職
舉個例子:redis-3的6381要成為redis-1的6380的主庫,需要去redis-3的6381redis互動式操作
1.獲取主節點的資訊
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6381 cluster nodes | grep 6380 | awk '{print $1.$2}'
812ae8ccf55d8994f1f9d30a20f6cff42fb24b4a192.168.81.230:6380
ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd192.168.81.220:6380
b61b8d0421b94b9de7267dda6c6f401a42622047192.168.81.210:6380
2.配置三主三從交叉復制
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6381
192.168.81.210:6381> CLUSTER REPLICATE ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd
OK
[root@redis-2 ~]# redis-cli -h 192.168.81.220 -p 6381
192.168.81.220:6381> CLUSTER REPLICATE 812ae8ccf55d8994f1f9d30a20f6cff42fb24b4a
OK
[root@redis-3 ~]# redis-cli -h 192.168.81.230 -p 6381
192.168.81.230:6381> CLUSTER REPLICATE b61b8d0421b94b9de7267dda6c6f401a42622047
OK
3.查看集群資訊已經交叉復制
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6381 cluster nodes
812ae8ccf55d8994f1f9d30a20f6cff42fb24b4a 192.168.81.230:6380 master - 0 1612342768677 3 connected 10923-16383
bdd20b03b573b2def6a9ee5053a75867709fc908 192.168.81.210:6381 myself,slave ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd 0 0 4 connected
9b7641253ea66073d865accdd4460d2877f9ff5d 192.168.81.220:6381 slave 812ae8ccf55d8994f1f9d30a20f6cff42fb24b4a 0 1612342767669 5 connected
ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd 192.168.81.220:6380 master - 0 1612342766658 2 connected 5461-10922
904a0109976cae38e5a3059fd70ce2727a0ed8fb 192.168.81.230:6381 slave b61b8d0421b94b9de7267dda6c6f401a42622047 0 1612342769686 3 connected
b61b8d0421b94b9de7267dda6c6f401a42622047 192.168.81.210:6380 master - 0 1612342770189 1 connected 0-5460

2.4.查看集群完整性
如果集群沒問題會輸出ok
[root@redis-1 ~]# cd /data/redis_cluster/redis-3.2.9/src
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb check 192.168.81.210:6380

2.5.驗證hash分配是否均勻
1.首先插入1000條資料
[root@redis-1 ~]# for i in {1..1000}
do
redis-cli -c -h 192.168.81.210 -p 6380 set key_${i} value_${i}
done
2.查看每個節點的資料量
[root@redis-1 ~]# redis-cli -c -h 192.168.81.210 -p 6380 dbsize
(integer) 334
[root@redis-1 ~]# redis-cli -c -h 192.168.81.220 -p 6380 dbsize
(integer) 336
[root@redis-1 ~]# redis-cli -c -h 192.168.81.230 -p 6380 dbsize
(integer) 330
2.6.查看集群分配的誤差值
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb rebalance 192.168.81.210:6380
>>> Performing Cluster Check (using node 192.168.81.210:6380)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
*** No rebalancing needed! All nodes are within the 2.0% threshold.

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/356212.html
標籤:其他
上一篇:Hadoop實戰——對英文單詞文本進行統計和排序(超詳細教學,演算法分析)
下一篇:【C++】vector
