Redis进阶-5.x 单节点 及Redis Cluster 3主3从集群部署
文章目錄
- Redis 下載地址
- Redis 5.x 單節點 編譯安裝
- Redis 啟停
- Redis Cluster 4.x VS Redis Cluster 5.x
- 演進之路 ( Master/Slave--- > Sentinel-----> Cluster )
- Sentinel VS Cluster
- 哨兵模式Sentinel
- 集群模式Cluster
- Redis 5.x Cluster 搭建
- PreView
- Step1 安裝單節點的redis
- Step2 編寫redis cluster的配置文件
- Step3 其余兩臺重復第一臺的操作
- Step4 啟動6個實例
- Step5 用redis‐cli創建整個redis集群
- Step6 驗證集群
Redis 下載地址
下載地址: http://redis.io/download
歷史版本: http://download.redis.io/releases/
之前裝過4.0.11 ----> Redis-02Redis在linux下的安裝及常見問題
Redis 5.x 單節點 編譯安裝
第一步 : 安裝gcc 5.0.3 只需要依賴gcc即可。
# 安裝gcc yum install gcc第二步 下載、解壓、編譯安裝
[root@artisan ~]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz[root@artisan ~]# tar -xvzf redis-5.0.3.tar.gz [root@artisan ~]# cd redis-5.0.3[root@artisan redis-5.0.3]# make Hint: It's a good idea to run 'make test' ;)make[1]: Leaving directory `/home/redis/redis-5.0.3/src'如果你要make test (可選),有報錯的話 ,安裝下tcl依賴包,執行如下命令
yum install tcl tcl-devel -y再重新執行
[redis@artisan src]$ make test.... .... ....282 seconds - unit/obuf-limits\o/ All tests passed without errors!為了方便維護,建議啟動腳本放到bin , 配置文件放到etc, 數據文件放到data,日志放到log目錄… (可選)
[redis@artisan redis-5.0.3]$ [redis@artisan redis-5.0.3]$ mkdir etc [redis@artisan redis-5.0.3]$ mkdir bin [redis@artisan redis-5.0.3]$ mkdir data [redis@artisan redis-5.0.3]$ mkdir log [redis@artisan redis-5.0.3]$ mv redis.conf etc/ [redis@artisan redis-5.0.3]$ mv sentinel.conf etc/ [redis@artisan redis-5.0.3]$ [redis@artisan redis-5.0.3]$ cd src/[redis@artisan src]$ mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb ../bin整理完成后 如下
這里我們把redis安裝到redis用戶下(建議)
Redis 啟停
通過配置文件來啟動(建議)
redis‐server redis.conf停止Redis
pkill redis‐server kill 進程號 redis‐cli shutdown (建議)Redis Cluster 4.x VS Redis Cluster 5.x
Redis 5.0以前的版本 部署Redis Cluster 需要ruby腳本。 Redis 5.0以后的版本 直接使用 redis 官方提供的 redis cli即可完成集群的部署。
4.x版本的搭建請移步: Redis-21Redis集群模式-Centos6.5上3臺主機3主3從的配置及通過代碼訪問集群
這里我們討論5.x版本的集群部署
演進之路 ( Master/Slave— > Sentinel-----> Cluster )
主從 — > 哨兵 -----> Cluster
粗略的說下
2.8以前 ,Redis官方并沒有高可用框架, 主從模式的弊端非常明顯,從節點僅能作為數據備份,無法做到高可用,當主節點宕機以后,需要手動切換. 或者依賴第三方的框架,比如codis 等等
2.8 官方給出了 Sentinel模式,解決了主節點宕機,從節點自動提升并接管集群的功能
哨兵模式下,是中心化的,主節點的壓力大時,節點無法擴容
3.0 官方提供了Cluster模式,這樣數據就分片存儲,節點可擴容,這行一個節點寫的壓力就小了很多~
Sentinel VS Cluster
這里我們重點比對 Sentinel VS Cluster
哨兵模式Sentinel
redis3.0以前的版本要實現集群一般是借助哨兵sentinel工具來監控master節點的狀態,如果master節點異常,則會做主從切換,將某一臺slave作為master.
集群模式Cluster
redis集群是一個由多個主從節點群組成的分布式服務器群,它具有復制、高可用和分片特性.
Redis集群不需要sentinel哨兵也能完成節點移除和故障轉移的功能 .
需要將每個節點設置成集群模式,這種集群模式沒有中心節點,可水平擴展,據官方文檔稱可以線性擴展到上萬個節點(官方推薦不超過1000個節點)。
redis集群的性能和高可用性均優于之前版本的哨兵模式,且集群配置非常簡單.
Redis 5.x Cluster 搭建
PreView
redis集群需要至少要三個master節點.
我們這里搭建三個master節點,并且給每個master再搭建一個slave節點,3主3從,共6個redis節點。
虛擬機緊張,這里用三臺機器部署6個redis實例
ip ---------------------------- port
192.168.18.131 ---- 8001 | 8004
192.168.18.132 ---- 8002 | 8005
192.168.18.133 ---- 8003 | 8006
Step1 安裝單節點的redis
首先131 132 133 上按照 上面 Redis 5.x 單節點 編譯安裝 部署好 。
Step2 編寫redis cluster的配置文件
為了方便管理,我們 新建個目錄 redis-cluster , 在該目錄下 建立 之前規劃好的幾個端口
3臺主機都要操作 ,如下
130主機的操作
把 redis-5.0.3 中 etc目錄下的 redis.conf配置文件copy到8001 目錄
[redis@artisan ~]$ ls redis-5.0.3 redis-5.0.3.tar.gz redis-cluster [redis@artisan ~]$ cp redis-5.0.3/etc/redis.conf ./redis-cluster/8001 [redis@artisan ~]$ cd ./redis-cluster/8001 [redis@artisan 8001]$ ls redis.conf [redis@artisan 8001]$修改內容如下:
daemonize yes
port 8001(分別對每個機器的端口號進行設置)
dir /usr/local/redis‐cluster/8001/(指定數據文件存放位置,必須要指定不同的目錄位置,不然會丟失數據)
cluster‐enabled yes(啟動集群模式)
cluster‐config‐file nodes‐8001.conf(集群節點信息文件,這里800x最好和port對應上)
cluster‐node‐timeout 5000
# bind 127.0.0.1(去掉bind綁定訪問ip信息)
protected‐mode no (關閉保護模式)
appendonly yes
如果要設置密碼需要增加如下配置
這倆參數都要配置。
把修改后的配置文件,copy到8004,修改第2、3、5項里的端口號,批量替換
sed -i s/8001/8004/g redis.confStep3 其余兩臺重復第一臺的操作
另外兩臺機器也需要做上面幾步操作
第二臺機器用8002和8005
第三臺機器用8003和8006
[redis@artisan 8004]$ sed -i s/8001/8004/g redis.conf
Step4 啟動6個實例
分別啟動6個redis實例,然后檢查是否啟動成功
Step5 用redis‐cli創建整個redis集群
redis5以前的版本集群是依靠ruby腳本redis‐trib.rb實現 . 5.0以后的版本直接使用redi-cli即可。
redis-cli的幫助命令
[redis@artisan bin]$ ./redis-cli --help集群的幫助命令
[redis@artisan bin]$ ./redis-cli --cluster help Cluster Manager Commands:create host1:port1 ... hostN:portN--cluster-replicas <arg>check host:port--cluster-search-multiple-ownersinfo host:portfix host:port--cluster-search-multiple-ownersreshard host:port--cluster-from <arg>--cluster-to <arg>--cluster-slots <arg>--cluster-yes--cluster-timeout <arg>--cluster-pipeline <arg>--cluster-replacerebalance host:port--cluster-weight <node1=w1...nodeN=wN>--cluster-use-empty-masters--cluster-timeout <arg>--cluster-simulate--cluster-pipeline <arg>--cluster-threshold <arg>--cluster-replaceadd-node new_host:new_port existing_host:existing_port--cluster-slave--cluster-master-id <arg>del-node host:port node_idcall host:port command arg arg .. argset-timeout host:port millisecondsimport host:port--cluster-from <arg>--cluster-copy--cluster-replacehelp For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.[redis@artisan bin]$下面命令里的 1 代表為每個創建的主服務器節點創建一個從服務器節點
執行這條命令需要確認三臺機器之間的redis實例要能相互訪問,可以先簡單把所有機器防火墻關掉,如果不關閉防火墻則需要打開redis服務端口和集群節點gossip通信端口
CENTOS7 關閉防火墻
systemctl stop firewalld # 臨時關閉防火墻 systemctl disable firewalld # 禁止開機啟動 [redis@artisan bin]$ ./redis-cli -a artisan --cluster create --cluster-replicas 1 192.168.18.131:8001 192.168.18.131:8004 192.168.18.132:8002 192.168.18.132:8005 192.168.18.133:8003 192.168.18.133:8006 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. >>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 192.168.18.132:8005 to 192.168.18.131:8001 Adding replica 192.168.18.131:8004 to 192.168.18.132:8002 Adding replica 192.168.18.133:8006 to 192.168.18.133:8003 >>> Trying to optimize slaves allocation for anti-affinity [OK] Perfect anti-affinity obtained! M: 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 192.168.18.131:8001slots:[0-5460] (5461 slots) master S: c4083f856388cc73feb3223433d10500b5556abe 192.168.18.131:8004replicates 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b M: 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b 192.168.18.132:8002slots:[5461-10922] (5462 slots) master S: 3410ea1dd49144f5d02b59036641bde566f03ee0 192.168.18.132:8005replicates 80618eaa0de9524cf439294b7cb6df1a34d3ad22 M: 80618eaa0de9524cf439294b7cb6df1a34d3ad22 192.168.18.133:8003slots:[10923-16383] (5461 slots) master S: 3178d965b77e2967930d7ea6072cdb9d7e5ba8ef 192.168.18.133:8006replicates 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 Can I set the above configuration? (type 'yes' to accept):輸入 yes
>>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 192.168.18.132:8005 to 192.168.18.131:8001 Adding replica 192.168.18.131:8004 to 192.168.18.132:8002 Adding replica 192.168.18.133:8006 to 192.168.18.133:8003 >>> Trying to optimize slaves allocation for anti-affinity [OK] Perfect anti-affinity obtained! M: 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 192.168.18.131:8001slots:[0-5460] (5461 slots) master S: c4083f856388cc73feb3223433d10500b5556abe 192.168.18.131:8004replicates 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b M: 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b 192.168.18.132:8002slots:[5461-10922] (5462 slots) master S: 3410ea1dd49144f5d02b59036641bde566f03ee0 192.168.18.132:8005replicates 80618eaa0de9524cf439294b7cb6df1a34d3ad22 M: 80618eaa0de9524cf439294b7cb6df1a34d3ad22 192.168.18.133:8003slots:[10923-16383] (5461 slots) master S: 3178d965b77e2967930d7ea6072cdb9d7e5ba8ef 192.168.18.133:8006replicates 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 Can I set the above configuration? (type 'yes' to accept): 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.18.131:8001) M: 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 192.168.18.131:8001slots:[0-5460] (5461 slots) master1 additional replica(s) S: 3410ea1dd49144f5d02b59036641bde566f03ee0 192.168.18.132:8005slots: (0 slots) slavereplicates 80618eaa0de9524cf439294b7cb6df1a34d3ad22 M: 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b 192.168.18.132:8002slots:[5461-10922] (5462 slots) master1 additional replica(s) S: c4083f856388cc73feb3223433d10500b5556abe 192.168.18.131:8004slots: (0 slots) slavereplicates 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b M: 80618eaa0de9524cf439294b7cb6df1a34d3ad22 192.168.18.133:8003slots:[10923-16383] (5461 slots) master1 additional replica(s) S: 3178d965b77e2967930d7ea6072cdb9d7e5ba8ef 192.168.18.133:8006slots: (0 slots) slavereplicates 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [redis@artisan bin]$Step6 驗證集群
連接任意一個客戶端即可:./redis‐cli ‐c ‐h ‐p (‐a訪問服務端密碼,‐c表示集群模式,-h 指定ip地址 -p 端口號)
進行驗證: cluster info(查看集群信息)、cluster nodes(查看節點列表)
[redis@artisan bin]$ ./redis-cli -a artisan -c -h 192.168.18.131 -p 8001 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 192.168.18.131:8001> CLUSTER INFO cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:2777 cluster_stats_messages_pong_sent:2440 cluster_stats_messages_sent:5217 cluster_stats_messages_ping_received:2435 cluster_stats_messages_pong_received:2777 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:5217 192.168.18.131:8001> CLUSTER NODES 3410ea1dd49144f5d02b59036641bde566f03ee0 192.168.18.132:8005@18005 slave 80618eaa0de9524cf439294b7cb6df1a34d3ad22 0 1586663803774 5 connected 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b 192.168.18.132:8002@18002 master - 0 1586663804782 3 connected 5461-10922 c4083f856388cc73feb3223433d10500b5556abe 192.168.18.131:8004@18004 slave 9a6804a96f9351d3fd61ea1e4d7dd77976b4133b 0 1586663804580 3 connected 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 192.168.18.131:8001@18001 myself,master - 0 1586663802000 1 connected 0-5460 80618eaa0de9524cf439294b7cb6df1a34d3ad22 192.168.18.133:8003@18003 master - 0 1586663804000 5 connected 10923-16383 3178d965b77e2967930d7ea6072cdb9d7e5ba8ef 192.168.18.133:8006@18006 slave 6bff20d4d3564180cb8f4e623d1e0cd9f79b68e1 0 1586663804580 6 connected 192.168.18.131:8001>進行數據操作驗證
192.168.18.131:8001> set artisanKey artisanValue -> Redirected to slot [6941] located at 192.168.18.132:8002 OK 192.168.18.132:8002> get artisanKey "artisanValue"關閉集群則需要逐個進行關閉,使用命令
[redis@artisan bin]$ ./redis-cli -a artisan -c -h 192.168.18.131 -p 8001 shutdown至此,就搭建完畢了。
總結
以上是生活随笔為你收集整理的Redis进阶-5.x 单节点 及Redis Cluster 3主3从集群部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis进阶- Redisson分布式
- 下一篇: Redis进阶-Jedis以及Sprin