生產環境redis單機、主從、哨兵、集群、集群擴容、縮容架構的搭建


前言

  因為本文章涉及到集群的搭建,因此至少需要六台機器,這里有條件的可以購買阿里雲、百度雲、騰訊雲等輕量級雲服務器(新人很便宜),無條件的可以自己搭建多台虛擬機實例,同時多台實例建議使用相同鏡像環境,博主這里使用的是CentOS 7.6(小版本不影響,例如7.5,7.6,7.8),以下列出我所使用的ip。

  ip: 124.221.237.87

  ip: 124.221.246.23

  ip: 121.4.218.158

  ip:  47.103.10.99

  ip:  180.76.177.17

  ip: 124.221.239.69

1. redis單機架構搭建

1.1 gcc環境安裝

  准備一台機器(ip: 124.221.237.87),使用遠程連接工具連接完成后,若環境沒安裝gcc,進行安裝。

yum install gcc 

1.2 下載安裝

  使用wget下載redis 5.0.3版本,並解壓,然后刪除壓縮文件。  

cd /usr/local/ 
wget http://download.redis.io/releases/redis-5.0.3.tar.gz 
tar xzf redis-5.0.3.tar.gz  
rm -rf redis-5.0.3.tar.gz 

1.3 進入到解壓好的redis‐5.0.3目錄下,進行編譯與安裝。

cd redis-5.0.3 
make 

1.4 修改配置

vim redis.conf 
# 將以下三個配置進行修改
daemonize yes #后台啟動
protected‐mode no #關閉保護模式,開啟的話,只有本機才可以訪問redis #bind 127.0.0.1 #需要注釋掉bind,bind綁定的是自己機器網卡的ip,如果有多塊網卡可以配多個ip,代表允許客戶端通過機器的哪些網卡ip去訪問,內網一般可以不配置bind,注釋掉即可
requirepass TXB@cxf123456! #設置redis啟動密碼(注意:我實際設置的並非此密碼)

 1.5 啟動redis

src/redis-server redis.conf 
ps -ef | grep redis #驗證是否啟動成功,若出現下圖所示即啟動成功 

1.6 進入、退出客戶端

src/redis-cli # 進入客戶端 
auth TXB@cxf123466! #如果不輸入密碼無法操作 
quit # 退出客戶端 

1.7 開放雲服務器安全組

  安全組必須要開放你所配置的redis端口,否則將會被攔截。

  使用連接工具連接信息如下:

 2. redis主從架構搭建

2.1 環境准備

  准備三台機器(ip: 124.221.237.87,ip:124.221.239.69,ip:121.4.218.158),按照單機架構相同的方式先搭建三台單機架構的redis。從節點的配置再添加2.2)。

2.2 配置從節點環境

  在與單機相同的配置下從節點加上以下配置。

replicaof 124.221.237.87 6379 #從124.221.237.87的6379的redis實例復制數據,Redis 5.0之前使用slaveof
replica‐read‐only yes #配置從節點只讀  
masterauth TXB@cxf123456! #主從認證密碼,否則主從不能同步 

2.3 查看主從架構信息

  進入主節點客戶端環境后輸入以下命令查看環境。

info replication #查看redis主從信息,出現以下從節點信息即配置成功 

   同時進入從節點輸入相同命令可出現以下信息。

 2.4 驗證主從是否配置成功

  在主節點寫入set字符串,檢測從節點是否存在。

set txb 123456 # 主節點寫入 
get txb #在從節點獲取剛才寫入的值,如果能獲取得到說明配置成功 

  之后將IP為121.4.218.158的服務器做從節點的相同配置。

   注:如果要配置多個從節點,每一個都做相同配置即可,同時記得每個服務器redis使用端口都加入安全組。

 3. redis哨兵架構搭建

3.1 環境准備

  准備三台機器(ip: 124.221.237.87,ip:124.221.239.69,ip:121.4.218.158),按照主從架構相同的方式先搭建三台架構的redis,同時開啟安全組的26379的端口


3.2 添加哨兵配置文件

