Redis 集群架設

徐子函
徐子函
Sep 6, 2018 · 11 min read

前言

公司最近又有任務了,是想要架設一個基於Key-Value的線上緩存數據庫,所以也搭了一個Redis集群,而下面就是方法。

在這裡,我們選擇了一主一從的架構,為3個Master Node以及3個Slave Node,所以我們的Redis集群當中有6個節點,而我的集群規劃如下:

節點名稱,ip,端口號,角色

ubuntu01,192.168.1.1,7001,master+集群管理者

ubuntu02,192.168.1.2,7002,master

ubuntu03,192.168.1.3,7003,master

ubuntu04,192.168.1.4,7004,slave

ubuntu05,192.168.1.5,7005,slave

ubuntu06,192.168.1.6,7006,slave

既然完成了集群的規劃,所以我們開始吧~

系統需求

  • ruby(for 集群管理者)

安裝教學

公共部分

首先下載redis的源代碼(雖然Ubuntu的apt可以直接安裝,但對於集群使用不好管理):

wget http://download.redis.io/releases/redis-4.0.11.tar.gz

解壓

tar -xvf redis-4.0.11.tar.gz

重命名

mv redis-4.0.11 redis

切換到Redis的文件夾裡面

cd redis

對Redis進行編譯

make

編譯完後會出現一個src的資料夾,Redis的執行檔都在裡面。

然後我們要建立Redis的工作目錄:

sudo mkdir /var/redis

cd /var/redis

sudo mkdir 7001 7002 7003 7004 7005 7006

cd ~/

各節點部分

打開Redis的設置

vi redis/redis.conf

分別修改與添加內容:

####################################################################
# 在這裡,700X都是對應於集群規畫表的端口號,例如ubuntu01->7001 #
####################################################################
# 設置該節點的port
port 7001
...
# 打開集群模式
cluster-enabled yes
...
# 集群設置檔的生成名字(若沒設置生成路徑,則會自動生成於Redis的工作目錄內,也可以設置例如:/etc/redis/node-7001.conf)
cluster-config-file node-7001.conf
...
# 最大逾時設置
cluster-node-timeout 15000
...
# 以後臺方式啟動
daemonize yes
...
# 設置pid文檔名稱
pidfile /var/run/redis_7001.pid
...
# 設置工作目錄
dir /var/redis/7001
...
# log存放地址與名稱
logfile /var/log/redis/7001.log
...
# 綁定IP(默認127.0.0.1表示端口不對外)在這裡輸入該節點的IP,不要輸入域名(Redis目前對域名支持不佳)
bind 192.168.1.1
...
# 數據持久化設置
appendonly yes
...

設置完成後於各節點都啟動Redis

sudo redis/src/redis-server redis/redis.conf

檢查是否啟動

ps -ef | grep redis

若出現類似下面畫面則表實這個節點啟動成功:

root 10016 1 0 13:45 ? 00:00:04 src/redis-server 192.168.1.1:7001 [cluster]
hadoop 12532 20831 0 14:42 pts/3 00:00:00 grep — color=auto redis

集群管理者

在每個節點都啟動完成後,我們還要將每個結點連接在一起,所以我們需要通過Redis自帶的集群管理工具來建立集群,但這個工具是以Ruby來實現的,所以在集群管理者中必須安裝Ruby。

首先我們要先確定於ubunut01是否安裝Ruby

ruby -version

出現如下畫面就可以確定已經安裝了Ruby

ruby 2.3.1p112 (2016–04–26) [x86_64-linux-gnu]

再來對每個節點建立聯繫(前面3個IP為主,後3個為從)

redis/src/redis-trib.rb create --replicas 1 192.168.1.1:7001 192.168.1.2:7002 192.168.1.3:7003 192.168.1.4:7004 192.168.1.5:7005 192.168.1.6:7006

