1. 程式人生 > >Linux下搭建Redis叢集環境及測試叢集 關閉redis

Linux下搭建Redis叢集環境及測試叢集 關閉redis

Redis叢集環境

Redis叢集相關概念

各redis節點彼此互聯(PING-PONG機制),內部使用二進位制協議優化傳輸速度和頻寬,無主機,客戶端隨意連線一個節點都可以
這裡寫圖片描述

節點的fail是通過叢集中超過半數的節點檢測失效才生效
這裡寫圖片描述
(1)領著投票過程是叢集中所有master參與,如果半數以上master節點與master節點通訊超過(cluster-node-timeout),認為當前master節點掛掉.
(2):什麼時候整個叢集不可用(cluster_state:fail)?
a:如果叢集任意master掛掉,且當前master沒有slave.叢集進入fail狀態,也可以理解成叢集的slot對映[0-16383]不完成時進入fail狀態. ps : redis-3.0.0.rc1加入cluster-require-full-coverage引數,預設關閉,開啟叢集相容部分失敗.
b:如果叢集超過半數以上master掛掉,無論是否有slave叢集進入fail狀態.
ps:當叢集不可用時,所有對叢集的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤

Redis 叢集中內建了 16384 個雜湊槽,當需要在 Redis 叢集中放置一個 key-value 時,redis 先對 key 使用 crc16 演算法算出一個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的雜湊槽,redis 會根據節點數量大致均等的將雜湊槽對映到不同的節點

假設有server1存放0-5000的槽,server2存放5001-10000的槽,server3存放10001-16383的槽,那麼有

Key:a

計算a的hash值,例如值為100,100這個槽在server1上,所以a應該放到server1.

Key:hello

Hash值:10032,此槽在server3上。hello可以應該存在server3.

伺服器上槽越多,那麼存放的key就越多,當多分配一個伺服器時,挪動一些槽到這個伺服器上時,key也會挪到該伺服器上,一個槽上可以有多個key

接下來演示一下叢集,

我們的叢集結構

叢集中有三個節點的叢集,每個節點有一主一備。需要6臺虛擬機器。(備是為了防止主機掛了導致整個redis叢集不可用。)
搭建一個偽分散式的叢集,使用6個redis例項來模擬。
搭建叢集需要使用到官方提供的ruby指令碼。
需要安裝ruby的環境。(只需要一句apt-get install ruby就可以了)
redis叢集管理工具redis-trib.rb
這裡寫圖片描述


指令碼需要的ruby包:
這裡寫圖片描述
需要上傳到linux上
我們先將其放到和redis一起的路徑,然後安裝
[email protected]:/usr/local/jae# gem install redis-3.2.2.gem

接著 ,為了啟動6個redis服務,我們需要建立一個資料夾存放
[email protected]:/usr/local/jae# mkdir redis-cluster
1. 複製6份redis配置檔案,一直到redis06,刪掉快照檔案
[email protected]:/usr/local/jae/redis/redisfirst# cp -r bin /usr/local/jae/redis-cluster/redis01
[email protected]:/usr/local/jae/redis/redisfirst# cp -r bin /usr/local/jae/redis-cluster/redis02
[email protected]:/usr/local/jae/redis/redisfirst# cp -r bin /usr/local/jae/redis-cluster/redis03……
[email protected]:/usr/local/jae/redis-cluster/redis01# rm -f dump.rdb
2. 修改他們的redis.conf檔案
埠號從7001~7006,開啟cluster
這裡寫圖片描述
這裡寫圖片描述
3. 把建立叢集的ruby指令碼複製到redis-cluster目錄下。
這裡寫圖片描述
4. 建立一個指令碼,啟動6個redis例項,內容
這裡寫圖片描述
這裡寫圖片描述
5. 建立叢集,在有redis-trib.rb的目錄下執行命令
./redis-trib.rb create –replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
此處127.0.0.1應是你在redis.conf中的host值。
這裡寫圖片描述
到這裡叢集就配置完畢

測試叢集

連線任接一個節點,執行一條命令,計算完槽後,如果redis能自動跳轉說明叢集成功
[email protected]:/usr/local/jae/redis-cluster# redis01/redis-cli -h 127.0.0.1 -p 7002 -c
127.0.0.1:7002> set a 100
-> Redirected to slot [15495] located at 127.0.0.1:7003
OK
127.0.0.1:7003>

正常關閉redis

直接在客戶端執行命令shutdown或直接在命令列裡執行redis-cli -p 7001 shutdown
我們直接編寫一個shutdown.sh
這裡寫圖片描述
這裡寫圖片描述