<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
環境:redis6.2.6
linux虛擬機器器一臺,contos7;
1.一主二從三哨兵理論圖:
一主兩從三哨兵叢集,當master節點宕機時,通過哨兵(sentinel)重新推選出新的master節點,保證叢集的可用性。
2.哨兵的主要功能:
1.叢集監控:負責監控 Redis master 和 slave 程序是否正常工作。
2.訊息通知:如果某個 Redis 範例有故障,那麼哨兵負責傳送訊息作為報警通知給管理員。
3.故障轉移:如果 master node 掛掉了,會自動轉移到 slave node 上。
4.設定中心:如果故障轉移發生了,通知 client 使用者端新的 master 地址。
PS:根據推舉機制,叢集中哨兵數量最好為奇數(3、5…)
3.哨兵用於實現 redis 叢集的高可用,本身也是分散式的,作為一個哨兵叢集去執行,互相協同工作。
4.哨兵的核心知識:
此處省略redis的安裝。
主從複製,是指將一臺Redis主節點伺服器的資料,複製到其他的Redis從節點伺服器。
主節點稱為(master/leader),從節點稱為(slave/follower);
1,資料冗餘:主從複製實現了資料的熱備份,這也是持久化實現的另一種方式。
2,故障恢復:當主節點出現問題時,可以由從節點提供服務,實現快速的故障恢復;實際上是一種服務的冗餘。
3,讀寫分離:master服務主要用來寫,slave服務主要用來讀資料。可以提高伺服器的負載能力,可以根據需求的變化,新增從節點的數量。
4,負載均衡:同時配合讀寫分離,由主節點提供寫服務,從節點提供讀服務,分擔伺服器的負載。在寫少讀多的情況下,通過多個從節點分擔讀負載,能夠大大提高Redis服務的並行量和負載。
5,高可用的基石,主從複製是哨兵和叢集模式能夠實施的基礎。
在正常的生產中我們是準備多臺伺服器,比如三臺,每臺都在各自的linux系統中安裝redis。
但是此處為了演示方便,我使用一臺電腦安裝虛擬機器器,在虛擬機器器上安裝三份redis服務,來模擬一主二從的效果。
第一步:修改原redis.conf組態檔:
redis.conf組態檔採用預設的混合持久化,也可以採用單獨的RDB持久化,因為主從複製的本質是RDB方式,所以要有RDB方式參與即可。
原redis.conf組態檔需要修改的幾個地方:
1.先在網路部分註釋掉單機連線那一行,即註釋掉bind 127.0.0.1 2.同樣我們要將後臺執行開啟:daemonize no,設定為yes。 3.將 保護模式關閉:protected-mode yes 改為:protected-mode no 4.開啟RDB持久化設定: #RDB持久化策略 預設三種方式,[900秒內有1次修改], #[300秒內有10次修改],[60秒內有10000次修改]即觸發RDB持久化, #我們可以手動修改該引數或新增策略 save 900 1 save 300 10 save 60 10000 #RDB檔名 dbfilename dump.rdb #RDB檔案儲存路徑 dir ./ 策略設定: #在seconds秒內有changes次資料修改就觸發RDB持久化 5.開啟AOF持久化設定 appendonly yes #AOF檔名 appendfilename "appendonly.aof" #AOF檔案儲存路徑 與RDB是同一個引數,共用一個檔案路徑 dir ./ #即bin目錄下 #AOF策略,一般都是選擇第一種[always:每個命令都記錄], #[everysec:每秒記錄一次],[no:看機器的心情高興了就記錄,linux一般半個小時同步一次] #appendfsync always appendfsync everysec # appendfsync no #aof檔案大小比起上次重寫時的大小,增長100%(設定可以大於100%)時,觸發重寫。 #[假如上次重寫後大小為10MB,當AOF檔案達到20MB時也會再次觸發重寫,以此類推 auto-aof-rewrite-percentage 100 #aof檔案大小超過64MB*2時,觸發重寫, #為何要乘以2,因為auto-aof-rewrite-percentage 100 是翻倍即100%, #達到翻倍時才重寫 auto-aof-rewrite-min-size 64mb 6.開啟混合持久化: #6.aof-use-rdb-preamble yes # 檢查混合持久化是否開啟,redis5.0後預設開啟
第二步:將修改後的redis.conf組態檔複製出來三份:
1.進入redis預設的安裝路徑:cd /usr/local/bin ll #檢視資料夾內容 cp redis.conf redis_bk.conf #儘量備份一個組態檔,防止修改錯了,可以重新用 cp redis.conf redis6379.conf cp redis.conf redis6380.conf cp redis.conf redis6381.conf
第三步:分別修改三個組態檔:
vim redis6379.conf 修改的內容: pidfile /var/run/redis_6379.pid port 6379 dbfilename dump6379.rdb
vim redis6380.conf 修改的內容: pidfile /var/run/redis_6380.pid port 6380 dbfilename dump6380.rdb
vim redis6381.conf 修改的內容: pidfile /var/run/redis_6381.pid port 6381 dbfilename dump6381.rdb
redis啟動前的準備工作:
檢視虛擬機器器防火牆是否關閉,需要關閉防火牆
1:檢視防火狀態
systemctl status firewalld service iptables status
2:暫時關閉防火牆
systemctl stop firewalld service iptables stop
3:永久關閉防火牆
systemctl disable firewalld chkconfig iptables off
關閉後再檢視防火牆狀態
開放指定埠6379:
開放指定埠的方式一:
在linux中執行: /sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
redis預設埠號6379是不允許進行遠端連線的,所以在防火牆中設定6379開啟遠端服務;
開放指定埠的方式二:
先開啟防火牆才能開放指定埠的:systemctl start firewalld
firewall-cmd --zone=public --add-port=6379/tcp --permanent
第四步:啟動三臺redis伺服器,並檢視是否啟動成功:
redis-server redis6379.conf redis-server redis6380.conf redis-server redis6381.conf ps -ef | grep redis
第五步:設定從庫不設定主庫 :
先連線上redis使用者端:
redis-cli -p 6380
然後將6380機器設定成從機:
slaveof 主機ip 主機埠號 #slaveof 127.0.0.1 6379 info replication
然後將6381機器設定成從機:
redis-cli -p 6381 #slaveof 主機ip 主機埠號 slaveof 127.0.0.1 6379 info replication
在主機檢視從機資訊:發現設定成功。
redis-cli -p 6379 info replication
將官方自帶的sentinel.conf(此檔案在redis的原始碼目錄下,即解壓路徑下)複製到/usr/local/bin:
然後複製出來三份:
修改的內容如下:
vim sentinel0.conf 檔案修改內容如下: protected-mode no daemonize yes port 26379 #sentinel 埠 dir 「/usr/local/bin」 sentinel monitor mymaster 127.0.0.1 6379 2
然後分別修改sentinel1.conf資訊如下:
protected-mode no daemonize yes port 26380 # sentinel 埠,因為我們在一臺虛擬機器器上,所以埠要不一樣 dir 「/usr/local/bin」 sentinel monitor mymaster 127.0.0.1 6379 2 #這裡的mymaster 兩個副本的要一樣,mymaster同一個主機名
然後分別修改sentinel2.conf資訊如下:
protected-mode no daemonize yes port 26381 # sentinel 埠,因為我們在一臺虛擬機器器上,所以埠要不一樣 dir 「/usr/local/bin」 sentinel monitor mymaster 127.0.0.1 6379 2 #這裡的mymaster 兩個副本的要一樣
組態檔詳解
哨兵的設定主要就是修改sentinel.conf組態檔中的引數,在Redis安裝目錄即可看到此組態檔,各引數詳解如下:
# 哨兵sentinel範例執行的埠,預設26379 port 26379 # 哨兵sentinel的工作目錄 dir ./ # 是否開啟保護模式,預設開啟。 protected-mode:no # 是否設定為後臺啟動。 daemonize:yes # 哨兵sentinel的紀錄檔檔案 logfile:./sentinel.log # 哨兵sentinel監控的redis主節點的 ## ip:主機ip地址 ## port:哨兵埠號 ## master-name:可以自己命名的主節點名字 ## quorum:當這些quorum個數sentinel哨兵認為master主節點失聯 那麼這時 #客觀上認為主節點失聯了 # sentinel monitor <master-name> <ip> <redis-port> <quorum> sentinel monitor mymaster 127.0.0.1 6379 2 # 當在Redis範例中開啟了requirepass,所有連線Redis範例的使用者端都要提供密碼。 # sentinel auth-pass <master-name> <password> sentinel auth-pass mymaster 123456 # 指定主節點應答哨兵sentinel的最大時間間隔,超過這個時間,哨兵主觀上認為主節點下線, #預設30秒 # sentinel down-after-milliseconds <master-name> <milliseconds> sentinel down-after-milliseconds mymaster 30000 # 指定了在發生failover主備切換時,最多可以有多少個slave同時對新的master進行同步。 #這個數位越小,完成failover所需的時間就越長;反之,但是如果這個數位越大,就意味著 #越多的slave因為replication而不可用。可以通過將這個值設為1,來保證每次只有一個slave, #處於不能處理命令請求的狀態。 # sentinel parallel-syncs <master-name> <numslaves> sentinel parallel-syncs mymaster 1 # 故障轉移的超時時間failover-timeout,預設三分鐘,可以用在以下這些方面: ## 1. 同一個sentinel對同一個master兩次failover之間的間隔時間。 ## 2. 當一個slave從一個錯誤的master那裡同步資料時開始,直到slave被糾正為從正確 #的master那裡同步資料時結束。 ## 3. 當想要取消一個正在進行的failover時所需要的時間。 ## 4.當進行failover時,設定所有slaves指向新的master所需的最大時間。不過, #即使過了這個超時,slaves依然會被正確設定為指向master, 但是就不按parallel-syncs所設定的規則來同步資料了 # sentinel failover-timeout <master-name> <milliseconds> sentinel failover-timeout mymaster 180000 # 當sentinel有任何警告級別的事件發生時(比如說redis範例的主觀失效和客觀失效等等), #將會去呼叫這個指令碼。一個指令碼的最大執行時間為60s,如果超過這個時間, #指令碼將會被一個SIGKILL訊號終止,之後重新執行。 # 對於指令碼的執行結果有以下規則: ## 1. 若指令碼執行後返回1,那麼該指令碼稍後將會被再次執行,重複次數目前預設為10。 ## 2. 若指令碼執行後返回2,或者比2更高的一個返回值,指令碼將不會重複執行。 ## 3. 如果指令碼在執行過程中由於收到系統中斷訊號被終止了,則同返回值為1時的行為相同。 # sentinel notification-script <master-name> <script-path> sentinel notification-script mymaster /var/redis/notify.sh # 這個指令碼應該是通用的,能被多次呼叫,不是針對性的。 # sentinel client-reconfig-script <master-name> <script-path> sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
最後是先啟動三個服務,然後起送三個哨兵,然後使用者端;
啟動哨兵:
redis-sentinel sentinel0.conf redis-sentinel sentinel1.conf redis-sentinel sentinel2.conf
啟動後檢視sentinel資訊:redis-cli -p sentinel的埠號
redis-cli -p 26379 info sentinel
到此這篇關於Redis哨兵模式實現一主二從三哨兵的文章就介紹到這了,更多相關Redis 一主二從三哨兵內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45