Redis主從同步叢集搭建
文章目錄
前言
- 通過之前的文章,我們瞭解到了redis的編譯安裝流程,以及配置優化內容。這裡,我們將深入講解redis群集的應用,並模擬主從redis服務叢集的搭建。
1.Redis群集概述
1.1 redis叢集的作用是什麼
- 在實驗部署開始前,我們需要明白為什麼需要搭建Redis叢集,其解決了什麼樣的問題?又有哪些優勢。我們可以從單一的Redis伺服器來探究這個問題。
1.2 單一Redis伺服器存在的問題
- 如果部署過MySQL主從複製讀寫分離以及MHA高可用的話,這裡就非常容易想到單一Redis伺服器所存在的問題,主要有以下幾點
存在單點故障;
不滿足高併發的需求;
資料丟失引發災難(容錯率非常低);
- 而解決這樣的問題,最容易想到的就是將儲存備份,且進行橫向擴充套件。這就需要我們搭建Redis叢集來滿足業務需求了。
1.3 Redis叢集介紹與優勢
- 簡介:
Redis叢集是一個提供在多個Redis間節點共享資料的程式集;
Redis叢集並不支援多處理多個Keys的命令,應為這需要在不同節點間移動資料,從而達不到像Redis那樣的效能,在高負載的情況下可能會導致不可預料的錯誤;
Redis叢集通過分割槽來提供一定程度的可用性,在實際環境中檔某個節點當機或則不可達的情況下繼續處理命令。
- 優勢:
自動分割資料到不同節點上;
整個叢集的部分節點失敗或不可達的情況下依舊可以處理業務指令。
1.4 Redis-Clouder叢集的資料分片
-
Redis叢集沒有使用一致性hash,而是引入了雜湊槽的概念;
-
Redis叢集總共有16384個雜湊槽(0-16383);
-
每個Key通過CRC16校驗後對16384取模來決定如何進行存放;
-
叢集的每個節點負責一部分的hash槽;
-
在Redis叢集中,支援新增或者刪除節點,且無需停止服務。
Redis-Cluster資料分片詳解,以3個節點組成的叢集為例
節點A包含0到5500號雜湊槽
節點B包含5501到11000號雜湊槽
節點C包含11001到16384號雜湊槽
支援新增或者刪除節點,新增刪除節點無需停止服務
例如
如果想新新增個節點D,需要移動節點A,B,C中的部分槽到D上
如果想移除節點A,需要將A中的槽移到B和C節點上,再將沒有任何槽的A節點從叢集中移除
1.5 Redis-Cluster的主從複製模型
叢集中具有A,B,C三個節點,如果節點B失敗了,整個叢集就會因缺少這個範圍的槽而不可用
為每個節點新增一個從節點A1, B1, C1,整個叢集便有三個master節點和三個slave節點組成,在節點B失敗後,叢集便會選舉B1為新的主節點繼續服務
當A和A1都失敗後,叢集將不可用
2.搭建Redis主從同步
2.1 案例拓撲圖及環境
專案環境
master1 192.168.140.20
master2 192.168.140.21
master3 192.168.140.22
slvae1 92.168.140.13
slvae2 92.168.140.14
slvae3 92.168.140.15
2.2 專案操作
-
在所有節點上設定網路引數、關閉防火牆和selinux
-
在所有節點上下載並安裝Redis
-
在所有節點上修改Redis配置檔案
-
建立Redis叢集(在master1節點)
建立叢集步驟
1)匯入key檔案並安裝rvm
2)執行環境變數讓其生效
3)安裝Ruby2.4. 1版本
4)安裝redis客戶端
5)建立redis叢集
2.3 具體實現步驟
- 每臺伺服器匯入redis軟體包
傳送鍵輸入到所有會話,即在每臺伺服器上均進行以下配置
1)解壓
tar zxvf redis-5.0.4.tar.gz
2)配置安裝
cd redis-5.0.4/
make
make PREFIX=/usr/local/redis install
3)連結快捷命令
ln -s /usr/local/redis/bin/* /usr/local/bin/
4)安裝執行指令碼,並檢視埠狀態
cd redis-5.0.4/utils/
./install_server.sh
netstat -anptu | grep redis
5)修改主配置檔案,並啟動服務
[root@master1 ~]# vi /etc/redis/6379.conf
...
bind 192.168.140.20 //修改127.0.0.1為本機地址 (6臺伺服器均需單獨更改IP)
cluster-enabled yes
appendonly yes //開啟AOF持久化
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
cluster-require-full-coverage yes
重啟redis服務
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start
6)在master1上,使用指令碼建立群集
- 首先新增redis-3.2.0.gem
- yum安裝軟體
[root@master1 ~]# yum -y install ruby rubygems
[root@master1 ~]# gem install redis-3.2.0.gem
- 建立群集
[root@master1 ~]# redis-cli --cluster create --cluster-replicas 1 \
192.168.140.20:6379 192.168.140.21:6379 192.168.140.22:6379 \
192.168.140.13:6379 192.168.140.14:6379 192.168.140.15:6379
>>> 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.140.14:6379 to 192.168.140.20:6379
Adding replica 192.168.140.15:6379 to 192.168.140.21:6379
Adding replica 192.168.140.13:6379 to 192.168.140.22:6379
M: b32bddc815edec59943aef28275b073925f3bf6c 192.168.140.20:6379
slots:[0-5460] (5461 slots) master
M: 7ab1a75dbac2dd91be898874895c636d2fa3b790 192.168.140.21:6379
slots:[5461-10922] (5462 slots) master
M: 440c768ed0378686f347244bf37d6e5adb191401 192.168.140.22:6379
slots:[10923-16383] (5461 slots) master
S: 550f265ad5d2714a20731cbd7cd8a61e826da443 192.168.140.13:6379
replicates 440c768ed0378686f347244bf37d6e5adb191401
S: 4b8052a36136df43078db53c7d472b4acc848dcb 192.168.140.14:6379
replicates b32bddc815edec59943aef28275b073925f3bf6c
S: c3f7dc4e4c17c385fdad4af782100266d2c691e2 192.168.140.15:6379
replicates 7ab1a75dbac2dd91be898874895c636d2fa3b790
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.140.20:6379)
M: b32bddc815edec59943aef28275b073925f3bf6c 192.168.140.20:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 440c768ed0378686f347244bf37d6e5adb191401 192.168.140.22:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 7ab1a75dbac2dd91be898874895c636d2fa3b790 192.168.140.21:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 4b8052a36136df43078db53c7d472b4acc848dcb 192.168.140.14:6379
slots: (0 slots) slave
replicates b32bddc815edec59943aef28275b073925f3bf6c
S: 550f265ad5d2714a20731cbd7cd8a61e826da443 192.168.140.13:6379
slots: (0 slots) slave
replicates 440c768ed0378686f347244bf37d6e5adb191401
S: c3f7dc4e4c17c385fdad4af782100266d2c691e2 192.168.140.15:6379
slots: (0 slots) slave
replicates 7ab1a75dbac2dd91be898874895c636d2fa3b790
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
2.4 測試群集
- 登入並寫入資料
[root@master1 ~]# redis-cli -h 192.168.140.20 -p 6379 -c //登入伺服器
192.168.140.20:6379> set weather sunny //新增weather鍵值為sunny
-> Redirected to slot [8949] located at 192.168.140.21:6379
OK
- 在其他伺服器上獲取該資料
[root@master3 ~]# redis-cli -h 192.168.140.22 -p 6379 -c //登入伺服器
192.168.140.22:6379> get weather
-> Redirected to slot [8949] located at 192.168.140.21:6379 //提示儲存該鍵值的雜湊槽為8949,定位到該伺服器上
"sunny"
[root@master2 ~]# redis-cli -h 192.168.140.21 -p 6379 -c //登入伺服器
192.168.140.21:6379> get weather
"sunny"
[root@slave1 ~]# redis-cli -h 192.168.140.13 -p 6379 -c
192.168.140.13:6379> get weather
-> Redirected to slot [8949] located at 192.168.140.21:6379
"sunny"
- 當在備選slave伺服器上新增資訊時
[root@slave1 ~]# redis-cli -h 192.168.140.13 -p 6379 -c
192.168.140.13:6379> set centos 7.5
-> Redirected to slot [467] located at 192.168.140.20:6379 //提示儲存該鍵值的雜湊槽為467,定位到master1伺服器
OK
[root@master1 ~]# redis-cli -h 192.168.140.20 -p 6379 -c
192.168.140.20:6379> get centos //獲取centos的鍵值
"7.5"
- 在任意伺服器上可以檢視群集
登入到伺服器上後
cluster info 檢視群集資訊
cluster nodes 檢視節點資訊
相關文章
- 基於Dokcer搭建Redis叢集(主從叢集)Redis
- Redis叢集搭建 三主三從Redis
- Redis叢集搭建(三主三從)Redis
- Redis搭建主從複製、哨兵叢集Redis
- linux系統——Redis叢集搭建(主從+哨兵模式)LinuxRedis模式
- 基於docker環境下搭建redis主從叢集DockerRedis
- redis主從叢集搭建及容災部署(哨兵sentinel)Redis
- Redis高可用-主從,哨兵,叢集Redis
- redis原理及叢集主從配置Redis
- RocketMQ雙主雙從叢集搭建MQ
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- Redis叢集的主從切換研究Redis
- (八)Redis 主從複製、切片叢集Redis
- 【Redis】Redis叢集主從調整演算法Redis演算法
- 搭建 Redis 叢集Redis
- redis叢集搭建Redis
- 搭建Redis“主-從-從”模式叢集並使用 RedisTemplate 實現讀寫分離Redis模式
- Redis學習筆記七:主從叢集Redis筆記
- Redis主從同步Redis主從同步
- Redis(5.0) 叢集搭建Redis
- 搭建Redis原生叢集Redis
- Redis--叢集搭建Redis
- 搭建redis cluster叢集Redis
- redis叢集的搭建Redis
- redis 4.0.11 叢集搭建Redis
- Docker搭建Redis叢集DockerRedis
- Docker Compose搭建MySQL主從複製叢集DockerMySql
- RocketMQ4.7.1雙主雙從叢集搭建MQ
- Redis的主從複製,哨兵和Cluster叢集Redis
- Redis三種高可用模式:主從、哨兵、叢集Redis模式
- 三千字介紹Redis主從+哨兵+叢集Redis
- 搭建Redis簡易叢集實現主從複製和讀寫分離Redis
- Redis主從搭建Redis
- Redis 5.02官方叢集搭建Redis
- Redis5.0.10叢集搭建Redis
- Redis4.0.12叢集搭建Redis
- Redis資料型別, Redis主從哨兵和叢集(將資料匯入叢集) ubuntu使用Redis資料型別Ubuntu
- MySQL叢集搭建(1)-主備搭建MySql