天天看點

redis叢集主從複制搭建

1、redis配置檔案redis.conf詳解

################################## INCLUDES ###################################
#這在你有标準配置模闆但是每個redis伺服器又需要個性設定的時候很有用。
# include /path/to/local.conf
# include /path/to/other.conf

################################ GENERAL #####################################

#是否在背景執行,yes:背景運作;no:不是背景運作(老版本預設)
daemonize no

  #3.2裡的參數,是否開啟保護模式,預設開啟。要是配置裡沒有指定bind和密碼。開啟該參數後,redis隻會本地進行通路,拒絕外部通路。要是開啟了密碼   和bind,可以開啟。否   則最好關閉,設定為no。
protected-mode yes
#redis的程序檔案
pidfile /var/run/redis/redis-server.pid

#redis監聽的端口号。
port 6379

#此參數确定了TCP連接配接中已完成隊列(完成三次握手之後)的長度, 當然此值必須不大于Linux系統定義的/proc/sys/net/core/somaxconn值,預設是511,而Linux的預設參數值是128。當系統并發量大并且用戶端速度緩慢的時候,可以将這二個參數一起參考設定。該核心參數預設值一般是128,對于負載很大的服務程式來說大大的不夠。一般會将它修改為2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然後在終端中執行sysctl -p。
tcp-backlog 511

#指定 redis 隻接收來自于該 IP 位址的請求,如果不進行設定,那麼将處理所有請求
#bind 127.0.0.1

#配置unix socket來讓redis支援監聽本地連接配接。
# unixsocket /var/run/redis/redis.sock
#配置unix socket使用檔案的權限
# unixsocketperm 700

# 此參數為設定用戶端空閑超過timeout,服務端會斷開連接配接,為0則服務端不會主動斷開連接配接,不能小于0。
timeout 0

#tcp keepalive參數。如果設定不為0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有兩個好處:檢測挂掉的對端。降低中間裝置出問題而導緻網絡看似連接配接卻已經與對端端口的問題。在Linux核心中,設定了keepalive,redis會定時給對端發送ack。檢測到對端關閉需要兩倍的設定值。
tcp-keepalive 0

#指定了服務端日志的級别。級别包括:debug(很多資訊,友善開發、測試),verbose(許多有用的資訊,但是沒有debug級别資訊多),notice(适當的日志級别,适合生産環境),warn(隻有非常重要的資訊)
loglevel notice

#指定了記錄日志的檔案。空字元串的話,日志會列印到标準輸出裝置。背景運作的redis标準輸出是/dev/null。
logfile /var/log/redis/redis-server.log

#是否打開記錄syslog功能
# syslog-enabled no

#syslog的辨別符。
# syslog-ident redis

#日志的來源、裝置
# syslog-facility local0

#資料庫的數量,預設使用的資料庫是DB 0。可以通過”SELECT “指令選擇一個db
databases 16

################################ SNAPSHOTTING ################################
# 快照配置
# 注釋掉“save”這一行配置項就可以讓儲存資料庫功能失效
# 設定sedis進行資料庫鏡像的頻率。
# 900秒(15分鐘)内至少1個key值改變(則進行資料庫儲存--持久化)
# 300秒(5分鐘)内至少10個key值改變(則進行資料庫儲存--持久化)
# 60秒(1分鐘)内至少10000個key值改變(則進行資料庫儲存--持久化)
save 900 1
save 300 10
save 60 10000

#當RDB持久化出現錯誤後,是否依然進行繼續進行工作,yes:不能進行工作,no:可以繼續進行工作,可以通過info中的rdb_last_bgsave_status了解RDB持久化是否有錯誤
stop-writes-on-bgsave-error yes

#使用壓縮rdb檔案,rdb檔案壓縮使用LZF壓縮算法,yes:壓縮,但是需要一些cpu的消耗。no:不壓縮,需要更多的磁盤空間
rdbcompression yes

#是否校驗rdb檔案。從rdb格式的第五個版本開始,在rdb檔案的末尾會帶上CRC64的校驗和。這跟有利于檔案的容錯性,但是在儲存rdb檔案的時候,會有大概10%的性能損耗,是以如果你追求高性能,可以關閉該配置。
rdbchecksum yes

