redis下的cluster的配置安裝

Redis集羣部署文檔(centos6系統)

(要讓集羣正常工作至少需要3個主節點,在這裏我們要創建6個redis節點,其中三個爲主節點,三個爲從節點,對應的redis節點的ip和端口對應關係如下)

127.0.0.1:7000{192.168.0.170}
127.0.0.1:7001
127.0.0.1:7002

192.168.0.69:7000

192.168.0.69:7001

192.168.0.69:7002


1:下載redis。官網下載3.0.0版本,之前2.幾的版本不支持集羣模式

下載地址:https://github.com/antirez/redis/archive/3.0.0-rc2.tar.gz

2:上傳服務器,解壓,編譯{192.168.0.170服務器}
   [root@mysql ~]# wget https://github.com/antirez/redis/archive/3.0.0-rc2.tar.gz
   [root@mysql ~]# tar zxvf  redis-3.0.0-rc2.tar.gz
   [root@mysql ~]#cd  redis-3.0.0-rc2.tar.gz
   [root@mysql ~]# make 
  [root@mysql ~]#make install


3:創建集羣需要的目錄

  [root@mysql ~]#mkdir   /data/redis-clu/{7001,7002,7000} -pv

4:修改配置文件{分別如下}
  [root@mysql ~]# cp /root/redis-3.0.0-rc2/redis.conf  /data/redis-clu/
  [root@mysql ~]# cp /root/redis-3.0.0-rc2/src/redis-server  /data/redis-clu/ 
  [root@mysql ~]# vim /data/redis-clu/redis.conf
pid  /var/run/redis7000.pid
port 7000
bind 0.0.0.0
cluster-enabled yes 
cluster-config-file nodes7000.conf 
cluster-node-timeout 5000  
appendonly yes
cluster-require-full-coverage yes
[root@mysql ~]# cp /data/redis-clu/7000/redis.conf

[root@mysql ~]# vim /data/redis-clu/redis.conf
pid  /var/run/redis7001.pid
port 7001
bind 0.0.0.0
cluster-enabled yes 
cluster-config-file nodes7001.conf 
cluster-node-timeout 5000  
appendonly yes 
cluster-require-full-coverage yes
[root@mysql ~]# cp /data/redis-clu/7001/redis.conf


[root@mysql ~]# vim /data/redis-clu/redis.conf
pid  /var/run/redis7002.pid
port 7002
bind 0.0.0.0
cluster-enabled yes 
cluster-config-file nodes7002.conf 
cluster-node-timeout 5000  
appendonly yes 
cluster-require-full-coverage yes
[root@mysql ~]# cp /data/redis-clu/7002/redis.conf
5:把配置好的文件copy到192.168.0.69服務器上面一份:
   [root@mysql ~]# scp -r /data/redis-clu/* 192.168.0.69:/data/redis-clu/
6:在分別在192.168.0.170和192.168.0.69服務器上啓動redis-server服務
[root@mysql redis-clu]# ls
7000  7002            dump.rdb         nodes-7001.conf  redis.conf
7001  appendonly.aof  nodes-7000.conf  nodes-7002.conf  redis-server
[root@mysql redis-clu]# pwd
/data/redis-clu
[root@mysql redis-clu]# #./redis-server 7000/redis.conf 
[root@mysql redis-clu]# #./redis-server 7001/redis.conf 
[root@mysql redis-clu]# #./redis-server 7002/redis.conf 
[root@mysql redis-clu]# ss -tunl
Netid  State      Recv-Q Send-Q                 Local Address:Port                   Peer Address:Port 
udp    UNCONN     0      0                                  *:69                                *:*     
tcp    LISTEN     0      128                                *:17000                             *:*     
tcp    LISTEN     0      128                                *:17001                             *:*     
tcp    LISTEN     0      64                                :::873                              :::*     
tcp    LISTEN     0      128                                *:17002                             *:*     
tcp    LISTEN     0      128                               :::22                               :::*     
tcp    LISTEN     0      128                                *:22                                *:*     
tcp    LISTEN     0      128                                *:7000                              *:*     
tcp    LISTEN     0      128                                *:7001                              *:*     
tcp    LISTEN     0      10                         127.0.0.1:25                                *:*     
tcp    LISTEN     0      128                                *:7002                              *:*     
[root@mysql redis-clu]# #表示服務啓動
8:在分別在192.168.0.170和192.168.0.69服務器上安裝:ruby和 rubygems和redis

