?從3.0版本開始,redis具備了集群功能,實現(xiàn)了分布式、容錯、去中心化等特性,在生產(chǎn)環(huán)境中對于保證數(shù)據(jù)一致性和安全性、提高系統(tǒng)響應(yīng)能力都有著很必要的意義。 本文我們就來介紹 redis 集群的三種搭建模式和搭建方法。
目前Redis 7.0對其管理的幾乎每個子系統(tǒng)都進行了多項改進,包括內(nèi)存、計算、網(wǎng)絡(luò)和存儲
詳見:Releases · redis/redis · GitHub
1.1. redis 集群的特性redis 集群的目標是線性可擴展性和保證最終一致性,因此,redis 集群不存在中心節(jié)點或代理節(jié)點。 同時,一致性的保證是建立在一部分容錯性犧牲的基礎(chǔ)上的,系統(tǒng)通過主從節(jié)點的模式在保證對節(jié)點失效具有有限抵抗力的前提下,盡可能保證數(shù)據(jù)的一致性。 redis 集群實現(xiàn)了節(jié)點的自動發(fā)現(xiàn)、master 的自動選舉、熱分片、ASK 轉(zhuǎn)向和 MOVED 轉(zhuǎn)向等機制。 可以參考官方文檔: https://redis.io/topics/cluster-tutorial。
1.2. 集群端口無論是哪種模式的 redis 集群,都需要指定服務(wù)端口(默認為 6379),但 redis 實際上是通過服務(wù)端口 + 10000 的端口來進行數(shù)據(jù)同步的。 因此,如果集群無法建立或同步無法進行,除了需要考慮服務(wù)端口是否連通以外,還需要檢測同步端口的可用性
2.?集群2.1?主從模式集群
1. 概念
主從復(fù)制模型中,有多個redis節(jié)點。 其中,有且僅有一個為主節(jié)點Master。從節(jié)點Slave可以有多個。只要網(wǎng)絡(luò)連接正常,Master會一直將自己的數(shù)據(jù)更新同步給Slaves,保持主從同步 。
優(yōu)點:讀寫分離,將Redis讀操作分攤到多個節(jié)點,大大提高redis服務(wù)器的并發(fā)量
? 缺點:不支持容錯,master宕機后沒有可寫節(jié)點,可能會數(shù)據(jù)丟失,較難支持擴容
2.3.1 準備服務(wù)器(最少倆臺,都安裝redis)
192.168.10.10 master
192.168.10.11 slave
192.168.10.13 slave
2.3.2 修改redis配置文件
master redis.conf
bind 192.168.10.10 #綁定地址
port 6379
daemonize yes #后臺啟動
protected-mode yes #打開保護模式
appendonly yes #開啟AOF持久化存儲
requirepass 123 #啟用密碼認證
pidfile /usr/local/redis-6379/logs/redis-6379.pid
logfile /usr/local/redis-6379/logs/redis.log
dir
masterauto 123
slave1 redis.conf
bind 192.168.10.11 #綁定地址
port 6379
daemonize yes #后臺啟動
protected-mode yes #打開保護模式
appendonly yes #開啟AOF持久化存儲
requirepass 123 #啟用密碼認證
pidfile /usr/local/redis-6379/logs/redis-6379.pid
logfile /usr/local/redis-6379/logs/redis.log
dir
masterauto 123 #master節(jié)點密碼
replicaof 192.168.10.10 6379 #定義master信息
slave2 redis.conf
bind 192.168.10.13 #綁定地址
port 6379
daemonize yes #后臺啟動
protected-mode yes #打開保護模式
appendonly yes #開啟AOF持久化存儲
requirepass 123 #啟用密碼認證
pidfile /usr/local/redis-6379/logs/redis-6379.pid
logfile /usr/local/redis-6379/logs/redis.log
dir
masterauto 123 #master節(jié)點密碼
replicaof 192.168.50.10 6379 #定義master信息
2.2?Sentinel(哨兵集群)
2.1 主從模式的缺陷
? 當主節(jié)點宕機了,整個集群就沒有可寫的節(jié)點了。
由于從節(jié)點上備份了主節(jié)點的所有數(shù)據(jù),那在主節(jié)點宕機的情況下,如果能夠?qū)墓?jié)點變成一個主節(jié)點,就可以解決這個問題了。這就是Sentinel哨兵的作用。?
2.2 哨兵的任務(wù)
?Redis 的 Sentinel 系統(tǒng)用于管理多個 Redis 服務(wù)器(instance), 該系統(tǒng)執(zhí)行以下三個任務(wù):
監(jiān)控(Monitoring): Sentinel 會不斷地檢查你的主服務(wù)器和從服務(wù)器是否運作正常。
提醒(Notification): 當被監(jiān)控的某個 Redis 服務(wù)器出現(xiàn)問題時, Sentinel 可以通過 API 向管理員或者其他應(yīng)用程序發(fā)送通知。
自動故障遷移(Automatic failover): 當一個主服務(wù)器不能正常工作時, Sentinel 會開始一次自動故障遷移操作, 它會將失效主服務(wù)器的其中一個從服務(wù)器升級為新的主服務(wù)器, 并讓失效主服務(wù)器的其他從服務(wù)器改為復(fù)制新的主服務(wù)器; 當客戶端試圖連接失效的主服務(wù)器時, 集群也會向客戶端返回新主服務(wù)器的地址, 使得集群可以使用新主服務(wù)器代替失效服務(wù)器。?
2.2.1 監(jiān)控(Monitoring)
1.Sentinel可以監(jiān)控任意多個Master和該Master下的Slaves。(即多個主從模式)
2.同一個哨兵下的、不同主從模型,彼此之間相互獨立。
3.Sentinel會不斷檢查Master和Slaves是否正常。?
2.3 配置Sentinel
?1.在/usr/local目錄下,創(chuàng)建/redis/sentinels/目錄
mkdir -p sentinels
2.在/sentinels目錄下,以次創(chuàng)建s1、s2、s3三個子目錄中
mkdir s1 s2 s3
3.依次拷貝redis解壓目錄下的sentinel.conf文件,到這三個子目錄中
cp -v /opt/soft/redis-3.2.9/sentinel.conf ./s1cp -v /opt/soft/redis-3.2.9/sentinel.conf ./s2cp -v /opt/soft/redis-3.2.9/sentinel.conf ./s3???4.依次修改s1、s2、s3子目錄中的sentinel.conf文件,修改端口,并指定要監(jiān)控的主節(jié)點。(從節(jié)點不需要指定,sentinel會自動識別)
3.1 哨兵模式的缺陷
? 在哨兵模式中,仍然只有一個Master節(jié)點。當并發(fā)寫請求較大時,哨兵模式并不能緩解寫壓力。只有主節(jié)點才具有寫能力,那如果在一個集群中,能夠配置多個主節(jié)點,就可以緩解寫壓力了,這就是redis-cluster集群模式。
3.2 Redis-cluster集群概念
1.由多個Redis服務(wù)器組成的分布式網(wǎng)絡(luò)服務(wù)集群;
2.集群之中有多個Master主節(jié)點,每一個主節(jié)點都可讀可寫;
3.節(jié)點之間會互相通信,兩兩相連;
4.Redis集群無中心節(jié)點。
3.3?集群配置(Scaling with Redis Cluster | Redis)
1、Redis集群官方建議最好使用6個節(jié)點
本次搭建在一臺主機上創(chuàng)建偽分布式集群,不同的端口表示不同的redis節(jié)點,如下:
主節(jié)點:192.168.58.1:7001 192.168.58.1:7002 192.168.58.1:7003
從節(jié)點:192.168.58.1:7004 192.168.58.1:7005 192.168.58.1:7006
2、在/usr/local/redis下創(chuàng)建redis-cluster目錄,在其下創(chuàng)建7001、7002......7006目錄,如下:
mkdir -p redis/redis-clustermkdir -v 7001 7002 7003 7004 7005 7006?
3、將redis解壓路徑下的配置文件redis.conf,依次拷貝到每個700X目錄內(nèi),并修改每個700X目錄下的redis.conf配置文件:
必選配置:
port 700X
bind ip(當前主機ip:192.168.xxx.xxx)
cluster-enabled yes (啟動redis-cluster集群模式)
建議配置:
daemonized yes
logfile /usr/local/redis/redis-cluster/700X/node.log?
4、啟動每個結(jié)點redis服務(wù)
依次以700X下的redis.conf,啟動redis節(jié)點。(必須指定redis.conf文件)
cd 700x && redis-server ./redis.conf?
5 執(zhí)行創(chuàng)建集群命令
進入到redis源碼存放目錄redis/redis-4.10.3/src下,執(zhí)行redis-trib.rb,此腳本是ruby腳本,它依賴ruby環(huán)境。
./redis-trib.rb create --replicas 1 192.168.58.1:7001 192.168.58.1:7002 192.168.58.1:7003 192.168.58.1:7004 192.168.58.1:7005 192.168.58.1:7006
完成集群搭建
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