#rdb檔案的名稱
dbfilename dump.rdb

#資料目錄,資料庫的寫入會在這個目錄。rdb、aof檔案也會寫在這個目錄
dir /var/lib/redis

################################# REPLICATION #################################
#複制選項,slave複制對應的master。
# slaveof <masterip> <masterport>

#如果master設定了requirepass,那麼slave要連上master,需要有master的密碼才行。masterauth就是用來配置master的密碼,這樣可以在連上master後進行認證。
# masterauth <master-password>

#當從庫同主機失去連接配接或者複制正在進行,從機庫有兩種運作方式:1) 如果slave-serve-stale-data設定為yes(預設設定),從庫會繼續響應用戶端的請求。2) 如果slave-serve-stale-data設定為no,除去INFO和SLAVOF指令之外的任何請求都會傳回一個錯誤”SYNC with master in progress”。
slave-serve-stale-data yes

#作為從伺服器,預設情況下是隻讀的(yes),可以修改成NO,用于寫(不建議)。
slave-read-only yes

#是否使用socket方式複制資料。目前redis複制提供兩種方式,disk和socket。如果新的slave連上來或者重連的slave無法部分同步,就會執行全量同步,master會生成rdb檔案。有2種方式:disk方式是master建立一個新的程序把rdb檔案儲存到磁盤,再把磁盤上的rdb檔案傳遞給slave。socket是master建立一個新的程序,直接把rdb檔案以socket的方式發給slave。disk方式的時候,當一個rdb儲存的過程中,多個slave都能共享這個rdb檔案。socket的方式就的一個個slave順序複制。在磁盤速度緩慢,網速快的情況下推薦用socket方式。
repl-diskless-sync no

#diskless複制的延遲時間,防止設定為0。一旦複制開始,節點不會再接收新slave的複制請求直到下一個rdb傳輸。是以最好等待一段時間,等更多的slave連上來。
repl-diskless-sync-delay 5

#slave根據指定的時間間隔向伺服器發送ping請求。時間間隔可以通過 repl_ping_slave_period 來設定,預設10秒。
# repl-ping-slave-period 10

#複制連接配接逾時時間。master和slave都有逾時時間的設定。master檢測到slave上次發送的時間超過repl-timeout,即認為slave離線,清除該slave資訊。slave檢測到上次和master互動的時間超過repl-timeout,則認為master離線。需要注意的是repl-timeout需要設定一個比repl-ping-slave-period更大的值,不然會經常檢測到逾時。
# repl-timeout 60

#是否禁止複制tcp連結的tcp nodelay參數,可傳遞yes或者no。預設是no,即使用tcp nodelay。如果master設定了yes來禁止tcp nodelay設定,在把資料複制給slave的時候,會減少包的數量和更小的網絡帶寬。但是這也可能帶來資料的延遲。預設我們推薦更小的延遲,但是在資料量傳輸很大的場景下,建議選擇yes。
repl-disable-tcp-nodelay no

#複制緩沖區大小,這是一個環形複制緩沖區,用來儲存最新複制的指令。這樣在slave離線的時候,不需要完全複制master的資料,如果可以執行部分同步,隻需要把緩沖區的部分資料複制給slave,就能恢複正常複制狀态。緩沖區的大小越大,slave離線的時間可以更長,複制緩沖區隻有在有slave連接配接的時候才配置設定記憶體。沒有slave的一段時間,記憶體會被釋放出來,預設1m。
# repl-backlog-size 5mb

#master沒有slave一段時間會釋放複制緩沖區的記憶體,repl-backlog-ttl用來設定該時間長度。機關為秒。
# repl-backlog-ttl 3600

#當master不可用,Sentinel會根據slave的優先級選舉一個master。最低的優先級的slave,當選master。而配置成0,永遠不會被選舉。
slave-priority 100

#redis提供了可以讓master停止寫入的方式,如果配置了min-slaves-to-write,健康的slave的個數小于N,mater就禁止寫入。master最少得有多少個健康的slave存活才能執行寫指令。這個配置雖然不能保證N個slave都一定能接收到master的寫操作,但是能避免沒有足夠健康的slave的時候,master不能寫入來避免資料丢失。設定為0是關閉該功能。
# min-slaves-to-write 3

