Redis-5. Redis集羣搭建


redis3.0支持集羣的容錯功能,集羣搭建:至少須要三個master。node


本文中,是在一臺linux上配置的redis集羣,你們也能夠部署在多臺linux服務器上。單個redis的安裝在前面已講解,本文將主要講解集羣的配置。
linux


集羣搭建步驟:redis


第一步:建立一個文件夾redis-cluster,而後再其下面分別建立6個文件夾以下:ruby

 mkdir -p /usr/local/redis-cluster/7001 ...7006 (三個主節點,三個從節點)服務器


第二步:把redis.conf文件分別copy到700*文件下,進行修改各個配置文件內容,也就是700*下的每個redis.conf文件進行修改:app


(1)daemonize yes(redis後臺運行)ide

(2)port 700*(redis運行的端口號,在這裏最好分別對每一個機器的端口號進行設置)spa

(3)bind 192.168.1.124(指定只接收來自該ip地址的請求)orm

(4)dir /usr/local/redis-cluster/700*/(指定數據文件存放位置,必需要指定不一樣的目錄位置,否則會丟失數據)server


//配置啓動集羣以及集羣配置文件的位置

(5)cluster-enabled yes(啓動集羣模式)

(6)cluster-config-file nodes-700*.conf(集羣配置文件,在集羣啓動時,自動建立。這裏最好和700*和端口號對應上)

(7)cluster-node-timeout 5000(集羣超時時間,節點超時多久認爲它宕機了)


//配置持久化的方式

(8)appendonly  yes(開啓aof持久化模式,每次寫操做請求都追加到appendonly.aof文件中)

(9)appendfsync  always(每次有寫操做的時候都同步)


第三步:因爲redis集羣須要使用ruby命令,因此咱們須要安裝ruby,注意在redis的src目錄下操做:

(1)yum install ruby

(2)yum install rubygems

(3)gem install redis(安裝redis和ruby的接口)


第四步:分別啓動6個啓動6個redis服務實例,而後檢查是否啓動成功;

(1)[root@wlan124 ~]# /usr/local/redis/src/redis-server /usr/local/redis-cluster/700*/redis.conf   --執行六次

(2)[root@wlan124 ~]# ps -ef | grep redis



第五步:先到redis的安裝目錄下,而後執行redis-trib.rb命令。

(1)[root@wlan124 ~]# cd /usr/local/redis/src

(2)[root@wlan124 src]# ./redis-trib.rb create --replicas 1 192.168.1.124:7001  192.168.1.124:7002  192.168.1.124:7003 192.168.1.124:7004 192.168.1.124:7005 192.168.1.124:7006


到此爲止集羣搭建成功!


第六步:鏈接redis客戶端,進行驗證:


(1)鏈接任何一臺客戶端便可:redis-cli -c -h ip地址 -p 端口號

[root@wlan124 local]# /usr/local/redis/src/redis-cli -c -h 192.168.1.124 -p 7001


(2)進行驗證:

cluster info(查看集羣信息)

cluster nodes(查看節點列表)


第七步:關閉服務器集羣則須要逐個進行關閉,使用命令:

[root@wlan124 local]# /usr/local/redis/src/redis-cli -c -h 192.168.1.124 -p 7006 shutdown


友情提示:

當出現集羣沒法啓動時,刪除集羣配置文件,再次從新啓動每個redis服務,而後從新構件集羣環境。



向集羣中添加節點或刪除節點


(1)咱們新建倆個服務,按照以前搭建的集羣方式新增倆個節點:(一主一從 master、slave)。

 Mater:7007 slave:7008


步驟一:建立7007/7008文件夾。拷貝redis.conf文件到對於的7007,7008目錄下 ,再進行修改配置文件。


[root@bhz004 redis-cluster]# mkdir 7007

[root@bhz004 redis-cluster]# mkdir 7008

[root@bhz004 redis-cluster]# cd 7001

[root@bhz004 7001]# cp redis.conf /usr/local/redis-cluster/7007/

[root@bhz004 7001]# cp redis.conf /usr/local/redis-cluster/7008/



7007修改配置文件以下:

    port:7007

    dir /usr/local/redis-cluster/7007/

    cluster-config-file nodes-7007.conf


7008修改內容以下:

    port:7008

    dir /usr/local/redis-cluster/7008/

    cluster-config-file nodes-7008.conf



步驟二:啓動7007和7008倆個服務並查看服務狀態。

[root@bhz004 7001]# /usr/local/redis/src/redis-server /usr/local/redis-cluster/7007/redis.conf

[root@bhz004 7001]# /usr/local/redis/src/redis-server /usr/local/redis-cluster/7008/redis.conf

[root@bhz004 7001]# ps -el | grep redis



redis-trib.rb命令:

1 create:建立一個集羣環境host1:port1 ... hostN:portN(集羣中的主從節點比例)

2 call:能夠執行redis命令

3 add-node:將一個節點添加到集羣裏,第一個參數爲新節點的ip:port,第二個參數爲集羣中任意一個已經存在的節點的ip:port

4 del-node:移除一個節點

5 reshard:從新分片

6 check:檢查集羣狀態



集羣中添加一個主節點:


步驟一:使用add-node命令:綠色爲新增節點,紅色爲已知存在節點

[root@wlan124 local]# /usr/local/redis/src/redis-trib.rb add-node 192.168.1.124:7007 192.168.1.124:7001


注意:當添加節點成功之後,新增的節點不會有任何數據,由於他沒有分配任何slot。須要爲新節點手動分配slot。



步驟二:reshard命令,分配slot

