1. 程式人生 > 其它 >Redis 多伺服器叢集搭建

Redis 多伺服器叢集搭建

Redis 多伺服器叢集搭建

近期,想到之前使用的Redis叢集測試使用的是單伺服器上的偽叢集,重溫《Redis深度歷險-核心原理與應用實踐》的案例,覺得還是搭建一下多伺服器叢集來玩一玩會更有感觸。

常規操作,記錄一下搭建叢集的過程。

1 條件

  • 基於redis6.0.9版本進行叢集的搭建
  • 叢集要求至少六個節點,即每個主節點配置1個從節點,本叢集是使用了3個主節點並每個下面掛一個從節點,三個主節點分佈在3臺伺服器上。

叢集配置資訊如下:

伺服器 Master Slave
10.1.24.128(伺服器名master) 6751 6752
10.1.24.129(slave1) 6751 6752
10.1.24.130(slave2) 6751 6752

埠名為什麼要叫675*呢?因為掃地生原名的諧音是675,所以讀者可以自定義埠名。

2 叢集配置

關於Redis的基本知識也可以看看掃地生之前的學習筆記

在第一臺伺服器(10.1.24.128)上操作

  1. 下載redis原始碼包並解壓
cd /usr/enviroment

wget  -c  http://download.redis.io/releases/redis-6.0.9.tar.gz

tar  -zxvf  redis-6.0.9.tar.gz
  1. 新建叢集配置目錄
mkdir  -p  /usr/environment/redis-cluster/6751   /usr/environment/redis-cluster/6752
  1. 將解壓後的檔案中的redis.conf配置檔案拷貝到叢集目錄之下 並執行redis安裝命令
cd  redis-6.0.9

cp redis.conf  /usr/environment/redis-cluster

make  install  # 注意 gcc版本與Redis版本的衝突解決,如果沒有指定路徑,則編譯後Redis的bin預設在/usr/local,也可以 make install PREFIX=/xx/xx 來指定編譯後Redis的bin存放路徑,注意這裡的PREFIX一定要大寫

make或make install時出現如下錯誤:

gcc版本問題,新版本的,Redis6.0以上,需要更高版本的gcc,而centOS 7自帶的GCC版本往往不符合。

解決方法:

#升級到 5.3及以上版本
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
 
scl enable devtoolset-9 bash
 
#注意:scl命令啟用只是臨時的,推出xshell或者重啟就會恢復到原來的gcc版本。
#如果要長期生效的話,執行如下:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
  1. 進入/usr/local,複製bin檔案到6751,6752目錄下
cd  /usr/local

cp  -r  bin  /usr/environment/redis-cluster/6751

cp  -r  bin  /usr/environment/redis-cluster/6752
  1. 進入redis-cluster目錄,修改redis.conf並分別拷貝到6751,6752

    修改配置檔案內容如下:

 1)遮蔽限制本地訪問, 將bind 127.0.0.1 修改為 bind 0.0.0.0

  

2) protected-mode保護模式從yes改為no,實現免密登入

3)daemonize後的no改為yes

4)去掉cluster-enabled yes 前面的註釋

5)去掉cluster-node-timeout 前面的註釋

6)port後的埠改為6751

7)將執行的pid路徑改為對應的埠號便於管理,將redis.conf檔案,複製到對應的目錄下

cp  redis.conf  6751

 

8)修改node配置

cluster-config-file nodes-6751.conf
# 修改為對應的節點ID

  

9)再次編輯redis.conf 將port引數修改 6751 ==> 6752,複製到對應目錄下.

sed  -i  's/6751/6752/g'  redis.conf

cp  redis.conf  6752

 

  1. 啟動redis服務
/usr/environment/redis-cluster/6751/bin/redis-server /usr/environment/redis-cluster/6751/redis.conf

 /usr/environment/redis-cluster/6752/bin/redis-server /usr/environment/redis-cluster/6752/redis.conf

注意點: 在啟動服務之前要修改配置檔案中對應的dump dir目錄,否則預設目錄是 ./ 需要改成對應的絕對路徑,否則會造成路徑衝突,導致啟動失敗

檢視啟動的服務:

也可以用RDM連線測試:

  1. 直接將master中的叢集配置複製到其他兩個伺服器即可,需要注意的是,需要設定對應的埠與目錄

    scp -r  /usr/environment/redis-cluster/ root@slave1:/usr/environment
    
    scp -r  /usr/environment/redis-cluster/ root@slave2:/usr/environment
    

效果如下:

第一臺(master)

第二臺(slave1):

第三臺(slave2):

3 叢集搭建

使用Redis客戶端執行命令:

/usr/environment/redis-cluster/6751/bin/redis-cli --cluster create --cluster-replicas 1 10.1.24.128:6751 10.1.24.128:6752 10.1.24.129:6751 10.1.24.129:6752 10.1.24.130:6751 10.1.24.130:6752

注意:上述指令中的IP地址不能用主機名代替,因為redis對主機名的識別不是很友好,,如果改成下面這個會出現錯誤:

 /usr/environment/redis-cluster/6751/bin/redis-cli --cluster create --cluster-replicas 1 master:6751 master:6752 slave1:6751 slave1:6752 slave2:6751 slave2:6752

引數說明:

--cluster 叢集管理命令 後面可以執行叢集相關的命令

--cluster-replicas 1 代表每個Master攜帶一個Slave

create 建立叢集命令

4 客戶端測試

  開啟客戶端 連結任意一個Master節點

redis-cli -h 10.1.24.128 -c -a 密碼 -p 埠

引數:

-c: 連線到叢集

我們可以看到,當我們set一個鍵值對的時候,Redis會自動為我們的key計算CRC16值,然後對16384取模,獲取key對應的hash slot,然後通過判斷該槽被那個Master所佔用,幫我們重定向到那個Master節點,將鍵值對存入。

檢視叢集資訊:

cluster nodes

通過RDM的連線圖示可以明顯區別叢集連線和非叢集連線的區別:

5 參考文章

參考文章1

向大神看齊