#延遲小于min-slaves-max-lag秒的slave才認為是健康的slave。
# min-slaves-max-lag 10

# 設定1或另一個設定為0禁用這個特性。
# Setting one or the other to 0 disables the feature.
# By default min-slaves-to-write is set to 0 (feature disabled) and
# min-slaves-max-lag is set to 10.

################################## SECURITY ###################################
#requirepass配置可以讓使用者使用AUTH指令來認證密碼,才能使用其他指令。這讓redis可以使用在不受信任的網絡中。為了保持向後的相容性,可以注釋該指令,因為大部分使用者也不需要認證。使用requirepass的時候需要注意,因為redis太快了,每秒可以認證15w次密碼,簡單的密碼很容易被攻破,是以最好使用一個更複雜的密碼。
#requirepass dHlajs57$lkj&dsadhuwiqbHGHFTYFH

#把危險的指令給修改成其他名稱。比如CONFIG指令可以重命名為一個很難被猜到的指令,這樣使用者不能使用,而内部工具還能接着使用。
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

#設定成一個空的值,可以禁止一個指令
# rename-command CONFIG ""
################################### LIMITS ####################################

# 設定能連上redis的最大用戶端連接配接數量。預設是10000個用戶端連接配接。由于redis不區分連接配接是用戶端連接配接還是内部打開檔案或者和slave連接配接等,是以maxclients最小建議設定到32。如果超過了maxclients,redis會給新的連接配接發送’max number of clients reached’,并關閉連接配接。
# maxclients 10000

#redis配置的最大記憶體容量。當記憶體滿了,需要配合maxmemory-policy政策進行處理。注意slave的輸出緩沖區是不計算在maxmemory内的。是以為了防止主機記憶體使用完,建議設定的maxmemory需要更小一些。
# maxmemory <bytes>

#記憶體容量超過maxmemory後的處理政策。
#volatile-lru:利用LRU算法移除設定過過期時間的key。
#volatile-random:随機移除設定過過期時間的key。
#volatile-ttl:移除即将過期的key,根據最近過期時間來删除(輔以TTL)
#allkeys-lru:利用LRU算法移除任何key。
#allkeys-random:随機移除任何key。
#noeviction:不移除任何key,隻是傳回一個寫錯誤。
#上面的這些驅逐政策,如果redis沒有合适的key驅逐,對于寫指令,還是會傳回錯誤。redis将不再接收寫請求,隻接收get請求。寫指令包括:set setnx setex append incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby getset mset msetnx exec sort。
# maxmemory-policy noeviction

#lru檢測的樣本數。使用lru或者ttl淘汰算法,從需要淘汰的清單中随機選擇sample個key,選出閑置時間最長的key移除。
# maxmemory-samples 5

############################## APPEND ONLY MODE ###############################
#預設redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了。但是redis如果中途當機,會導緻可能有幾分鐘的資料丢失,根據save來政策進行持久化,Append Only File是另一種持久化方式,可以提供更好的持久化特性。Redis會把每次寫入的資料在接收後都寫入 appendonly.aof 檔案,每次啟動時Redis都會先把這個檔案的資料讀入記憶體裡,先忽略RDB檔案。
appendonly no

#aof檔案名
appendfilename "appendonly.aof"

#aof持久化政策的配置
#no表示不執行fsync,由作業系統保證資料同步到磁盤,速度最快。
#always表示每次寫入都執行fsync,以保證資料同步到磁盤。
#everysec表示每秒執行一次fsync,可能會導緻丢失這1s資料。
appendfsync everysec

# 在aof重寫或者寫入rdb檔案的時候,會執行大量IO,此時對于everysec和always的aof模式來說,執行fsync會造成阻塞過長時間,no-appendfsync-on-rewrite字段設定為預設設定為no。如果對延遲要求很高的應用,這個字段可以設定為yes,否則還是設定為no,這樣對持久化特性來說這是更安全的選擇。設定為yes表示rewrite期間對新寫操作不fsync,暫時存在記憶體中,等rewrite完成後再寫入,預設為no,建議yes。Linux的預設fsync政策是30秒。可能丢失30秒資料。
no-appendfsync-on-rewrite no