cd /usr/local/redis-5.0.3/ 
vim sentinel.conf #修改哨兵配置文件如下 
daemonize yes
sentinel monitor mymaster 124.221.237.87 6379 2 # mymaster這個名字隨便取,客戶端訪問時會用到,ip為主節點的ip
sentinel auth-pass mymaster TXB@cxf123456! #設置訪問主節點的密碼
sentinel announce-ip 124.221.237.87 #sentinel-announce-ip 一定要配置,不然sentinel之間通信使用的是內網地址,無法通信,導致集群通信異常,master故障切換會失敗
sentinel announce-port 26379

3.3 啟動sentinel哨兵實例

src/redis‐sentinel sentinel.conf 
src/redis‐cli ‐p 26379 #連接客戶端 

  之后,將剩下兩台服務器做相同配置即可。

info #查看sentinel的info信息,可以看到Sentinel的info里已經識別出了redis的主從與哨兵 

  同時通過以下命令也可測試是否哨兵環境搭建成功。

cat /usr/local/redis-5.0.3/sentinel.conf 

   其中sentinel known‐replica mymaster 124.221.239.69 6379 #代表主節點的從節點信息

  sentinel known‐sentinel mymaster 172.17.0.15 26379 5b2da10eff43d38b2c4398c7b108de58837839dc #代表感知到的其它哨兵節點

3.4 哨兵架構在Spring Boot項目中的使用

  項目代碼以及講解如下所示:

  鏈接:https://pan.baidu.com/s/12n_S7Ol1vQaY0YjKs10B2w

  提取碼:txbq

  在該項目中,使用while循環往redis哨兵架構中一直寫入數據,在操作成功后,我們將主節點給手動kill掉進程,看看redis哨兵是否能幫我們繼續選舉出新的master節點。                           

   

  由上圖可見,redis循環設置值成功,此時我們將主節點的redis進程殺死。   

  我們發現程序報錯了,無法連接上redis。

  但是過了一會我們發現程序又繼續連接上,而且連接的節點變成了124.221.239.69,此時使用 info replication命令查看信息發現master_host確實變成了124.221.239.69,至此哨兵結構搭建完成。

 4. 集群架構搭建

4.1 集群環境准備

  redis集群需要至少三個master節點,我們這里搭建三個master節點,並且給每個master再搭建一個slave節點,總共6個redis節點,這里用三台機器部署6個redis實例,每台機器一主一從,因此我們將使用前言中給出的六台服務器,同時添加安全組的16379端口

4.2 修改配置文件

  在單機模式的配置文件中再追加以下配置:

cluster‐enabled yes #啟動集群模式
cluster‐config‐file nodes‐6379.conf #集群節點信息文件
cluster‐node‐timeout 10000 #集群連接超時時間
appendonly yes #開啟AOF持久化 
cluster-announce-ip 124.221.237.87 # 集群節點 IP,這里需要特別注意一下,如果要對外提供訪問功能,需要填寫宿主機的IP
cluster-announce-port 6379 #集群節點映射端口
cluster-announce-bus-port 16379 # 集群節點總線端口 

配置完成后,分別啟動六台redis實例,並檢查redis是否啟動成功。

 ps -ef | grep redis 

   可以看出redis以集群的方式已啟動。

4.3 創建redis集群

   從以上信息可看出redis預備創建集群的節點信息,其中M為主節點,S為從節點,輸入yes確定創建。

  由上可見,集群已分配成功分為三主三從948fd140cda364778e694b5d4c18acf016f3178c 124.221.237.87:6379 slots:[0-5460] (5461 slots) master 1 additional replica(s)

948fd140cda364778e694b5d4c18acf016f3178c為該節點在集群中的唯一id,slots:[0-5460] (5461 slots)代表0-5460這5461個槽位落在該節點上。redis在寫入程序時會經過hash運算,最終判斷由哪個節點存 儲數據。

4.4 驗證集群

  連接任意一個客戶端即可:./redis‐cli ‐c ‐h ‐p (‐a訪問服務端密碼,‐c表示集群模式,指定ip地址 和端口號)

src/redis-cli -a TXB@cxf123456! -c -h 124.221.237.87 -p 6379 
cluster info # 查看集群信息 
cluster nodes #查看集群節點信息 

   由此上信息可知,大功告成,代表集群已建立成功。

   在124.221.237.87主機中設置txb1的值發現經過hash運算其落在12823這個槽位,因此自動為我們切換到124.221.246.23這個主機。

