為達到 Web 叢集極致高可用的目標,本文將提供 Redis 叢集的部署和配置方案。Redis 叢集的原理如下:
1)Redis 叢集結構:N 個平權主節點(master),每個主節點對應 M 個從節點(slave)。
注:因為投票機制,N 須為奇數。必須要 3 個或以上的主節點,否則在建立叢集時會失敗,並且當存活的節點數小於總節點數的一半時,整個叢集就無法提供服務了。
2)Redis 叢集投票機制:伺服器之間透過互相的 ping-pong 判斷是否節點可以連結上。如果有一半以上的節點去 ping 一個節點的時候沒有迴應,叢集就認為這個節點當機了。此時該主節點對應的從節點上升為主節點。當沒有從節點可替補時,叢集當機。
部署 Redis 叢集至少需要 3 台伺服器,參考 環境準備,準備 3 台 Linux 伺服器,每台伺服器上部署 2 個節點,3 台伺服器運作 6 個 Redis 實體,組成一個經典的「三主三從」的 Redis 叢集。
注1:使用者若需要搭建 Web 叢集和 Redis 叢集,其中 Web 節點和 Redis 節點可以共存在一台機器上,不需要準備單獨的機器安裝 Redis 節點。
注2:需要部署更多節點的 Redis 叢集可以基於此方案類推。
注3:主節點必須在不同的伺服器上。例如本文範例中,7001/7003/7005為主節點,分佈在三台伺服器上。7002/7004/7006為從節點,分佈在三台伺服器上。
同一槽位的主從也要分佈在不同節點。例如本文範例中,7004是7001的從節點,7006是7003的從節點,7002是7005的從節點,均不在同一台伺服器上。
7005、7006
安裝 Redis 時需對原始碼包編譯,此步驟依賴 gcc 編譯器,如果沒有 gcc 環境,則需要自行安裝,網路連結安裝命令 yum install gcc gcc-c++
gcc -v #檢查是否有 gcc 編譯器
要求使用 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/
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 #安裝命令
安裝成功後可以看到:
mkdir /usr/redis/redis-cluster #建立叢集目錄redis-clustercd /usr/redis/redis-cluster #進入redis-cluster目錄mkdir 7001 7002 #建立兩個redis節點的目錄
下載配置檔案:redis.conf:redis.zip,手動put 命令放置到 7001 和 7002 兩個資料夾。
本文提供的配置檔案相比預設 redis.conf 已經修改內容如下:
注:redis 相關密碼本文範例設定的較簡單,使用者實際操作時請修改為更安全的密碼。
#bind 127.0.0.1 # 取消僅限本地存取的限制daemonize yes # 設定redis預設後台運作protected-mode no # 關閉保護模式maxmemory 2147483648 # 最大記憶體2Gmaxmemory-policy noeviction # 代表Redis記憶體達到最大限制時,Redis不會自動清理或刪除任何鍵來釋放記憶體,新的寫入請求將會被拒絕pidfile /var/run/redis_7001.pid # pidfile檔案對應7001port 7001 # 埠7001 requirepass admin123456 # redis登入密碼,預設admin123456masterauth admin123456 # redis認證密碼,預設admin123456cluster-enabled yes # 開啟叢集 cluster-config-file nodes-7001.conf # 叢集的配置,配置檔案首次啟動自動生成7001dbfilename 7001dump.rdb #redis dump落盤檔案logfile "7001.log" #redis日誌檔案appendfilename "7001appendonly.aof" #redis aof落盤檔案
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 # 儲存配置
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.2.1-2.2.6 的步驟。在伺服器 2 和伺服器 3 上分別建立 7003、7004 和 7005、7006 節點並啟動。
節點建立完畢後,各個節點實際上是獨立的,並沒有組成一個叢集,還需要下面的操作。
注:下面第二行程式碼中,前三個節點是主節點,後三個節點是從節點。
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 回車:
至此叢集搭建完成!
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 叢集教程
問題描述
Redis 叢集搭建立功後,想在平台修改 Redis 的地址,測試並連結顯示成功,但無法修改成功。
原因分析
Redis 叢集顯示的節點 ip 和埠都是 Redis 伺服器上執行 cluster nodes 讀取出來的 ip 地址,與手動填寫的 ip 可能是不一致的(可能伺服器存在多個 ip )。
解決方案
重新部署 Redis 叢集,建立叢集命令時使用需要的 ip 進行建立。
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