#aof自動重寫配置。當目前aof檔案大小超過上一次重寫的aof檔案大小的百分之多少進行重寫,即當aof檔案增長到一定大小的時候Redis能夠調用bgrewriteaof對日志檔案進行重寫。目前AOF檔案大小是上次日志重寫得到AOF檔案大小的二倍(設定為100)時,自動啟動新的日志重寫過程。
auto-aof-rewrite-percentage 100
#設定允許重寫的最小aof檔案大小,避免了達到約定百分比但尺寸仍然很小的情況還要重寫
auto-aof-rewrite-min-size 64mb

#aof檔案可能在尾部是不完整的,當redis啟動的時候,aof檔案的資料被載入記憶體。重新開機可能發生在redis所在的主機作業系統當機後,尤其在ext4檔案系統沒有加上data=ordered選項(redis當機或者異常終止不會造成尾部不完整現象。)出現這種現象,可以選擇讓redis退出,或者導入盡可能多的資料。如果選擇的是yes,當截斷的aof檔案被導入的時候,會自動釋出一個log給用戶端然後load。如果是no,使用者必須手動redis-check-aof修複AOF檔案才可以。
aof-load-truncated yes

################################ LUA SCRIPTING ###############################
# 如果達到最大時間限制(毫秒),redis會記個log,然後傳回error。當一個腳本超過了最大時限。隻有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一個可以殺沒有調write指令的東西。要是已經調用了write,隻能用第二個指令殺。
lua-time-limit 5000

################################ REDIS CLUSTER ###############################
#叢集開關,預設是不開啟叢集模式。
# cluster-enabled yes

#叢集配置檔案的名稱,每個節點都有一個叢集相關的配置檔案,持久化儲存叢集的資訊。這個檔案并不需要手動配置,這個配置檔案有Redis生成并更新,每個Redis叢集節點需要一個單獨的配置檔案,請確定與執行個體運作的系統中配置檔案名稱不沖突
# cluster-config-file nodes-6379.conf

#節點互連逾時的閥值。叢集節點逾時毫秒數
# cluster-node-timeout 15000

#在進行故障轉移的時候,全部slave都會請求申請為master,但是有些slave可能與master斷開連接配接一段時間了,導緻資料過于陳舊,這樣的slave不應該被提升為master。該參數就是用來判斷slave節點與master斷線的時間是否過長。判斷方法是:
#比較slave斷開連接配接的時間和(node-timeout * slave-validity-factor) + repl-ping-slave-period
#如果節點逾時時間為三十秒, 并且slave-validity-factor為10,假設預設的repl-ping-slave-period是10秒,即如果超過310秒slave将不會嘗試進行故障轉移
# cluster-slave-validity-factor 10

#master的slave數量大于該值,slave才能遷移到其他孤立master上,如這個參數若被設為2,那麼隻有當一個主節點擁有2 個可工作的從節點時,它的一個從節點會嘗試遷移。
# cluster-migration-barrier 1

#預設情況下,叢集全部的slot有節點負責,叢集狀态才為ok,才能提供服務。設定為no,可以在slot沒有全部配置設定的時候提供服務。不建議打開該配置,這樣會造成分區的時候,小分區的master一直在接受寫請求,而造成很長時間資料不一緻。
# cluster-require-full-coverage yes

################################## SLOW LOG ###################################
###slog log是用來記錄redis運作中執行比較慢的指令耗時。當指令的執行超過了指定時間,就記錄在slow log中,slog log儲存在記憶體中,是以沒有IO操作。
#執行時間比slowlog-log-slower-than大的請求記錄到slowlog裡面,機關是微秒,是以1000000就是1秒。注意,負數時間會禁用慢查詢日志,而0則會強制記錄所有指令。
slowlog-log-slower-than 10000

#慢查詢日志長度。當一個新的指令被寫進日志的時候,最老的那個記錄會被删掉。這個長度沒有限制。隻要有足夠的記憶體就行。你可以通過 SLOWLOG RESET 來釋放記憶體。
slowlog-max-len 128

