Redis搭建主從複製、哨兵叢集
Redis搭建主從複製、哨兵叢集
相關:
主從複製搭建
主從複製架構僅僅用來解決資料的冗餘備份,從節點僅僅用來同步資料
無法解決master(主節點)出現故障的自動故障轉移
主從複製架構圖:
準備三臺機器並修改對應的配置檔案
由於我沒有三臺機器,故在單臺機上開啟三個redis服務來模擬主從複製
- 準備三份配置檔案,修改對應的配置
- master
port 6379 #指定埠號
bind 0.0.0.0 #允許任意遠端連線
- slave1
port 6380
bind 0.0.0.0
slaveof masterip masterport # slaveof 192.xxx.xx.xxx 6379
- slave2
port 6381
bind 0.0.0.0
slaveof masterip masterport # slaveof 192.xxx.xx.xxx 6379
從節點的指定在配置檔案中的位置如下:
2.啟動三臺機器進行測試
- cd /usr/redis/bin
- ./redis-server /root/master/redis.conf
- ./redis-server /root/slave1/redis.conf
- ./redis-server /root/slave2/redis.conf
如果搭建成功,你在master可以進行寫操作,在從節點可以看到資料都會進行同步,但是從節點無法進行寫操作!
啟用哨兵機制
哨兵機制是在主從複製的基礎上進行的
Sentinel(哨兵)是Redis 的高可用性解決方案:由一個或多個Sentinel 例項 組成的Sentinel 系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,並在被監視的主伺服器進入下線狀態時,自動將下線主伺服器屬下的某個從伺服器升級為新的主伺服器。簡單的說哨兵就是帶有自動故障轉移功能的主從架構。
哨兵架構原理圖:
1.在主節點上建立哨兵配置
- 在Master對應redis.conf同目錄下新建sentinel.conf檔案,名字絕對不能錯;
2.配置哨兵,在sentinel.conf檔案中填入內容:
sentinel monitor [被監控資料庫名字(自定義)] [ip] [port] [指明哪個資料庫]
# sentinel monitor mymaster 192.xxx.xx.xxx 6379 1
3.啟動哨兵模式進行測試
./redis-sentinel /root/sentinel/sentinel.conf
啟動哨兵後會顯示該哨兵的埠號
如果哨兵機制成功執行,你將master服務當機(CTRL + C)後,可以發現會有新的master被推舉上任,在原master節點恢復後,會成為新master節點的從節點
通過springboot操作哨兵:
spring.redis.sentinel.master=mymaster #master書寫是使用哨兵監聽的那個名稱
spring.redis.sentinel.nodes=192.168.202.206:26379 #連線的不再是一個具體redis主機,書寫的是多個哨兵節點
注意:如果連線過程中出現如下錯誤:RedisConnectionException: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command ‘CONFIG SET protected-mode no’ from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2)
解決方案:在哨兵的配置檔案中加入bind 0.0.0.0 開啟遠端連線許可權
叢集搭建
Redis在3.0後開始支援Cluster(模式)模式,目前redis的叢集支援節點的自動發現,支援slave-master選舉和容錯,支援線上分片(sharding shard )等特性
叢集架構圖與細節:
- 所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位制協議優化傳輸速度和頻寬.
- 各自的節點可以主從複製節點與哨兵機制
- 節點的fail是通過叢集中超過半數的節點檢測失效時才生效. 當一個節點當機後,如果哨兵沒能即使處理,會被踢出叢集
- 客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連線叢集所有節點,連線叢集中任何一個可用節點即可
- redis-cluster把所有的物理節點對映到[0-16383]slot(槽)上
關於槽:叢集負載均衡的一種策略
1.準備環境安裝ruby以及redis叢集依賴
yum install -y ruby rubygems #安裝ruby環境與依賴
# ...
# 到網際網路下載redis-xxx.gem到虛擬機器 xxx表示你的redis版本
# ...
gem install redis-xxx.gem #通過gem安裝
2.在一臺機器建立7個目錄
由於叢集最少需要6個節點(3主3從),我們另外加一個節點用來訪問
7001 ~ 7006代表我們的叢集
3.每個目錄複製一份配置檔案
[root@localhost ~]# cp redis-4.0.10/redis.conf 7000/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7001/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7002/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7003/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7004/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7005/
[root@localhost ~]# cp redis-4.0.10/redis.conf 7006/
4.修改各自目錄配置檔案
- port 7000 ... 7001 ... 7002 ..... 7006 #修改埠
- bind 0.0.0.0 #開啟遠端連線
- cluster-enabled yes #開啟叢集模式
- cluster-config-file nodes-port.conf #叢集節點配置檔案
- cluster-node-timeout 5000 #叢集節點超時時間
- appendonly yes #開啟AOF持久化
5.指定不同目錄配置檔案啟動七個節點
- [root@localhost bin]# ./redis-server /root/7000/redis.conf
- [root@localhost bin]# ./redis-server /root/7001/redis.conf
- [root@localhost bin]# ./redis-server /root/7002/redis.conf
- [root@localhost bin]# ./redis-server /root/7003/redis.conf
- [root@localhost bin]# ./redis-server /root/7004/redis.conf
- [root@localhost bin]# ./redis-server /root/7005/redis.conf
- [root@localhost bin]# ./redis-server /root/7006/redis.conf
6.檢視程式
- [root@localhost bin]# ps aux|grep redis
7.複製叢集操作指令碼到bin目錄中
- [root@localhost bin]# cp /root/redis-4.0.10/src/redis-trib.rb .
叢集指令碼在redis原始碼包中,在對應版本的原始碼包src/下找到這個rb原始檔,複製到你redis的bin下即可
8.建立叢集
./redis-trib.rb create --replicas 1 192.168.202.205:7000 192.168.202.205:7001 192.168.202.205:7002 192.168.202.205:7003 192.168.202.205:7004 192.168.202.205:7005
以上所有ip與埠改成你自己的
搭建成功後如下圖所示
叢集下相關操作
叢集節點狀態說明
-
主節點
主節點存在hash slots,且主節點的hash slots 沒有交叉
主節點不能刪除
一個主節點可以有多個從節點
主節點當機時多個副本之間自動選舉主節點 -
從節
從節點沒有hash slots
從節點可以刪除
從節點不負責資料的寫,只負責資料的同步
# 檢視叢集狀態 check [原始叢集中任意節點] [無]
./redis-trib.rb check 192.168.202.205:7000
# 新增主節點 add-node [新加入節點] [原始叢集中任意節點]
./redis-trib.rb add-node 192.168.1.158:7007 192.168.1.158:7006
- 注意:
1.該節點必須以叢集模式啟動
2.預設情況下該節點就是以master節點形式新增
# 新增從節點 add-node --slave [新加入節點] [叢集中任意節點]
./redis-trib.rb add-node --slave 192.168.1.158:7006 192.168.1.158:7000
- 注意:
當新增副本節點時沒有指定主節點,redis會隨機給副本節點較少的主節點新增當前副本節點
相關文章
- Redis的主從複製,哨兵和Cluster叢集Redis
- redis安裝,主從複製,哨兵機制,叢集Redis
- linux系統——Redis叢集搭建(主從+哨兵模式)LinuxRedis模式
- Redis 主從複製與哨兵Redis
- 一文掌握Redis主從複製、哨兵、Cluster三種叢集模式Redis模式
- Redis高可用-主從,哨兵,叢集Redis
- redis主從叢集搭建及容災部署(哨兵sentinel)Redis
- (八)Redis 主從複製、切片叢集Redis
- Docker Compose搭建MySQL主從複製叢集DockerMySql
- CentOS7.8 環境搭建 Redis 主從複製和哨兵模式CentOSRedis模式
- Redis主從同步叢集搭建Redis主從同步
- 淺談:redis的主從複製 + 哨兵模式Redis模式
- Redis三種高可用模式:主從、哨兵、叢集Redis模式
- 三千字介紹Redis主從+哨兵+叢集Redis
- 圖解Redis,Redis主從複製與Redis哨兵機制圖解Redis
- 基於Dokcer搭建Redis叢集(主從叢集)Redis
- 搭建Redis簡易叢集實現主從複製和讀寫分離Redis
- Redis 主從複製與哨兵優化部署解析Redis優化
- Redis叢集搭建 三主三從Redis
- Redis叢集搭建(三主三從)Redis
- Redis哨兵叢集:哨兵掛了,主從庫還能切換嗎?Redis
- MySQL叢集之 主從複製 主主複製 一主多從 多主一叢 實現方式MySql
- 7、tomcat叢集+MySQL主從複製TomcatMySql
- redis叢集之主從複製叢集的原理和部署Redis
- 用 docker 學習 redis 主從複製3 redis-sentinel(哨兵模式)DockerRedis模式
- Redis資料型別, Redis主從哨兵和叢集(將資料匯入叢集) ubuntu使用Redis資料型別Ubuntu
- Redis:主從複製Redis
- Redis - 主從複製Redis
- Redis主從複製Redis
- .Net Core 使用 CSRedisCore 訪問 Redis 的哨兵和主從複製Redis
- 【Redis學習專題】- Redis主從+哨兵叢集部署Redis
- 輕鬆掌握元件啟動之Redis單機、主從、哨兵、叢集配置元件Redis
- Redis多例項及主從複製環境搭建Redis
- redis系列:主從複製Redis
- Redis 主從複製原理Redis
- redis(14)主從複製Redis
- Redis 主從複製(Replication)Redis
- 實踐 - 搭建Redis一主兩從三哨兵Redis