日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis Cluster高可用(HA)集群环境搭建详细步骤

發布時間:2024/1/17 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis Cluster高可用(HA)集群环境搭建详细步骤 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.為什么要有集群
由于Redis主從復制架構每個數據庫都要保存整個集群中的所有數據,容易形成木桶效應,所以Redis3.0之后的版本添加特性就是集群(Cluster)

2.Redis集群架構說明

架構細節:
(1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.
(2)節點的fail是通過集群中超過半數的master節點檢測失效時才生效.
(3)客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接集群所有節點,連接集群中任何一個可用節點即可
(4)redis-cluster把所有的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->key

3.Redis Cluster環境搭建
3.1 分別修改配置文件,將端口分別設置為:6379、6380、6381,同時要設置pidfile文件為不同的路徑。并且允許集群模式,修改集群配置文件指向地址,并且開啟遠程訪問

修改配置文件 #?vim?/opt/redis/6379/6379.conf#?開啟守護進程模式 daemonize?yes#?修改啟動端口為6379 port?6379#?修改pidfile指向路徑 pidfile?/opt/redis/6379/redis_6379.pid#?開啟允許集群? cluster-enabled?yes#?修改集群配置文件指向路徑 cluster-config-file?nodes-6379.conf#?注釋一下內容開啟遠程訪問 #?bind?127.0.0.1?端口不用放開 #aof開啟appendonly?yes #?關閉保護模式 #protected-mode?no 以此類推,修改端口6380及6381配置。

3.2 分別啟動redis實例

#?cd?/opt/redis/redis-3.2.8/bin #?./redis-server?/opt/redis/6379/6379.conf? #?./redis-server?/opt/redis/6380/6380.conf????? #?./redis-server?/opt/redis/6381/6381.conf

3.3 查看redis狀態

說明redis已經是以集群方式啟動了,但是redis之間關系還沒確定下來

3.4 因為redis-trib.rb是由ruby語言編寫的所以需要安裝ruby環境

安裝ruby環境 #?yum?-y?install?zlib?ruby?rubygems#gem?install?redis 報異常:解決 https://www.cnblogs.com/PatrickLiu/p/8454579.html

3.5 建立集群Redis關系

首先,進入redis的安裝包路徑下 #?cd?/opt/redis/redis-3.2.8/src執行命令: #?./redis-trib.rb?create?--replicas?0?192.168.29.128:6379?192.168.29.128:6380?192.168.29.128:6381說明:--replicas?0:指定了從數據的數量為0 注意:這里不能使用127.0.0.1,否則在Jedis客戶端使用時無法連接到!

3.6 如果出現如下異常

sr/local/share/gems/gems/redis-3.2.1/lib/redis/client.rb:113:in?`call':?ERR?Slot?0?is?already?busy?(Redis::CommandError)from?/usr/local/share/gems/gems/redis-3.2.1/lib/redis.rb:2556:in?`block?in?method_missing'from?/usr/local/share/gems/gems/redis-3.2.1/lib/redis.rb:37:in?`block?in?synchronize'from?/usr/share/ruby/monitor.rb:211:in?`mon_synchronize'from?/usr/local/share/gems/gems/redis-3.2.1/lib/redis.rb:37:in?`synchronize'from?/usr/local/share/gems/gems/redis-3.2.1/lib/redis.rb:2555:in?`method_missing'from?./redis-trib.rb:212:in?`flush_node_config'from?./redis-trib.rb:776:in?`block?in?flush_nodes_config'from?./redis-trib.rb:775:in?`each'from?./redis-trib.rb:775:in?`flush_nodes_config'from?./redis-trib.rb:1296:in?`create_cluster_cmd'from?./redis-trib.rb:1701:in?`<main>'

經檢查,這是由于上一次配置集群失敗時留下的配置信息導致的。 只要把redis.conf中定義的 cluster-config-file 所在的文件刪除,重新啟動redis-server及運行redis-trib即可。

3.7 建立集群Redis關系正常執行響應如下

>>>?Creating?cluster >>>?Performing?hash?slots?allocation?on?3?nodes... Using?3?masters: 192.168.29.128:6379 192.168.29.128:6380 192.168.29.128:6381 M:?d5d0951bb185a67a44d29dd2142170dbce84d977?192.168.29.128:6379slots:0-5460?(5461?slots)?master M:?e41fe58ef571836d891656b482307628b3f7ab35?192.168.29.128:6380slots:5461-10922?(5462?slots)?master M:?ddbc810661f81500059e0b22b1550713a0e3766d?192.168.29.128:6381slots:10923-16383?(5461?slots)?master 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.29.128:6379) M:?d5d0951bb185a67a44d29dd2142170dbce84d977?192.168.29.128:6379slots:0-5460?(5461?slots)?master0?additional?replica(s) M:?ddbc810661f81500059e0b22b1550713a0e3766d?192.168.29.128:6381slots:10923-16383?(5461?slots)?master0?additional?replica(s) M:?e41fe58ef571836d891656b482307628b3f7ab35?192.168.29.128:6380slots:5461-10922?(5462?slots)?master0?additional?replica(s) [OK]?All?nodes?agree?about?slots?configuration. >>>?Check?for?open?slots... >>>?Check?slots?coverage... [OK]?All?16384?slots?covered. 成功***************************************************************************** 注:redis集群?Waiting?for?the?cluster?to?join?一直等待 ./redis-trib.rb?create?--replicas?1?XXXX:PORT1?XXXX:PORT2?.... 的時候 一直等待?Waiting?for?the?cluster?to?join?很久都沒有反應 原因: redis集群不僅需要開通redis客戶端連接的端口,而且需要開通集群總線端口 集群總線端口為redis客戶端連接的端口?+?10000 如redis端口為6379 則集群總線端口為16379 故,所有服務器的點需要開通redis的客戶端連接端口和集群總線端口 注意:iptables?放開,如果有安全組,也要放開這兩個端口 *******************************************************************************

