1. 概述
1.1 版本
報表伺服器版本 |
---|
11.0 |
1.2 Redis 叢集原理
1)Redis 叢集結構:N 個平權主節點(master),每個主節點對應 M 個從節點(slave)。
注:因為投票機制,N 須為奇數。必須要 3 個或以上的主節點,否則在建立叢集時會失敗,並且當存活的節點數小於總節點數的一半時,整個叢集就無法提供服務了。
2)Redis 叢集投票機制:伺服器之間透過互相的 ping-pong 判斷是否節點可以連結上。如果有一半以上的節點去 ping 一個節點的時候沒有迴應,叢集就認為這個節點當機了。此時該主節點對應的從節點上升為主節點。當沒有從節點可替補時,叢集當機。
1.3 功能簡介
為達到 Web 叢集極致高可用的目標,本文將提供 Redis 叢集的部署和配置方案。
2. 操作步驟
2.1 前期準備
部署 Redis 叢集至少需要 3 台伺服器,參考 環境準備,準備 3 台 Linux 伺服器,每台伺服器上部署 2 個節點,3 台伺服器運作 6 個 Redis 實體,組成一個經典的「三主三從」的 Redis 叢集。
注1:使用者若需要搭建 Web 叢集和 Redis 叢集,其中 Web 節點和 Redis 節點可以共存在一台機器上,不需要準備單獨的機器安裝 Redis 節點。
注2:需要部署更多節點的 Redis 叢集可以基於此方案類推。
注3:主節點必須在不同的伺服器上,本文範例中,埠號為 7001、7003、7005 的 Redis 為主節點。
伺服器 | 伺服器IP地址(範例) | 埠 |
---|---|---|
伺服器1 | 192.168.5.248 | 7001、7002 |
伺服器2 | 192.168.5.221 | 7003、7004 |
伺服器3 | 192.168.5.102 | 7005、7006 |
2.2 伺服器上建立兩個 Redis 節點
2.2.1 編譯環境
安裝 Redis 時需對原始碼包編譯,此步驟依賴 gcc 編譯器,如果沒有 gcc 環境,則需要自行安裝,網路連結安裝命令 yum install gcc gcc-c++
gcc -v #檢查是否有 gcc 編譯器
2.2.2 下載原始碼包
要求使用 5.0.0 以上版本 Redis,部署和啟動 Redis 叢集時無須依賴 ruby。
1)下載:redis-5.0.4.tar.gz: redis-5.0.4.tar.gz
2)官網下載:http://download.redis.io/releases/
2.2.3 安裝 Redis
mkdir /usr/redis #建立Redis目錄
cd /usr/redis #進入目錄
#將redis-5.0.4.tar.gz傳輸到該目錄下#
tar zxvf redis-5.0.4.tar.gz #解壓安裝包
cd /usr/redis/redis-5.0.4 #進入解壓目錄
make && make install #安裝命令
安裝成功後可以看到:
2.2.4 建立節點
mkdir /usr/redis/redis-cluster #建立叢集目錄redis-cluster
cd /usr/redis/redis-cluster #進入redis-cluster目錄
mkdir 7001 7002 #建立兩個redis節點的目錄
2.2.5 修改配置
下載配置檔案:redis.conf:redis.zip,手動put 命令放置到 7001 和 7002 兩個資料夾。
本文提供的配置檔案相比預設 redis.conf 已經修改內容如下:
注:redis 相關密碼本文範例設定的較簡單,使用者實際操作時請修改為更安全的密碼。
#bind 127.0.0.1 # 取消僅限本地存取的限制
daemonize yes # 設定redis預設後台運作
protected-mode no # 關閉保護模式
maxmemory 2147483648 # 最大記憶體2G
maxmemory-policy allkeys-lru # 過期清理策略
pidfile /var/run/redis_7001.pid # pidfile檔案對應7001
port 7001 # 埠7001
requirepass admin123456 # redis登入密碼,預設admin123456
masterauth admin123456 # redis認證密碼,預設admin123456
cluster-enabled yes # 開啟叢集
cluster-config-file nodes-7001.conf # 叢集的配置,配置檔案首次啟動自動生成7001
7001 資料夾的 redis.conf 無須再修改,7002 資料夾的 redis.conf 需將配置裏的 7001 更換為 7002,操作如下:
cd /usr/redis/redis-cluster/7002/ #進入7002目錄
vi redis.conf #編輯redis.conf檔案
:%s/7001/7002/g # 將7002的conf檔案中所有7001更換為7002,一共三處
:wq # 儲存配置
2.2.6 啟動節點
cd /usr/redis/redis-5.0.4/src/ #進入啟動目錄
./redis-server /usr/redis/redis-cluster/7001/redis.conf # 指定7001的配置檔案,啟動該節點
./redis-server /usr/redis/redis-cluster/7002/redis.conf # 指定7002的配置檔案,啟動該節點
在啟動7001 和 7002 節點後,redis 節點之間會用到17001 和 17002 埠供叢集選舉通訊使用(CLUSTER MEET),即使用埠的大小加上 10000(埠是XXXX,那麼通訊埠是1XXXX),若節點間伺服器有防火牆,需要對這些埠進行開放。
2.3 建立其他四個節點
建立更多節點,重複操作本文 2.2.1-2.2.6 的步驟。在伺服器 2 和伺服器 3 上分別建立 7003、7004 和 7005、7006 節點並啟動。
2.4 建立Redis叢集
節點建立完畢後,各個節點實際上是獨立的,並沒有組成一個叢集,還需要下面的操作。
注:下面第二行程式碼中,前三個節點是主節點,後三個節點是從節點。
cd /usr/redis/redis-5.0.4/src/ #進入任一節點的啟動目錄
./redis-cli --cluster create 192.168.5.248:7001 192.168.5.221:7003 192.168.5.102:7005 192.168.5.248:7002 192.168.5.221:7004 192.168.5.102:7006 --cluster-replicas 1 -a admin123456 #建立叢集的命令,命令最後的admin123456是設定的認證密碼,-replicas 1的意思是每台redis伺服器有一個備份機,執行完此命令後,該腳本會自動為這6個redis實體分配主從和槽
當程式提示: Can I set the above configuration? (type 'yes' to accept) 時,鍵入 yes 回車:
至此叢集搭建完成!
3. 維運知識
cd /usr/redis/redis-5.0.4/src/ #進入啟動目錄
./redis-server /usr/redis/redis-cluster/7001/redis.conf #指定7001的配置檔案,啟動該節點,其他節點啟動方式同理
redis-cli -h ip -c -p 埠 -a 密碼 #用戶端遠端連結某個節點,要輸入對應的ip、埠、密碼
192.168.1.124:7001> cluster nodes #進入任意一個節點,查詢叢集主從分佈及健康狀態
更多維運操作,詳情見:Linux 系統 Redis 維運手冊
注:Redis 叢集官方搭建指導請參見:Redis 叢集教程