Redis集羣節點擴容

案列概述

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

案例拓撲圖:
在這裏插入圖片描述

==前期已搭建 redis集羣,詳見https://blog.csdn.net/ML908/article/details/105045768 ==

軟件包

百度網盤鏈接:https://pan.baidu.com/s/1nAlvkBR7NS0speietzeDvA
提取碼:rqul

redis節點擴容

擴容流程:
1、部署2臺redis節點(主、備)
2、將2臺redis節點添加到集羣中
3、使用redis-cli啓動自動遷移
4、遷移後檢測各個節點槽的均衡性
5、將擴容的主節點添加從節點

1、節點基礎環境(兩臺操作一致)

#關閉防火牆,關閉核心防護

[root@master4 yum.repos.d]# systemctl stop firewalld
[root@master4 yum.repos.d]# setenforce 0
[root@master4 yum.repos.d]# vim /etc/selinux/config
SELINUX=disabled

#掛載光盤

[root@master4 ~]# vim /etc/fstab
/dev/cdrom	/mnt	iso9660	defaults	0 0

[root@master4 ~]# mount -a
[root@master4 ~]# df -hT
文件系統       類型      容量  已用  可用 已用% 掛載點
/dev/sda2      xfs        20G  3.3G   17G   17% /
devtmpfs       devtmpfs  898M     0  898M    0% /dev
tmpfs          tmpfs     912M     0  912M    0% /dev/shm
tmpfs          tmpfs     912M   17M  895M    2% /run
tmpfs          tmpfs     912M     0  912M    0% /sys/fs/cgroup
/dev/sda5      xfs        10G   37M   10G    1% /home
/dev/sda1      xfs       6.0G  174M  5.9G    3% /boot
tmpfs          tmpfs     183M   28K  183M    1% /run/user/0
tmpfs          tmpfs     183M  4.0K  183M    1% /run/user/42
/dev/sr0       iso9660   4.3G  4.3G     0  100% /mnt

#搭建yum倉庫

[root@master4 ~]# cd /etc/yum.repos.d
[root@master4 yum.repos.d]# mkdir backup
[root@master4 yum.repos.d]# mv C* backup
[root@master4 yum.repos.d]# cp -p backup/CentOS-Base.repo local.repo
root@master4 yum.repos.d]# vim local.repo
[centos]
name=CentOS
baseurl=file:///mnt
gpgcheck=0
enabled=1

[root@master4 yum.repos.d]# yum clean all
[root@master4 yum.repos.d]# yum makecache

2、安裝redis(2臺同時安裝)

#安裝編輯器

[root@master4 ~]# yum install -y gcc gcc-c++ make pcre pcre-devel expat-devel bash-completion

#掛載軟件包

[root@master4 ~]# mkdir /a
[root@master4 ~]# mount.cifs //192.168.100.1/bao /a
[root@master4 ~]# cd /a/Y2C7

#解壓並編譯安裝redis

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

#設置Redis相關配置文件

[root@master4 redis-5.0.4]# ln -s /usr/local/redis/bin/* /usr/local/bin/

[root@master4 redis-5.0.4]# cd /opt/redis-5.0.4/utils/

[root@master4 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/redis/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/redis/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!
/var/run/redis_6379.pid exists, process is already running or crashed
Installation successful!
[root@master4 utils]# netstat -lnupt | grep redis			//查看redis狀態
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      9318/redis-server 1

#修改各個redis主機的6379.conf配置文件

[root@master4 utils]# vim /etc/redis/6379.conf
bind 192.168.100.47                //刪除原來的127.0.0.1 然後添加各主機對應的IP地址
logfile /var/log/redis_6379.log          #不需要改
daemonize yes                                     #不需要改
port 6379                                              #不需要改
cluster-enabled yes                              //前面的#號去掉
cluster-config-file nodes-6379.conf     //前面的#號去掉
cluster-node-timeout 15000                 //前面的#號去掉
cluster-require-full-coverage no           //前面的#號去掉 yes改成no
appendonly yes								//開啓aof持久化	no改成yes

#2臺redis服務器啓動redis服務

[root@master4 utils]# /etc/init.d/redis_6379 restart
[root@master4 utils]# netstat -antp |grep  6379      監聽地址都是當前本機地址

3、創建集羣

在192.168.100.47/192.168.100.48服務器上。創建羣集

[root@master4 utils]# yum -y install ruby rubygems      //安裝編排工具

上傳redis-3.2.0.gem 這個包到/opt目錄下執行下面命令

[root@master4 utils]# cd /opt
[root@master4 opt]# gem install redis --version 3.2.0

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

[root@master1 ~]# redis-cli --cluster add-node 192.168.100.47:6379 192.168.100.41:6379
[root@master1 ~]# redis-cli --cluster add-node 192.168.100.48:6379 192.168.100.41:6379

[root@master1 ~]# redis-cli -h 192.168.100.41 -p 6379
192.168.100.41:6379> cluster nodes		//查看集羣節點信息,192.168.100.47/ 192.168.100.48都加入進去了

在這裏插入圖片描述

4、使用redis-cli啓動自動遷移

##整理節點信息(各個節點分別對用的IDS)##

主機名 節點的IDS信息 IP地址 槽位
master1 4184c078593ec9f02b374283c98274f54dd18c2c 192.168.100.41 5460-0=5460
master2 2be121eb6c279b7dd6a8977fc59013b237a449a0 192.168.100.42 10922-5461=5461
master3 617b38b3d01d99fd7639936dbc730dace47540ca 192.168.100.43 16383-10923=5460
master4 23ce498779c29b890dea4294868d6495cf00008c 192.168.100.44
master5 ab4ab1be5bc881f9c4efdefc9075c7e3b26af41b 192.168.100.45
master6 706eed767fcde670111c5ffc93d1c5b1f9397d08 192.168.100.46
master7 32062af99bec803b99ede31f0561ad9a11d27379 192.168.100.47
master8 5b13f0d690359fa762be9192c5962be249ea72ba 192.168.100.48

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

[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? 32062af99bec803b99ede31f0561ad9a11d27379  
//遷移到哪個節點,這裏是47,填寫對應的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,這裏輸入41,42,43三個master節點,輸入done表示結束

Source node #1: 4184c078593ec9f02b374283c98274f54dd18c2c
Source node #2: 2be121eb6c279b7dd6a8977fc59013b237a449a0
Source node #3: 617b38b3d01d99fd7639936dbc730dace47540ca
Source node #4: done
Do you want to proceed with the proposed reshard plan (yes/no)?yes		
//最後會有一個遷移方案,輸入yes表示同意,遷移開始。輸入no表示不同意,重新設置遷移方案。

#確認是否遷移成功

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

在這裏插入圖片描述
至此,主節點已經遷移完成了

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

[root@master1 ~]# redis-cli --cluster rebalance 192.168.100.41:6379
在這裏插入圖片描述
可以看出,節點負責的槽數據差異在2%以內,因此槽分配均衡

6、爲擴容的主節點添加從節點

root@master1 ~]# redis-cli -h 192.168.100.48 -p 6379
192.168.100.48:6379> cluster replicate 32062af99bec803b99ede31f0561ad9a11d27379		//要和哪個同步,這裏是需要和47主節點進行同步,填寫對應的IDS
OK

#查看集羣節點信息

192.168.100.48:6379> cluster nodes

在這裏插入圖片描述

7、平衡各節點槽數量

[root@master1 ~]# redis-cli --cluster rebalance --cluster-threshold 1 192.168.100.41:6379
在這裏插入圖片描述
可以看出,節點負責的槽數據差異在1%以內,因此槽分配很均衡

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