redis-cluster集羣之節點擴容(redis-5.0.7版本,其他版本也可)

案例概述

某電商大型項目,由於業務大規模升級。項目中的前置緩存節點,已經不能滿足當前的業務需求,現在對redis集羣擴容一套redis主備節點,對於實際的生產環境,一般規劃是在晚上2凌晨12點做操作,操作之前,提前做好redis安裝部署,晚上凌晨12點左右,業務量比較少,影響範圍比較少,redis對接的底層數據庫,先要鎖庫、鎖表,不產生業務流數據,這樣redis集羣可產生的影響因素較小。

一、redis集羣

Redis集羣部署的規劃:
本實驗使用6臺Centos 7.6 主機做集羣,其中3臺爲master 其中3臺爲slave,IP地址分別爲

節點類型 IP地址
master1 192.168.100.128
master2 192.168.100.129
master3 192.168.100.131
slave1 192.168.100.132
slave2 192.168.100.133
slave3 192.168.100.134

安裝包百度雲分享鏈接:https://pan.baidu.com/s/1pYuNA9mBjzsuaI2iQ4jVFg
提取碼:tjj5

1、環境準備

準備 6臺Centos 7.6 的虛擬機,關閉防火牆、關閉核心防護,掛載光盤,搭建本地yum倉庫,配置相對應的ip地址

2、安裝redis

每個節點服務器都安裝redis服務,步驟一樣。

[root@localhost opt]# tar xzvf redis-5.0.7.tar.gz -C /usr/local/
[root@localhost opt]# cd /usr/local/redis-5.0.7/
[root@localhost redis-5.0.7]# make        
[root@localhost redis-5.0.7]#  make PREFIX=/usr/local/redis install    
####如果安裝過程中,更改安裝路徑可以用make PRRFIX=安裝路徑 install