4.5 Redis的Cluster架構在Spring Boot中的使用

  代碼以及講解如下所示:

  yml按照上述配置進行配置即可,其中lettuce這一塊內容后面有空會出一期博客講解。

   訪問成功,而且不同的key落在不同的集群節點上,具體如下。

      

 5. Cluster的擴容、縮容操作

5.1 環境准備

    這里我們再在上述集群的基礎上再增加一主一從的結構,因此我們還需要兩台服務器(ip:121.4.214.68, ip:124.221.243.252 ),同時開放這兩台機器的6379端口與16379端口,然后按照4.2配置啟動單個redis實例。

5.2 添加集群節點

src/redis-cli -a TXB@cxf123456! --cluster add-node 124.221.243.252:6379 124.221.237.87:6379 

   說明:前面的ip:port為新增加的ip端口,后面的ip:port為之前存在的ip端口,當出現New node added correctly即為添加成功。

  進入客戶端查看集群情況。

src/redis-cli -a TXB@cxf123456! -c -h 124.221.237.87 -p 6379 
 cluster nodes 

  信息如下,可以看出124.221.243.252已經加入集群,但是並未給其分配插槽,所以該節點目前也無數據。


   我們需要為新節點手工分配hash槽位。

src/redis-cli -a TXB@cxf123456! --cluster reshard 124.221.237.87:6379 

   需要多少個槽移動到新的節點上,自己設置,比如600個hash槽。

   把這600個hash槽移動到哪個節點上去,需要指定節點id,這里指定剛配置的節點。

   其中輸入all為從所有主節點中分別抽取相應的槽數指定到新節點中,抽取的總槽數為600個。

   輸入yes確認開始執行分片任務。

  我們再進入客戶端查看集群分片情況如下。

   我們可以看到新加的節點中為其分配了0-198,5461-5661 10923-11121這600的槽位,至此新增主節點成功,我們再來新增從節點。

   按照新增第一個節點的方式先將節點添加入集群。

src/redis-cli -a TXB@cxf123456! --cluster add-node 121.4.214.68:6379 124.221.237.87:6379 

  進入該節點的客戶端

src/redis-cli -a TXB@cxf123456! -c -h 121.4.214.68 -p 6379 

  查看集群節點信息

  此處依然是未分配節點的主節點信息,我們需要執行replicate命令來指定當前節點(從節點)的主節點id為哪個,首先需要連接新加的121.4.214.68節點的客戶端,然后使用集群命令進行 操作,把當前的從節點指定到一個主節點下(這里使用之前創建的124.221.243.252主節點)。

cluster replicate 5f8fa2af74cfcd0c0a13bb6c512b80b48403c791 #后面的id為新增主節點的id 

 

  由上看出該節點已變成124.221.243.252的從節點,至此集群擴容結束。

5.3 刪除集群節點

  刪除節點需要先刪除從節點,再刪除主節點。

src/redis-cli -a TXB@cxf123456! --cluster del-node 121.4.214.68:6379 96b6ad28c1344006b3eb6352ab507c2c2471da0c 

   ip:port后面的id為當前節點id。

   由此可見從節點刪除成功,接下來刪除主節點,刪除主節點比較麻煩,因為主節點中分配了Hash槽位,我們需要先將hash槽位歸還。

src/redis-cli -a TXB@cxf123456! --cluster reshard 124.221.243.252:6379 

   需要移動多少節點?這里輸入600,因為我們剛才分配了600個節點。

   用什么節點id來接收他? 這里輸入一個其他主節點的id。

   這里是需要數據源,也就是我們的新加主節點節點id,然后輸入done開始生成歸還Hash槽位計划。

   輸入yes,開始歸還Hash槽位。

   歸還成功后,該節點沒有Hash槽位了,然后刪除其節點就行了。

 src/redis-cli -a TXB@cxf123456! --cluster del-node 124.221.243.252:6379 5f8fa2af74cfcd0c0a13bb6c512b80b48403c791 

  ip:port后面的id為需要刪除節點的id。

   再查看節點信息如下,只剩六個節點了,至此Cluster的縮容結束。美滋滋。

   不用docker等容器安裝相對麻煩,但只有如此才能更加深刻的理解其中的奧秘,后續會出一份docker安裝的博客。

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM