Redis 集群架設
前言
公司最近又有任務了,是想要架設一個基於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可以直接安裝,但對於集群使用不好管理):
解壓
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.看到上面的畫面表示集群建立成功。