//設置Redis相關配置文件
[root@localhost redis-5.0.7]# ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@localhost redis-5.0.7]# cd /usr/local/redis-5.0.7/utils/
[root@localhost utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/bin/redis-server  ####手動輸入
Selected config:
Port           : 6379                                        ####端口號
Config file    : /etc/redis/6379.conf                        ####默認配置文件
Log file       : /var/log/redis_6379.log                     ####日誌文件
Data dir       : /var/lib/redis/6379                         ####數據目錄
Executable     : /usr/local/bin/redis-server                 ####執行命令
Cli Executable : /usr/local/bin/redis-cli                    ####客戶端命令
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

2、修改配置文件

修改各個redis主機的6379.conf配置文件,注意:6個節點都要修改。

[root@localhost utils]# vi /etc/redis/6379.conf
bind 192.168.100.128                        ###刪除原來的127.0.0.1 然後添加各主機對應的IP地址
logfile /var/log/redis_6379.log             ###不需要改
daemonize yes                               ###不需要改
port 6379                                   ###不需要改
839/cluster-enabled yes                     ###去掉註釋,打開集羣
847/cluster-config-file nodes-6379.conf     ###去掉註釋,集羣的主機名
853/cluster-node-timeout 15000              ###去掉註釋
930/cluster-require-full-coverage no        ###去掉註釋, yes改成no
700/appendonly yes                          ###打開AOF持久化

3、啓動服務並創建集羣

/etc/init.d/redis_6379 restart
netstat -antp |grep  6379

//安裝ruby
[root@localhost utils]# yum -y install ruby rubygems 

上傳redis-3.2.0.gem 這個包到/opt目錄下執行下面命令
[root@localhost utils]# cd /opt
[root@localhost opt]# gem install redis --version 3.2.0
Successfully installed redis-3.2.0
Parsing documentation for redis-3.2.0
Installing ri documentation for redis-3.2.0
1 gem installed

集羣創建只在一個節點上敲這條命令即可

先關閉防火牆,否則集羣創建報錯:Could not connect to Redis at 192.168.100.131:6379: No route to host
[root@localhost src]# systemctl stop firewalld
[root@localhost src]# setenforce 0

//創建集羣
[root@localhost opt]# cd /usr/local/redis-5.0.7/src/
[root@localhost src]# redis-cli --cluster create --cluster-replicas 1 192.168.100.128:6379 192.168.100.129:6379 192.168.100.131:6379 192.168.100.132:6379 192.168.100.133:6379 192.168.100.134:6379

在這裏插入圖片描述

二、redis集羣的業務擴容

加入兩個新的節點。
IP地址如下:
master4 :192.168.100.135
slave4 :192.168.100.136

1、準備節點服務器

首先把這兩個服務器安裝redis服務,步驟和上面一樣,這裏就不在演示

2、將新的節點加入到集羣之中

將2臺redis節點添加到集羣中,並確認集羣狀態信息(進入節點192.168.100.128)

redis-cli --cluster add-node 192.168.100.135:6379 192.168.100.128:6379
redis-cli --cluster add-node 192.168.100.136:6379 192.168.100.128:6379

在這裏插入圖片描述
查看集羣節點信息,記錄IDS值,在分配哈希槽時要使用。

[root@localhost ~]# redis-cli -h 192.168.100.128 -p 6379
192.168.100.128:6379> cluster nodes
c561fee83d143a3c93e9277b4cb559ce5567f21c 192.168.100.135:6379@16379 master - 0 1584950082077 0 connected
a5c7a5bf4b261a2a1fbc96aeaa8595d497026724 192.168.100.131:6379@16379 master - 0 1584950084000 3 connected 10923-16383
f71d695207fe05d2a50b28aef9790234f050fd82 192.168.100.132:6379@16379 slave a5c7a5bf4b261a2a1fbc96aeaa8595d497026724 0 1584950082000 4 connected
6794da9f27f442bc8b67227765f6f0e36f71e8e0 192.168.100.134:6379@16379 slave 7d1ebdb236a9496ad7401be17aad222a1aae50a5 0 1584950080060 6 connected
7d1ebdb236a9496ad7401be17aad222a1aae50a5 192.168.100.129:6379@16379 master - 0 1584950085000 2 connected 5461-10922
8911b525151ef8f44d58cb0cd311527c3a26970e 192.168.100.128:6379@16379 myself,master - 0 1584950082000 1 connected 0-5460
13297df3b08b66c88a328dc95f5eb35e6d651e00 192.168.100.136:6379@16379 master - 0 1584950085116 7 connected
b01d8ff628f5f6bc7297b90a7e707eddcfa2eb6b 192.168.100.133:6379@16379 slave 8911b525151ef8f44d58cb0cd311527c3a26970e 0 1584950083088 5 connected

新加入的節點是沒有哈希槽,需要重新分配槽位。

3、分配哈希槽

根據redis 槽位分析,一共有16384個槽位,如果分4個配套master節點:每個節點是4096個槽位.

[root@localhost 6379]# redis-cli --cluster reshard 192.168.100.128:6379
[root@master1 ~]# redis-cli --cluster reshard 192.168.100.41:6379
How many slots do you want to move (from 1 to 16384)? 4096       #要遷移多少個槽
What is the receiving node ID? c561fee83d143a3c93e9277b4cb559ce5567f21c  #遷移到master4節點
//注意:輸入master4的IDS值
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.

#要求輸入源節點的ids值,這裏輸入128、128、131三個節點,輸入done表示結束

Source node #1: 8911b525151ef8f44d58cb0cd311527c3a26970e
Source node #2: 7d1ebdb236a9496ad7401be17aad222a1aae50a5
Source node #3: a5c7a5bf4b261a2a1fbc96aeaa8595d497026724
Source node #4: done     #只有三個master,此處輸入done

//稍等片刻。
最後會有一個遷移方案,輸入yes表示同意,遷移開始。輸入no表示不同意,重新設置遷移方案。

在這裏插入圖片描述

4、確認是否遷移成功

[root@localhost ~]# redis-cli -h 192.168.100.128 -p 6379
192.168.100.128:6379> cluster nodes

在這裏插入圖片描述

5、遷移後檢測各個節點槽的均衡性

在這裏插入圖片描述
可以看出,節點負責的槽數據差異在2%以內,因此槽位分配是均衡的。

6、給擴容的主節點master4添加從節點

進入slave4 的數據庫中

[root@localhost 6379]# redis-cli -h 192.168.100.136 -p 6379
192.168.100.136:6379> cluster replicate c561fee83d143a3c93e9277b4cb559ce5567f21c
OK
192.168.100.136:6379> cluster nodes

在這裏插入圖片描述

7、平衡各節點槽數量

[root@localhost 6379]# redis-cli --cluster rebalance --cluster-threshold 1 192.168.100.128:6379

在這裏插入圖片描述
到這裏我們的redis-cluster集羣已經擴容完畢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章