然後會出現下面畫面:

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes…
Using 3 masters:
192.168.1.1:7001
192.168.1.2:7002
192.168.1.3:7003
Adding replica 192.168.1.5:7005 to 192.168.1.1:7001
Adding replica 192.168.1.6:7006 to 192.168.1.2:7002
Adding replica 192.168.1.4:7004 to 192.168.1.3:7003
M: 65824d5d892337618e1d3db78742c4f28d79d564 192.168.1.1:7001
slots:0–5460 (5461 slots) master
M: 097366ab15fb24a5973689eb3967886037b21986 192.168.1.2:7002
slots:5461–10922 (5462 slots) master
M: 84788c0438041c4aec3fdebaca93f96f705b8a25 192.168.1.3:7003
slots:10923–16383 (5461 slots) master
S: 2f02ed16d0116269d3646c49d31152a20a0a6664 192.168.1.4:7004
replicates 84788c0438041c4aec3fdebaca93f96f705b8a25
S: e999d7f373a1709ac6872056f030b7fd91b785af 192.168.1.5:7005
replicates 65824d5d892337618e1d3db78742c4f28d79d564
S: f4d646c7c5544fd5869f675dd09f5603df86fe26 192.168.1.6:7006
replicates 097366ab15fb24a5973689eb3967886037b21986
Can I set the above configuration? (type ‘yes’ to accept):

其中Can I set the above configuration? (type ‘yes’ to accept):是確定是否套用設置,輸入yes繼續,若是建立成功,則會出現下面類似畫面:

yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join…
>>> Performing Cluster Check (using node 192.168.1.1:7001)
M: 65824d5d892337618e1d3db78742c4f28d79d564 192.168.1.1:7001
slots:0–5460 (5461 slots) master
1 additional replica(s)
M: 84788c0438041c4aec3fdebaca93f96f705b8a25 192.168.1.3:7003
slots:10923–16383 (5461 slots) master
1 additional replica(s)
S: 2f02ed16d0116269d3646c49d31152a20a0a6664 192.168.1.4:7004
slots: (0 slots) slave
replicates 84788c0438041c4aec3fdebaca93f96f705b8a25
S: e999d7f373a1709ac6872056f030b7fd91b785af 192.168.1.5:7005
slots: (0 slots) slave
replicates 65824d5d892337618e1d3db78742c4f28d79d564
S: f4d646c7c5544fd5869f675dd09f5603df86fe26 192.168.1.6:7006
slots: (0 slots) slave
replicates 097366ab15fb24a5973689eb3967886037b21986
M: 097366ab15fb24a5973689eb3967886037b21986 192.168.1.2:7002
slots:5461–10922 (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots…
>>> Check slots coverage…
[OK] All 16384 slots covered.

成功完成架設,若不放心的話還可以以下面指令來測試:

/redis/src/redis-trib.rb check 192.168.1.1:7001

>>> Performing Cluster Check (using node 192.168.1.1:7001)
M: 65824d5d892337618e1d3db78742c4f28d79d564 192.168.1.1:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: 84788c0438041c4aec3fdebaca93f96f705b8a25 192.168.1.3:7003
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: 2f02ed16d0116269d3646c49d31152a20a0a6664 192.168.1.4:7004
slots: (0 slots) slave
replicates 84788c0438041c4aec3fdebaca93f96f705b8a25
S: e999d7f373a1709ac6872056f030b7fd91b785af 192.168.1.5:7005
slots: (0 slots) slave
replicates 65824d5d892337618e1d3db78742c4f28d79d564
S: f4d646c7c5544fd5869f675dd09f5603df86fe26 192.168.1.6:7006
slots: (0 slots) slave
replicates 097366ab15fb24a5973689eb3967886037b21986
M: 097366ab15fb24a5973689eb3967886037b21986 192.168.1.2:7002
slots:5461-10922 (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

看到上面的畫面表示集群建立成功。

    徐子函

    Written by

    徐子函

    https://github.com/aspspspsp https://www.linkedin.com/in/%E5%AD%90%E5%87%BD-%E5%BE%90-290a46107/

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade