中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis數據庫群集

發布時間:2020-06-14 04:29:29 來源:網絡 閱讀:817 作者:筱振 欄目:系統運維

相信大家通過閱讀博文:非關系型數據庫NoSQL)——Redis安裝及部署詳解
可以初步的認識Redis數據庫的優勢及其安裝方法,今天我們來認識一下Redis數據庫怎么橫向擴展,以滿足更大的訪問需求。

Redis 3.0版本以上開始支持cluster,采用的是hash slot(hash 槽),可以將多個Redis實例整個在一起,形成一個群集,也就是將數據分散到群集的多個機器上。

Redis群集原理

Redis Cluster是一個無中心的結構,每個節點都保存數據和整個群集的狀態。每個節點都會保存其他節點的信息,知道其他節點鎖負責的槽,并且會與其他節點定時發送心跳信息,能夠及時感知群集中異常的節點。如圖:
Redis數據庫群集

當客戶端向群集中任一節點發送與數據庫鍵有關的命令是,接受命令的節點會計算出命令要處理的數據庫鍵屬于哪個槽,并檢查這個槽是否指派給了自己。如果鍵所在的槽正好指派給了當前節點,那么節點直接執行這個命令;如果鍵所在的槽并沒有指派給當前節點,那么節點會向客戶端返回一個MOVED錯誤,指引客戶端轉向正確的節點,并再次發送之前想要執行的命令。

群集角色有Master和Slave。Master之間分配slots,一共有16384個slot。Slave向它指定的Master同步數據,實現備份。當其中一個Master無法提供服務時,該Master的Slave將提升為Master。以保證群集鍵slot的完整性。當其中的某一個Master和它的Slave都失效,就會導致slot不完整,群集失效,這是就需要人工參與修復。

群集搭建好后,群集中的每個節點都會定期地想其他節點發送PING消息,如果接收PING消息的節點沒有在規定的時間內返回PONG消息,那么發送PING消息的節點就會將其標記為疑似下線(PFAIL)。各個節點會通過互相發送消息的方式來交換群集中各個節點的狀態信息。如果在一個群集里,半數以上的主節點都將某個節點 X 報告為疑似下線,那么這個主節點 X 將被標記為已下線(FAIL),同時會向群集廣播一條關于主節點 X 的FAIL消息,所有收到這條FAIL消息的節點都會立即將主節點 X 標記為已下線。

當需要減少或增加群集中的機器時,我們需要將已經指派給某個節點(源節點)的槽改為指派給另一個節點(目標節點),并且將相關槽所屬的鍵值對從源節點移動到目標節點。

Redis群集的重新分片操作是由Redis的群集管理軟件redis-trib負責執行的,不支持自動的分片,而且需要自己計算從哪些節點上遷移多少Slot。在重新分片的過程中,群集不需要下線,并且源節點和目標節點都可以繼續處理命令請求。

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

Redis-cluster選舉:

選舉過程是群集中所有master參與,如果半數以上master節點與當前master節點通信超時,認為當前master節點掛掉。如圖:
Redis數據庫群集

以下兩種情況出現則為群集不可用:

  • 如果群集任意master掛掉,且當前master沒有slave,則群集進入fail狀態,也可以理解為群集的slot映射【0-16383】不完整時進入的fail狀態;
  • 如果群集中出現半數的master掛掉,無論是否有slave,群集都進入fail狀態;
    當群集不可用時,所有對群集的操作都不可用,收到((error)CLUSTERDOWN The cluster is down)錯誤。

默認情況下,每個群集的節點都使用兩個TCP端口,一個是6379,一個是16379:

  • 6379端口服務于客戶端的連接;
  • 16379端口用于群集總線;
    即使用二進制協議的節點到節點通信通道。節點使用群集總線進行故障檢測,配置更新、故障轉移授權等。如果開啟了防火墻,需要開放這個端口(本次博文采用強制關閉防火墻)。

Redis群集部署

理解了Redis群集原理之后,搭建redis群集就變得非常簡單了。本次實驗采用6臺服務器搭建Redis群集,其中3臺為master,3臺為salve。6臺服務器的IP地址為192.168.1.1/24——192.168.1.6/24,服務器均為centos 7系統。這里就不上傳實驗拓補圖了。

Redis群集部署的具體操作步驟主要分為:

1.安裝Redis并修改配置文件

關于如何搭建Redis服務器及其軟件包獲取方式均可參考博文:非關系型數據庫(NoSQL)——Redis安裝及部署詳解
按照博文安裝即可,6臺服務器都需安裝Redis,安裝完成之后每臺服務器都需要修改為本機真實的IP地址,取消回環地址(127.0.0.1),具體修改內容如下:

[root@localhost ~]# vim /etc/redis/6379.conf 
bind 192.168.1.1                                     //改為本機的真是IP地址
daemonize yes
logfile /var/log/redis_6379.log
cluster-enabled yes                                //啟用群集
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
//關于群集這幾條默認是存在,只不過注釋了,取消注釋即可!
[root@localhost ~]# /etc/init.d/redis_6379 restart
//重啟redis服務
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost ~]# netstat -anpt | grep 6379
tcp        0      0 192.168.1.1:6379        0.0.0.0:*               LISTEN      6497/redis-server 1 
tcp        0      0 192.168.1.1:16379       0.0.0.0:*               LISTEN      6497/redis-server 1 
tcp        0      0 127.0.0.1:6379          127.0.0.1:43304         TIME_WAIT   -                   
//6379端口和16379端口都在監聽

第一個redis服務器已經搭建完畢,剩下5個一樣的做法,只是配置文件中都是自身的IP地址,別弄混了!

2.使用腳本創建群集

創建群集要用到ruby的一個腳本,在創建群集之前,需要先安裝ruby的運行環境和ruby的Redis客戶端,該操作在其中一臺服務器進行即可。gem命令是提前下載的redis-3.2.0 gem軟件包提供的,直接上傳服務器即可使用!
gem軟件包網盤鏈接:https://pan.baidu.com/s/1Fx7YI-ZwZoHOPm13HYeFKw
提取碼:cj0x

[root@localhost ~]# yum -y install ruby rubygems
//安裝ruby的運行環境
[root@localhost ~]# gem install redis --version 3.2.0
Successfully installed redis-3.2.0
Parsing documentation for redis-3.2.0
Installing ri documentation for redis-3.2.0
1 gem installed
//安裝ruby的Redis客戶端工具——gem命令

使用腳本創建群集:

[root@localhost ~]# cd /usr/src/redis-3.2.9/src
[root@localhost src]# ./redis-trib.rb create --replicas 1 192.168.1.1:6379 192.168.1.2:6379 192.168.1.3:6379 192.168.1.4:6379 192.168.1.5:6379 192.168.1.6:6379
                   …………                 //省略部分內容
Can I set the above configuration? (type 'yes' to accept): yes
                   …………                 //省略部分內容
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
//創建群集完成
[root@localhost src]# ./redis-trib.rb check 192.168.1.1:6379
//查看群集狀態(可以清楚的看到哪臺主機是master、哪臺主機時salve)
>>> Performing Cluster Check (using node 192.168.1.1:6379)
M: afb2a0876b9c4c1c19e2bc492e398765bed0a311 192.168.1.1:6379
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 00ed4b0da4f0444c7e2a54a44c2060dd2c51a19a 192.168.1.4:6379
   slots: (0 slots) slave
   replicates afb2a0876b9c4c1c19e2bc492e398765bed0a311
S: 081d87a0d26895605e4c237c5429d3ae6e01f7b2 192.168.1.5:6379
   slots: (0 slots) slave
   replicates 050d71e6ad9bbf0a2a90b743d5a9bb9fb77052bb
S: 00bf8cb3a48a696d9bfc4b124234335633dc14d0 192.168.1.6:6379
   slots: (0 slots) slave
   replicates bec4c3401ced5a43439568f5530d79dd2a911512
M: 050d71e6ad9bbf0a2a90b743d5a9bb9fb77052bb 192.168.1.2:6379
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
M: bec4c3401ced5a43439568f5530d79dd2a911512 192.168.1.3:6379
   slots:10923-16383 (5461 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.
3.測試群集

登錄群集,設置鍵值測試,需要用到“-c”參數來激活群集,具體操作如下:

[root@localhost ~]# redis-cli -h 192.168.1.1 -p 6379 -c
192.168.1.1:6379> set k1 1
-> Redirected to slot [12706] located at 192.168.1.3:6379
OK
192.168.1.3:6379> get k1
"1"

數據自動同步其redis服務器上,查看效果:

[root@localhost ~]# redis-cli -h 192.168.1.5 -p 6379 -c
192.168.1.5:6379> get k1
-> Redirected to slot [12706] located at 192.168.1.3:6379
"1"
//提示是從192.168.1.3服務器上同步過來的

實驗完成!!!

———————— 本文至此結束,感謝閱讀 ————————

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

图木舒克市| 荃湾区| 神农架林区| 勃利县| 宁化县| 乌拉特前旗| 平湖市| 伊宁市| 灵川县| 肥城市| 紫阳县| 武穴市| 图木舒克市| 九龙坡区| 利辛县| 马关县| 于都县| 西盟| 灌南县| 甘洛县| 武清区| 连江县| 东平县| 潼南县| 新龙县| 堆龙德庆县| 阿拉善盟| 吉安县| 连云港市| 崇义县| 临城县| 西乌珠穆沁旗| 沂水县| 新巴尔虎左旗| 洪湖市| 北安市| 塘沽区| 理塘县| 鄂伦春自治旗| 宽城| 井冈山市|