[root@wlan124 local]# /usr/local/redis-3.0.0/src/redis-trib.rb reshard 192.168.1.124:7007

(提示一)

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

(提示二)

What is the receiving node ID? 382634a4025778c040b7213453fd42a709f79e28

Please enter all the source node IDs.

  Type 'all' to use all the nodes as source nodes for the hash slots.

  Type 'done' once you entered all the source nodes IDs.

Source node #1:all

(提示三)

Do you want to proceed with the proposed reshard plan (yes/no)? yes



1提示一:是但願你須要多少個槽移動到新的節點上,能夠本身設置,好比200個槽。

2提示二:是你須要把這200個slot槽移動到那個節點上去(須要指定節點id),而且下個提示是輸入all爲從全部主節點(7001 7002 7003)中分別抽取相應的槽數(一共爲200個槽到指定的新節點中!,而且會打印執行分片的計劃。)

3提示三:輸入yes確認開始執行分片任務



集羣中添加一個從節點:


步驟一:使用add-node命令:綠色爲新增節點,紅色爲已知存在節點

[root@wlan124 local]# /usr/local/redis/src/redis-trib.rb add-node 192.168.1.124:7008  192.168.1.124:7001


步驟二:首先須要登陸到7008節點的客戶端而後使用集羣命令,執行replicate命令來指定當前節點的主節點id爲哪個。把當前的7008(slave)節點指定到一個主節點下(這裏使用以前建立的7007主節點,綠色表示節點id)。

[root@wlan124 ~]# /usr/local/redis/bin/redis-cli -c -h 192.168.1.124 -p 7008

192.168.1.124:7008> cluster replicate 4d4cb840519eef342a5730168b6c7e14dd811542

(7007的id)

OK


補充:集羣操做

//集羣(cluster)

CLUSTER INFO 打印集羣的信息

CLUSTER NODES 列出集羣當前已知的全部節點(node),以及這些節點的相關信息。

//節點(node)

CLUSTER MEET <ip> <port> 將 ip 和 port 所指定的節點添加到集羣當中,讓它成爲集羣的一份子。

CLUSTER FORGET <node_id> 從集羣中移除 node_id 指定的節點。

CLUSTER REPLICATE <node_id> 將當前節點設置爲 node_id 指定的節點的從節點。

CLUSTER SAVECONFIG 將節點的配置文件保存到硬盤裏面。

//槽(slot)

CLUSTER ADDSLOTS <slot> [slot ...] 將一個或多個槽(slot)指派(assign)給當前節點。

CLUSTER DELSLOTS <slot> [slot ...] 移除一個或多個槽對當前節點的指派。

CLUSTER FLUSHSLOTS 移除指派給當前節點的全部槽,讓當前節點變成一個沒有指派任何槽的節點。

CLUSTER SETSLOT <slot> NODE <node_id> 將槽 slot 指派給 node_id 指定的節點,若是槽已經指派給另外一個節點,那麼先讓另外一個節點刪除該槽>,而後再進行指派。

CLUSTER SETSLOT <slot> MIGRATING <node_id> 將本節點的槽 slot 遷移到 node_id 指定的節點中。

CLUSTER SETSLOT <slot> IMPORTING <node_id> 從 node_id 指定的節點中導入槽 slot 到本節點。

CLUSTER SETSLOT <slot> STABLE 取消對槽 slot 的導入(import)或者遷移(migrate)。

//鍵 (key)

CLUSTER KEYSLOT <key> 計算鍵 key 應該被放置在哪一個槽上。

CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的鍵值對數量。

CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 個 slot 槽中的鍵。



集羣中刪除一個從節點:


步驟一:刪除從節點7008,輸入del-node命令,指定刪除節點ip和端口,以及節點id(藍色爲7008節點id),移除了7008 slave節點,前節點的服務進程也會隨之銷燬。


[root@wlan124 ~]# /usr/local/redis-3.0.0/src/redis-trib.rb del-node 192.168.1.124:7008 a78c8a41f6430b51a7eca1fdb50092c463a8f1ac



集羣中刪除一個主節點:


    若是主節點有從節點,將從節點轉移到其餘主節點。若是主節點有slot,先將主節點裏的slot分配到其餘可用節點中,而後再刪除節點才行,不然會有數據的丟失


步驟一:刪除7007(master)節點以前,咱們須要先把其所有的數據(slot槽)移動到其餘節點上去(目前只能把master的數據遷移到一個節點上,暫時作不了平均分配功能)。

[root@wlan124 ~]# /usr/local/redis-3.0.0/src/redis-trib.rb reshard 192.168.1.124:7007

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

(註釋:這裏不會是正好200個槽)

What is the receiving node ID? 614d0def75663f2620b6402a017014b57c912dad

(註釋:這裏是須要把數據移動到哪?7001的主節點id)

Please enter all the source node IDs.

  Type 'all' to use all the nodes as source nodes for the hash slots.

  Type 'done' once you entered all the source nodes IDs.

Source node #1:4d4cb840519eef342a5730168b6c7e14dd811542

(註釋:這裏是須要數據源,也就是咱們的7007節點id)

Source node #2:done

(註釋:這裏直接輸入done 開始生成遷移計劃)

Do you want to proceed with the proposed reshard plan (yes/no)? yes

(註釋:這裏輸入yes開始遷移)



步驟二:最後咱們直接使用del-node命令刪除7007主節點便可(藍色表示7007的節點id)。

[root@wlan124 ~]# /usr/local/redis-3.0.0/src/redis-trib.rb del-node 192.168.1.124:7007 4d4cb840519eef342a5730168b6c7e14dd811542

相關文章
相關標籤/搜索