redis 集羣架構 cluster 、sentinel

redis-cluster

實驗環境:

centos6.5   IP192.168.1.11

依賴包:redis    ruby   rubygem

 

 

[root@localhost redis]#tar xf redis-3.0.2.tar.gz

[root@localhost redis]#cd redis-3.0.2

[root@localhost redis]#make &&make install

tab鍵看redis-  這些工具是否安裝好,沒安裝則cp/usr/local/bin

[root@localhost redis]#which redis-cli

[root@localhost redis]#cp /root/redis-3.0.2/src/redis-trib.rb /usr/local/bin/redis-trib

[root@localhost redis]#mkdir /usr/local/redis

[root@localhost redis]#cd /usr/local/redis/

[root@localhost redis]#mkdir `seq 7001 7008`

[root@localhost redis]# cp ~/redis-3.0.2/redis.conf ./

[root@localhost redis]# ls

7001  7002  7003  7004  7005  7006  7007  7008  redis.conf

 

配置文件裏,這三行配置:

daemonize yes//後臺掛起

cluster-enabled yes//開啓集羣

cluster-config-file nodes-7001.conf//集羣節點配置文件

cluster-node-timeout 5000//超時時間,毫秒

appendonly yes並且appendonly要開啓:

 

  1. requirepass "abc"    #集羣加密碼,一般是集羣配置完後用到

  2. masterauth "abc"  


 

for批量修改:

for i in {7001..7008};do sed  "s/6379/$i/" redis.conf >$i/redis.conf;done

 

for批量啓動:

for i in {7001..7008};do cd /usr/local/redis/$i&&redis-server redis.conf ;done

[root@localhost 7008]# ps aux|grep redis//查看redis啓動狀態

 

 

聯網  yum -y install ruby rubygems   建議用yum吧,用源碼弄了半天弄不好

 

[root@localhost 7001]# gem install redis安裝rubyredis接口

 

 

接下來就是redis-trib  工具出場了:

[root@localhost redis]# redis-trib help//查看能否使用

 

[root@localhost redis]# redis-trib create --replicas 1 192.168.1.11:7001 192.168.1.11:7002 192.168.1.11:7003 192.168.1.11:7004 192.168.1.11:7005 192.168.1.11:7006

Can I set the above configuration? (type 'yes' to accept):  yes   //這裏輸入yes

 

#--replicas 1 代表複製一份,即每個主一個從

#redis cluster最低要求三個主, 定義是host1:port host2:port

#如果--replicas 2則:

#host1:port == master host2:port &host3:port

host1 host2 host3的主

如果是創建9個是節點   --replicas 2  a b c d e f g h i 則,d e a的從,f gb的從  h ic的從

 

[root@localhost redis]# redis-cli -c -h 127.0.0.1 -p 7001#連接7001

127.0.0.1:7001> cluster nodes#查看集羣節點

127.0.0.1:7001> cluster info#查看集羣信息

cluster_state:ok

 

 

集羣擴容

[root@localhost redis]# redis-trib add-node 192.168.1.11:7007 192.168.1.11:7001

redis-trib add-node 要加的節點   現有的任意節點

 

M: ff2b5205f2c1531422052a7c4c4feca3db046878 192.168.1.11:7001

   slots:0-5460 (5461 slots) master

   1 additional replica(s)

S: ef4ed8963e868ed9befa2fc25049039d270f7dbe 192.168.1.11:7005

   slots: (0 slots) slave

   replicates 721b0611a6a8a6e027d6619091a747b05a0529c2

S: 1538fe39b9694912c80024fc2bfcacde9ddbfb47 192.168.1.11:7004

   slots: (0 slots) slave

   replicates ff2b5205f2c1531422052a7c4c4feca3db046878

M: 721b0611a6a8a6e027d6619091a747b05a0529c2 192.168.1.11:7002

   slots:5461-10922 (5462 slots) master

   1 additional replica(s)

M: ef07b1bbb70392b4ac57f7d80a0f4ae7a13643f7 192.168.1.11:7003

   slots:10923-16383 (5461 slots) master

   1 additional replica(s)

S: 0d2e18cbbc2d6abd9cd72e554c8b7484fb089ccb 192.168.1.11:7006

   slots: (0 slots) slave

   replicates ef07b1bbb70392b4ac57f7d80a0f4ae7a13643f7

 

 

[root@localhost redis]# redis-cli -c -h 127.0.0.1 -p 7001

127.0.0.1:7001> cluster info

cluster_state:ok

cluster_slots_assigned:16384

...

127.0.0.1:7001> cluster nodes

ef4ed8963e868ed9befa2fc25049039d270f7dbe 192.168.1.11:7005 slave 721b0611a6a8a6e027d6619091a747b05a0529c2 0 1486917802211 5 connected

1538fe39b9694912c80024fc2bfcacde9ddbfb47 192.168.1.11:7004 slave ff2b5205f2c1531422052a7c4c4feca3db046878 0 1486917801707 4 connected

78a65dcd0b5165ecdab3ab2320bf975a35a66cf9 192.168.1.11:7007 master - 0 1486917802714 0 connected

ff2b5205f2c1531422052a7c4c4feca3db046878 192.168.1.11:7001 myself,master - 0 0 1 connected 0-5460

721b0611a6a8a6e027d6619091a747b05a0529c2 192.168.1.11:7002 master - 0 1486917801202 2 connected 5461-10922

ef07b1bbb70392b4ac57f7d80a0f4ae7a13643f7 192.168.1.11:7003 master - 0 1486917803218 3 connected 10923-16383

