[喵咪Redis]Redis-Sentinel

[喵咪Redis]Redis-Sentinel

前言

redis-Sentinel 是咱們此次來一同窗習 redis 的重點,在咱們如今的系統已經離不開 redis 的時候 , redis 掛掉了或者是一些其餘問題都是致命的 , 那麼怎麼作到 redis 的高可用呢 , 官方有提供一個管理 redis 集羣自動容災的一個應用 Redis-Sentinel .那麼咱們就來一同搭建一個 redis 高可用的 redis 集羣.redis

附上:vim

喵了個咪的博客:w-blog.cn服務器

Redis官網:http://redis.io/架構

Redis Sentinel文檔:http://redis.io/topics/sentinel分佈式

1. 瞭解Sentinel

Sentinel能夠用於管理多個Redis服務,而且會執行三個任務:學習

  1. 監控(Monitoring): Sentinel 會不斷地檢查你的主服務器和從服務器是否運做正常。
  2. 提醒(Notification): 當被監控的某個 Redis 服務器出現問題時, Sentinel 能夠經過 API 向管理員或者其餘應用程序發送通知。
  3. 自動故障遷移(Automatic failover): 當一個主服務器不能正常工做時, Sentinel 會開始一次自動故障遷移操做, 它會將失效主服務器的其中一個從服務器升級爲新的主服務器, 並讓失效主服務器的其餘從服務器改成複製新的主服務器; 當客戶端試圖鏈接失效的主服務器時, 集羣也會向客戶端返回新主服務器的地址, 使得集羣可使用新主服務器代替失效服務器。

Redis Sentinel 是一個分佈式系統, 你能夠在一個架構中運行多個 Sentinel 進程(progress), 這些進程使用流言協議(gossip protocols)來接收關於主服務器是否下線的信息, 並使用投票協議(agreement protocols)來決定是否執行自動故障遷移, 以及選擇哪一個從服務器做爲新的主服務器。code

雖然 Redis Sentinel 釋出爲一個單獨的可執行文件 redis-sentinel , 但實際上它只是一個運行在特殊模式下的 Redis 服務器, 你能夠在啓動一個普通 Redis 服務器時經過給定 --sentinel 選項來啓動 Redis Sentinel 。blog

2. 準備工做

咱們準備2臺 Liunx 服務器內網 IP 分別爲 192.168.0.20 和 192.168.0.21進程

然在兩臺服務器上面各配置好兩個 redis 實例爲:ip

  1. 192.168.0.20:6379
  2. 192.168.0.20:6380
  3. 192.168.0.21:6381
  4. 192.168.0.21:6382

而後咱們配置好主從關係把192.168.0.20:6379做爲主redis其他做爲從Redis

在咱們redis編譯完成的目錄中src目錄下有一個 redis-sentinel 的程序,咱們把他 cp 到 /usr/local/bin/ 下面就能夠直接使用 redis-sentinel 命令了

3. 配置Sentinel

咱們分別在2臺服務器上建立4個 Sentinel 實例咱們先配置 192.168.0.20 這臺服務器

cd /etc/redis/

vim sentinel_6379.config

port 26379
sentinel monitor master1 192.168.0.20 6379 2
sentinel down-after-milliseconds master1 60000
sentinel failover-timeout master1 180000
sentinel parallel-syncs master1 1
sentinel auth-pass master1 testpassword
  1. 第一行 監聽的端口號
  2. 第二行 配置指示 Sentinel 去監視一個名爲 mymaster的主服務器,這個主服務器的IP地址爲 192.168.0.20,端口號爲 6379 , 而將這個主服務器判斷爲失效至少須要 2 個 Sentinel 贊成 (只要贊成 Sentinel 的數量不達標,自動故障遷移就不會執行)。
  3. 第三行 down-after-milliseconds 選項指定了 Sentinel 認爲服務器已經斷線所需的毫秒數。
  4. 第四行 failover-timeout 設置故障恢復時間 , 也就是當故障了切換了主了以後多久去檢測原來的主服務器是否能夠用而且進行處理的毫秒數
  5. 第五行 parallel-syncs 選項指定了在執行故障轉移時, 最多能夠有多少個從服務器同時對新的主服務器進行同步, 這個數字越小, 完成故障轉移所需的時間就越長。
  6. 第六行 配置鏈接主庫的密碼,若是主庫有密碼沒有設置此項則會沒法聯通

而後以一樣的配置配置好端口爲 192.168.0.20:26380 , 192.168.0.21:26381 和 192.168.0.21:26382

而後咱們使用 redis-sentinel 分表在2臺服務器上面

redis-sentinel sentinel_6379.config
redis-sentinel sentinel_6380.config
redis-sentinel sentinel_6381.config
redis-sentinel sentinel_6382.config

咱們觀察終端的語句會出現以下輸出

+slave <instance details> :一個新的從服務器已經被 Sentinel 識別並關聯。
+sentinel <instance details> :一個監視給定主服務器的新 Sentinel 已經被識別並添加。

看到2個子實例都綁定上了 , 4個 sentinel 也都顯示了這個時候就證實已經配置好了 redis-sentinel 而後咱們在主服務上面執行以下語句

service redis_6379 stop

這個時候就能夠看到在終端中在打印了一些轉換的語句,咱們在檢查主從設置的時候就已經自動轉意到了莫一個 redis 子實例上了,當咱們從新把主運行起來以後,主實例會自動成爲子實例

4. 總結

本節主要介紹了怎麼配置一個 redis 集羣,以及怎麼把 redis-sentinel 跑起來來達到高可用容災切換的問題,更多的操做能夠參考 sentinel 官方文檔來了解更多的關於 sentinel 的操做.

注:筆者能力有限有說的不對的地方但願你們可以指出,也但願多多交流!

PhalApi官網QQ交流羣:421032344 歡迎你們的加入!

相關文章
相關標籤/搜索