################################ LATENCY MONITOR ##############################
#延遲監控功能是用來監控redis中執行比較緩慢的一些操作,用LATENCY列印redis執行個體在跑指令時的耗時圖表。隻記錄大于等于下邊設定的值的操作。0的話,就是關閉監視。預設延遲監控功能是關閉的,如果你需要打開,也可以通過CONFIG SET指令動态設定。
latency-monitor-threshold 0

############################# EVENT NOTIFICATION ##############################
#鍵空間通知使得用戶端可以通過訂閱頻道或模式,來接收那些以某種方式改動了 Redis 資料集的事件。因為開啟鍵空間通知功能需要消耗一些 CPU ,是以在預設配置下,該功能處于關閉狀态。
#notify-keyspace-events 的參數可以是以下字元的任意組合,它指定了伺服器該發送哪些類型的通知:
##K 鍵空間通知,所有通知以 [email protected]__ 為字首
##E 鍵事件通知,所有通知以 [email protected]__ 為字首
##g DEL 、 EXPIRE 、 RENAME 等類型無關的通用指令的通知
##$ 字元串指令的通知
##l 清單指令的通知
##s 集合指令的通知
##h 哈希指令的通知
##z 有序集合指令的通知
##x 過期事件:每當有過期鍵被删除時發送
##e 驅逐(evict)事件:每當有鍵因為 maxmemory 政策而被删除時發送
##A 參數 g$lshzxe 的别名
#輸入的參數中至少要有一個 K 或者 E,否則的話,不管其餘的參數是什麼,都不會有任何 通知被分發。詳細使用可以參考http://redis.io/topics/notifications

notify-keyspace-events "Ex"

############################### ADVANCED CONFIG ###############################
#資料量小于等于hash-max-ziplist-entries的用ziplist,大于hash-max-ziplist-entries用hash
hash-max-ziplist-entries 512
#value大小小于等于hash-max-ziplist-value的用ziplist,大于hash-max-ziplist-value用hash。
hash-max-ziplist-value 64

#資料量小于等于list-max-ziplist-entries用ziplist,大于list-max-ziplist-entries用list。
list-max-ziplist-entries 512
#value大小小于等于list-max-ziplist-value的用ziplist,大于list-max-ziplist-value用list。
list-max-ziplist-value 64

#資料量小于等于set-max-intset-entries用iniset,大于set-max-intset-entries用set。
set-max-intset-entries 512

#資料量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset。
zset-max-ziplist-entries 128
#value大小小于等于zset-max-ziplist-value用ziplist,大于zset-max-ziplist-value用zset。
zset-max-ziplist-value 64

#value大小小于等于hll-sparse-max-bytes使用稀疏資料結構(sparse),大于hll-sparse-max-bytes使用稠密的資料結構(dense)。一個比16000大的value是幾乎沒用的,建議的value大概為3000。如果對CPU要求不高,對空間要求較高的,建議設定到10000左右。
hll-sparse-max-bytes 3000

#Redis将在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低記憶體的使用。當你的使用場景中,有非常嚴格的實時性需要,不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置為no。如果沒有這麼嚴格的實時性要求,可以設定為yes,以便能夠盡可能快的釋放記憶體。
activerehashing yes

##對用戶端輸出緩沖進行限制可以強迫那些不從伺服器讀取資料的用戶端斷開連接配接,用來強制關閉傳輸緩慢的用戶端。
#對于normal client,第一個0表示取消hard limit,第二個0和第三個0表示取消soft limit,normal client預設取消限制,因為如果沒有尋問,他們是不會接收資料的。
client-output-buffer-limit normal 0 0 0
#對于slave client和MONITER client,如果client-output-buffer一旦超過256mb,又或者超過64mb持續60秒,那麼伺服器就會立即斷開用戶端連接配接。
client-output-buffer-limit slave 256mb 64mb 60
#對于pubsub client,如果client-output-buffer一旦超過32mb,又或者超過8mb持續60秒,那麼伺服器就會立即斷開用戶端連接配接。
client-output-buffer-limit pubsub 64mb 8mb 120

#redis執行任務的頻率為1s除以hz。
hz 10