[root@mysql redis-clu]#yum install -y ruby rubygems
[root@mysql redis-clu]#gem install redis
9:在192.168.0.170上啓動cluster
   [root@mysql redis-clu]#  ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002  192.168.0.69:7000 192.168.0.69:7001 192.168.0.69:7002
   發下如下錯誤:

就在相應的redis下執行


發現是沒有meet到各個服務、;
於是就執行:


這個在查看服務端:

發現集羣做好了  :
剩下的你就可以做測試了:




redis-benchmark  -h hostname -p port -s socket -c clients -n requests -d size -q 顯示每秒處理的結果
-l 永久測試 -t tests{方法} 
例子:
   redis-benchmark -h 127.0.0.1 -p 6379 -q -d 100  
         set/get 100bytes 檢測host12.0.0.1:6379 的redis性能
   redis-benchmark -h 127.0.0.1 -p 6379 -c 5000 -n 100000 
          5000個併發連接,100000個請求,檢測host爲127.0.0.1 端口爲6379的redis服務器性能 
-c:併發數量 
-n:請求數量
-t:調用的參數
-d:數據大小
redis-benchmark -h localhost -p 6379 -c 100 -n 100000 
100個併發連接,100000個請求,檢測host爲localhost 端口爲6379的redis服務器性能 

redis-cli -h localhost -p 6380 monitor 
Dump all the received requests in real time; 
監控host爲localhost,端口爲6380,redis的連接及讀寫操作

redis-cli -h localhost -p 6380 info 
Provide information and statistics about the server ; 
提供host爲localhost,端口爲6380,redis服務的統計信息 
redis cluster注意的問題 :


1. 'cluster-require-full-coverage'參數的設置。該參數是redis配置文件中cluster模式的一個參數,從字面上基本就能看出它的作用:需要全部覆蓋!
具體點是redis cluster需要16384個slot都正常的時候才能對外提供服務,換句話說,只要任何一個slot異常那麼整個cluster不對外提供服務。
redis默認是‘yes’,即需要全覆蓋!建議設置成‘no’。
 
2. 阻塞命令產生failover。由於一些阻塞命令(flushall, del key1 key2 ...)會造成redis在‘cluster-node-timeout’時間內無法響應其他節點的ping請求,
從而導致其他節點都把該redis標記出了pfail狀態,進而產生failover。redis作者計劃使用lazy redis解決。
 
3. 連接建立。當redis cluster的節點數多了以後,client對每個節點建立一個tcp連接需要花比較多的時間。如果是長連接,用戶只需忍受一次連接建立的過程,
如果是短連接,那麼頻繁建立連接將會極大的降低效率。但即便是短連接,只要每次請求只涉及到一個key,有些客戶端可能只需要與一個節點建立連接。
 
4. Jedis。Jedis是redis最流行的Java客戶端,支持redis cluster。
‘MaxRedirectionsException’異常,出現該異常說明剛剛執行的那條命令經過多次重試,沒有執行成功,需要用戶再次執行。
在cluster擴容或者slot遷移的時候比較容易出現。建議捕獲該異常並採取相應重試工作。
Pipeline,Jedis目前不支持cluster模式的pipeline,建議採用多併發代替pipeline。
 
5. Multi-key。Redis cluster對多key操作有限,要求命令中所有的key都屬於一個slot,纔可以被執行。客戶端可以對multi-key命令進行拆分,再發給redis。
另外一個侷限是,在slot遷移過程中,multi-key命令特別容易報錯(CROSSSLOT Keys in request don't hash to the same slot)。建議不用multi-key命令。 
 
6. 擴容速度慢。redis官方提供了redis cluster管理腳本redis-trib.rb。使用該腳本進行擴容cluster的時候,是串行的遷移slot中的每個key,這樣導致了
擴容的速度非常慢,百G的數據要數小時。擴容時間越長,越容易出現異常。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章