Redis叢集Redis-cluster搭建及測試
一、Redis叢集部署
三臺物理機:172.20.0.17、172.20.0.18、172.20.0.19
二、安裝Redis
下載安裝redis壓縮包
解壓壓縮包,進入redis-5.0.2資料夾,執行命令./make install安裝redis
mv redis-5.0.2 /usr/local/redis/
三、修改配置檔案
node1--17伺服器:
1、建立redis_cluster/700X的目錄
mkdir -p /usr/local/redis/redis_cluster/7001
mkdir -p /usr/local/redis/redis_cluster/7002
2、修改Redis.conf的埠
cp redis.conf /usr/local/redis/redis_cluster/7001
修改埠為7001
cp redis.conf /usr/local/redis/redis_cluster/7002
修改埠為7002
3、同時將修改後的Redis.conf複製到另外兩個節點(18、19)
4、將redis-server複製到節點目錄下,方便操作
cp /usr/local/bin/redis-server /usr/local/redis/redis-5.0.2/redis_cluster/7001/
5、開啟redis-cluster配置,配置做以下改造
#配置yes開啟redis-cluster cluster-enabled yes #配置節點之間超時時間 cluster-node-timeout 15000 #這個配置很重要,cluster開啟必須重新命名指定cluster-config-file,不能與別的節點相同,否則會啟動失敗,最好按主機+埠命名 cluster-config-file nodes-17-7001.conf
四、啟動各節點17、18、19Redis
cd /usr/local/redis/redis-5.0.2/redis_cluster/7001
./redis-server redis.conf
cd /usr/local/redis/redis-5.0.2/redis_cluster/7002
./redis-server redis.conf
五、建立叢集命令
cd /usr/local/bin
./redis-cli --cluster create 172.20.0.17:7001 172.20.0.18:7001 172.20.0.19:7001 172.20.0.17:7002 172.20.0.18:7002 172.20.0.19:7002 --cluster-replicas 1
(replicas
1 表示我們希望為叢集中的每個主節點建立一個從節點。
如圖即建立成功
後面有嘗試做三組 一主兩從 即:
./redis-cli --cluster create 172.20.0.17:7001 172.20.0.18:7001 172.20.0.19:7001 172.20.0.17:7002 172.20.0.18:7002 172.20.0.19:7002 172.20.0.17:7003 172.20.0.18:7003 172.20.0.19:7003 --cluster-replicas 2
自動分配主從屬性:
redis-cli -h 172.20.0.17 -p 7001 cluster nodes檢視節點情況
master的node_id有對應的一個slave對應
六、測試Redis cluster
1、嘗試給master 172.20.0.18:7001新增資料
可見資料儲存在19:7001埠中,則19:7001的從節點18:7002也有資料
七、測試故障轉移
在此測試期間,為了觸發故障轉移,我們可以做的最簡單的事情(也就是在分散式系統中可能出現的語義上最簡單的故障)是使單個程序崩潰
我們嘗試將master 17:7001擊潰
檢視此時17:7001為master fail狀態,而他的子節點19:7002從slave競選為新的master;
重新啟動17:7001節點,它才成為了slave節點
八、叢集效能測試
因嘗試使用官方推薦的bench-Mark 測試時,檢視CPU佔用只在對應槽片的哪臺伺服器上,此處引用Redis & Redis Cluster benchmark Tool
前往Git下載安裝
https://github.com/panjiang/redisbench
-a string Redis instance address or Cluster addresses. IP:PORT[,IP:PORT] -c int Clients number for concurrence (default 1) -cluster true: cluster mode, false: instance mode -d int Data size in bytes (default 1000) -ma string addresses for run multiple testers at the same time -mo int the order current tester is in multiple testers -n int Testing times at every client (default 1)
Redis&Redis Cluster基準工具
- 寫在Golang
- 可以測試redis單例項
- 可以測試redis叢集
- 可以利用多核
- 支援同時在多臺機器上執行,用於測試大型redis叢集(需要相同的機器硬體)
救命
./redisbench -h
例
測試單個例項
./redisbench -a 127.0.0.1:6379 -c 500 -n 2000 -d 3
測試叢集
./redisbench -cluster=true -a 192.168.10.11:7000,192.168.10.11:7001 -c 500 -n 2000 -d 3
使用多個測試節點
./redisbench -cluster=true -a 192.168.10.11:7000,192.168.10.11:7001 -c 500 -n 2000 -d 3 -ma 192.168.10.11:9001,192.168.10.11:9002 -mo 1&
./redisbench -cluster=true -a 192.168.10.11:7000,192.168.10.11:7001 -c 500 -n 2000 -d 3 -ma 192.168.10.11:9001,192.168.10.11:9002 -mo 2
./redisbench -cluster=true -a 192.168.10.11:7000,192.168.10.11:7001 -c 500 -n 2000 -d 3 -ma 192.168.10.11:9001,192.168.10.11:9002,192.168.10.11:9003 -mo 1 &
./redisbench -cluster=true -a 192.168.10.11:7000,192.168.10.11:7001 -c 500 -n 2000 -d 3 -ma 192.168.10.11:9001,192.168.10.11:9002,192.168.10.11:9003 -mo 2 &
./redisbench -cluster=true -a 192.168.10.11:7000,192.168.10.11:7001 -c 500 -n 2000 -d 3 -ma 192.168.10.11:9001,192.168.10.11:9002,192.168.10.11:9003 -mo 3
測試結果會自動打印出:請求值,請求時間,TPS
附一張多客戶端測試圖