#在aof重寫的時候,如果打開了aof-rewrite-incremental-fsync開關,系統會每32MB執行一次fsync。這對于把檔案寫入磁盤是有幫助的,可以避免過大的延遲峰值。
aof-rewrite-incremental-fsync yes
           

2、docker 搭建redis服務

   在指定目錄建立三個目錄redis6379 、 redis6380、redis6381,後面将啟動三個redis服務端口分别為6379、6380、6381,以建立6379服務為例:

   切換至redis6379目錄,目錄檔案結構如下:

redis叢集主從複制搭建

  将redis.conf檔案拷貝至conf目錄中  

  Dockfile檔案:

FROM docker.io/redis:5
COPY ./conf/redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
           

  start_redis.sh啟動腳本:

#!/bin/bash
dkfilePath=/docker/redis6379/Dockerfile
redisContentPath=/docker/redis6379
# 容器名稱
cname=redis6379
# 鏡像名稱
iname=redis6379
# 私有網絡名稱
netname=yang123
# 查找正在運作的redis容器ID并關閉
redisId=`docker ps -a | grep $cname | awk '{print $1}'`
if [ -z $redisId ]; then
    echo "沒有檢測到正在運作的redis容器。開始啟動新的redis容器......"
else
    echo "掃描到正在運作的redis容器,執行關閉......"
    docker rm $(docker stop $cname)
fi
# 删除舊redis image
chk=`docker images | grep $iname | awk '{print $3}'`
if [ -z $chk ]; then
    echo "舊redis 鏡像不存在"
else
    echo "開始删除舊redis鏡像......"
    docker rmi -f $iname
fi
# 建構新的redis容器,并命名為redisssl
echo "建構所需鏡像......"
docker build -t $iname -f $dkfilePath $redisContentPath

if [ $? -eq 0 ]; then

    echo "鏡像建構完成,開始啟動新容器......"
else
    echo "鏡像建構失敗,請檢視錯誤日志"
    exit;
fi
# 啟動新redis容器
docker run \
        -d --name $cname \
        -p 6379:6379 \
        -v /docker/redis6379/data:/data \
        -v /docker/redis6379/conf/redis.conf:/usr/local/etc/redis/redis.conf \
        --privileged=true \
        $iname \
        --appendonly yes
           

啟動6379服務 

redis叢集主從複制搭建

依葫蘆畫瓢,分别配置号6380 、6381的服務,分别修改端口為6380、6381,啟動服務

redis叢集主從複制搭建

3、配置主從複制

   假設使用redis6379位置master節點 ,redis6380、redis6381為從節點,隻需在redis6380、redis6381的配置中添加 slaveof  192.168.2.56  6379 重新啟動redis服務,或者打開用戶端執行SLAVEOF  192.168.2.56  6379

redis叢集主從複制搭建
redis叢集主從複制搭建

  INFO  REPLICATION 檢視配置是否生效  

redis叢集主從複制搭建

 主節點master 上有2個從節點連接配接,在主節點上添加一個kv資料,檢視從庫是否存在

redis叢集主從複制搭建

 在redis6380、 redis6381上檢視TEST:REPL 是否有值

redis叢集主從複制搭建
redis叢集主從複制搭建

 在redis6380、 redis6381都有TEST:REPL的值,說明主從複制配置大功告成

4、sentinel哨兵配置

   當主機redis6379挂了之後,怎麼自動選出新的主機,這就是哨兵機制要解決的問題。在redis6379的conf目錄下建立一個sentinel.conf檔案

redis叢集主從複制搭建

 添加哨兵監控指令

#主機器挂掉之後,剩下兩台從機投票,票數多餘1的選為主機
sentinel monitor  192.168.2.56  6379  1
           

 修改Dockefile檔案

FROM docker.io/redis:5
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
COPY ./conf/redis.conf /usr/local/etc/redis/redis.conf
COPY ./conf/sentinel.conf /usr/local/etc/redis/sentinel.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
CMD [ "redis-sentinel","/usr/lcoal/etc/redis/sentinel.conf" ]
           

 測試哨兵機制,在主機正常運作下,redis6380 、 redis6381 都是redis6379的從庫,當主機挂掉之後,從機會選出新的主節點

繼續閱讀