一、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
附一張多客戶端測試圖