3.8 查看集群節點信息

3.9 測試
3.9.1 測試插入數據
因為abc的hash槽信息是在6380上,現在使用redis-cli連接的6379,無法完成set操作,需要客戶端跟蹤重定向。使用redis-cli -c

3.9.2 重新測試插入數據

4. 插槽的概念及插槽分配
整個Redis提供了16384個插槽,也就是說集群中的每個節點分得的插槽數總和為16384。./redis-trib.rb 腳本實現了是將16384個插槽平均分配給了N個節點。當我們執行set abc 123命令時,redis是如何將數據保存到集群中的呢?執行步驟:

i.接收命令set?abc?123ii.通過key(abc)計算出插槽值,然后根據插槽值找到對應的節點。abc的插槽值為:7638iii.重定向到該節點執行命令123

注意:如果插槽數有部分是沒有指定到節點的,那么這部分插槽所對應的key將不能使用。

5.新增集群節點
5.1 再開啟一個實例的端口為6382 配置同上

5.2 執行腳本建立6382節點與集群的關系

5.3 查看集群狀態,發現新增的節點沒有插槽

5.4 給6382節點分配插槽

5.5 查看集群節點狀態

6.刪除集群節點
想要刪除集群節點中的某一個節點,需要嚴格執行2步:

6.1.將這個節點上的所有插槽轉移到其他節點上
6.1.1執行腳本:./redis-trib.rb reshard 192.168.29.128:6382

6.1.2選擇需要轉移的插槽的數量,因為6382有100個,所以轉移100個

6.1.3輸入轉移的節點的id,我們轉移到6379節點

6.1.4輸入插槽來源id,也就是6382的id

6.1.5輸入done,開始轉移

6.1.6查看集群節點信息,可以看到6380節點已經沒有插槽了

6.2.刪除節點
6.2.1 刪除節點

6.2.2 查看集群節點信息

7. Redis Cluster高可用
7.1 假設集群中某一節點宕機 測試數據寫入操作

我們嘗試執行set命令,結果發現無法執,行集群不可用了?? 這集群也太弱了吧??

7.2 集群中的主從復制架構

7.3 本教程不詳細介紹集群中主從復制架構的具體安裝,只提一下過程

7.3.1 為每個集群節點添加Slave,形成主從復制架構,主從復制架構可參考:主從復制架構,搭建結構如下所示

6379(Master)?????6479(Slave?of?6379)?????6579(Slave?of?6379) 6380(Master)?????6480(Slave?of?6380)?????6580(Slave?of?6380) 6381(Master)?????6481(Slave?of?6381)?????6581(Slave?of?6381)

7.3.2 為每個主從復制架構添加哨兵集群,哨兵模式集群可參考:哨兵模式集群

7.3.3 創建集群 使用如下命令

./redis-trib.rb?create?--replicas?2?192.168.29.128:6379?192.168.29.128:6380?192.168.29.128:6381?192.168.29.128:6479?192.168.29.128:6480?192.168.29.128:6481?192.168.29.128:6579?192.168.29.128:6580?192.168.29.128:6581

參考:

https://blog.csdn.net/robertohuang/article/details/70833231

轉載于:https://blog.51cto.com/4925054/2090841

總結

以上是生活随笔為你收集整理的Redis Cluster高可用(HA)集群环境搭建详细步骤的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。