0d2e18cbbc2d6abd9cd72e554c8b7484fb089ccb 192.168.1.11:7006 slave ef07b1bbb70392b4ac57f7d80a0f4ae7a13643f7 0 1486917801202 6 connected

 

前一大串是節點裏的ID,新上來的節點沒有槽位,得重新分片:

[root@localhost redis]# redis-trib reshard 192.168.1.11:7007//7007分片

How many slots do you want to move (from 1 to 16384)?1000     //70071000槽位

What is the receiving node ID?  //接受節點的ID,這裏複製7007ID過來

Source node #1:all//從源節點過來

 

添加70087007做從

[[email protected]]# redis-trib add-node     192.168.1.11:7008    192.168.1.11:7001

 

[root@localhost redis]# redis-cli -c -p 7008//進入7008節點

127.0.0.1:7008> cluster nodes//查看節點,現在他還是主

127.0.0.1:7008> cluster replicate 78a65dcd0b5165ecdab3ab2320bf975a35a66cf9

OK//複製7007ID過來

127.0.0.1:7008> cluster nodes//現在就變爲7007的從了

 

刪除節點:

[root@localhost redis]# redis-trib del-node 192.168.1.11:7008 6a8a8c8a4c9640d2cda682de85ac9b83b837e2cd

 

redis-trib del-ode 主機:端口 ID

 

 

查看節點以及槽位:

[root@localhost redis]# redis-trib check 192.168.1.11:7001

 

 

轉移槽位:如果要刪除主,則需要把槽位給刪了在刪除節點。

[root@localhost 7009]# redis-trib reshard 192.168.1.11:7002

How many slots do you want to move (from 1 to 16384)?

需要移動的數目:

 

What is the receiving node ID?

接受這些槽位的ID//目標節點

 

Source node #1:

從何處移到上面所指定的ID  //源節點

 

Source node #2:done//結束

 

[root@localhost redis]# pkill redis//關閉所有redis

 

 

 

可以看到redis-trib.rb具有以下功能:
1create:創建集羣
2check:檢查集羣
3info:查看集羣信息
4fix:修復集羣
5reshard:在線遷移slot
6rebalance:平衡集羣節點slot數量
7add-node:將新節點加入集羣
8del-node:從集羣中刪除節點
9set-timeout:設置集羣節點間心跳連接的超時時間
10call:在集羣全部節點上執行命令
11import:將外部redis數據導入集羣




redis-sentinel

IP分佈:

reids master  192.168.1.11  6379

reids slalve   192.168.1.11  6380

reids slave   192.168.1.11  6381

reids sentinel  192.168.1.11  26379

 

先啓動所有reids,(修改好配置,配置好主從)

redis-server /usr/local/redis/6379/redis.conf &

redis-server /usr/local/redis/6380/redis.conf &

redis-server /usr/local/redis/6381/redis.conf &

 

[root@localhost 6379]# ps aux|grep redis

root     17151  0.1  0.5 137436  2736 pts/0    Sl   07:43   0:00 redis-server *:6379                          

root     17165  0.2  0.5 137436  2680 pts/0    Sl   07:43   0:00 redis-server *:6381                                                 

root     17204  0.2  0.5 137436  2636 pts/0    Sl   07:45   0:00 redis-server *:6380  

 

cp /root/redis-3.0.0-rc2/sentinel.conf /usr/local/redis/

vi /usr/local/redis/sentinel.conf#一份配置文件可以配置多個羣集組

sentinel monitor mymaster 192.168.7.40 6379 1

#監聽的羣集,1代表一個slave節點ping不通,則認爲master宕機

sentinel down-after-milliseconds mymaster  5000

#sentinelmaster發送ping,多長時間內沒通則認爲宕機。單位爲毫秒

sentinel failover-timeout mymaster  900000

#failover後,如果此時間內沒有任何failover操作,則默認爲failover失敗

sentinel parallel-syncs mymaster  2 

    #最多有多少個slave對新master進行同步###mymaster可以自己定義

sentinel can-failover def_master yes 

#sentinel是否實施failoverno則只參與投票,不實施failover 

 

redis-server /usr/local/redis/sentinel.conf  --sentinel &啓動sentinel

 

[root@localhost 6379]# ps aux|grep redis

root     17151  0.1  0.4 137436  2448 pts/0    Sl   07:43   0:02 redis-server *:6379                          

root     17165  0.1  0.5 137436  2536 pts/0    Sl   07:43   0:02 redis-server *:6381                          

root     17172  0.3  0.4 137436  2436 pts/0    Sl   07:43   0:05 redis-server *:26379 [sentinel]                            

root     17204  0.1  0.5 137436  2488 pts/0    Sl   07:45   0:02 redis-server *:6380                          

root     17419  0.0  0.1 103216   772 pts/0    S+   08:08   0:00 grep redis

 

 

[root@localhost 6379]# redis-cli -p 26379 info sentinel查看sentinel信息

# Sentinel

sentinel_masters:1

sentinel_tilt:0

sentinel_running_scripts:0

sentinel_scripts_queue_length:0

master0:name=mymaster,status=ok,address=127.0.0.1:6381,slaves=2,sentinels=1    #紅色部分爲master

[root@localhost 6379]# redis-cli -p 26379 sentinel slaves mymaster查看集羣從節點

 

[root@localhost ~]# redis-cli -p 6379 info Replication查看單個節點的角色 

 

故障演示:  (自行完成),當主宕機後,從代替,主恢復後,變成新主的從。

 

恢復數據:先把redis關掉,然後把.aof.rdb結尾的文件導入配置文件目錄下。啓動redis



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