Redis-5. Redis集羣搭建


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


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


集羣搭建步驟:


第一步:創建一個文件夾redis-cluster,然後再其下面分別創建6個文件夾如下:

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


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


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

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

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

(4)dir /usr/local/redis-cluster/700*/(指定數據文件存放位置,必須要指定不同的目錄位置,不然會丟失數據)


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

(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




























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