1. 程式人生 > >redis主從配置初步:簡單主從切換(哨兵模式)

redis主從配置初步:簡單主從切換(哨兵模式)

問題:主從配置,其中一臺宕機了,咋辦?

官網給我們提供了一個工具sentinel(哨兵)

1、sentinel在哪裡?

回憶一下,我們下載的redis原始碼。
這裡寫圖片描述

2、在redis可執行檔案的目錄中有一個redis-sentinel
/usr/local/redis/bin/
這裡寫圖片描述
就是通過它來啟動我們的”哨兵”,可以啟動多個『哨兵』。

3、sentinel的概念

使用者管理多個redis伺服器(instance),該系統執行以下3個任務:
監控(Monitoring):不斷的檢查你的主伺服器和從伺服器是否執行正常;
通知(Notification):當被監控的某個redis伺服器出現問題時,Sentinel可以通過API向管理員或者其他應用程式傳送通知;
自動故障遷移(Automatic failover):當一個主伺服器不能正常工作時,sentinel會開始一次自動故障遷移操作,它會將失效的主伺服器的其中一個從伺服器升級為新的主伺服器,並讓失效主伺服器的其他從伺服器為複製新的主伺服器。當客戶端試圖連線失效的主伺服器時,叢集也會向客戶端返回新主伺服器地址,使得叢集可以使用新主伺服器代替失效伺服器。

4、sentinel的配置

先拷貝配置檔案過來(從redis原始碼目錄中)

sudo cp sentinel.conf /usr/local/redis/conf/

cd /usr/local/redis/conf/

這裡寫圖片描述

基本配置項說明:
port xxxooo //埠
sentinel monitor master 127.0.0.1 6379 2
sentinel down-after-milliseconds master 30000
sentinel failover-timeout master 180000
sentinel parallel-syncs master
sentinel notification-script
第二行:指定要檢測的例項,別名+iP地址+埠。2表示至少2個sentinel例項同時檢測到redis server異常,才判斷為宕機
第三行:指定某個sentinel例項監控到某個redis例項持續異常多少時間(毫秒),才判斷狀態為down。
第四行:若sentinel在該配置內未能完成failover操作(故障時master/slave自動切換),則認為本次failover失敗。
第五行:指定failover過程中,同時被sentinel reconfigure的最大slave例項數,由於reconfigure過沖中,對應的slave會中斷響應客戶端請求,故為了避免所有slave同時不可用,該值需適當配小。
第六行:指定sentinel檢測到master-name指向的例項異常時,呼叫的報警指令碼。該配置專案可選,但生成環境建議配置。

我們這裡,先來簡單點兒,只需要配置前面幾項。

vi sentinel.conf

修改或增加如下內容:

dir /tmp
修改工作目錄為:
dir /usr/local/redis/tmp #等下我們去建立這個目錄

sentinel monitor mymaster 127.0.0.1 6379 2
修改為:
sentinel monitor mymaster 127.0.0.1 6379 1 #因為我現在沒有2個哨兵

sentinel down-after-milliseconds mymaster 30000
修改為:
sentinel down-after-milliseconds mymaster 10000
#30秒修改為10秒

5、啟動2個服務

/usr/local/redis/bin/redis-server /usr/local/redis/conf/6379.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/6380.conf

為了方便啟動,我們可以在/usr/local/redis/bin/目錄下新建一個可執行的指令碼檔案,
比如叫start,內容就是上面的2條命令。
然後需要給這個start檔案許可權:

sudo chmod +x start

這樣我們就可以執行/usr/local/redis/bin/start這個命令,來代替那2行了。

這裡寫圖片描述

6、啟動sentinel

第一種啟動方式:

/usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/sentinel.conf

這裡寫圖片描述

注意:我這裡有個報錯,你不一定有。
You requested maxclients of 10000 requiring at least 10032 max file descriptors.
….
做如下操作即可:
sudo vi /etc/security/limits.conf
新增如下2行:
admin soft nofile 10032
admin hard nofile 10032
注意:admin是我這裡的使用者名稱
重啟當前使用者終端連線即可(不需要重啟伺服器)

7、操練
連線6379(主伺服器),設定一個值

 /usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379
 set name zhangsan

這裡寫圖片描述

連線從伺服器,獲取值

/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6380
get name

這裡寫圖片描述
預設從服務是不能set 的。

這個時候假設我們的主機(6379這個)宕機了
這裡寫圖片描述

我們觀察著sentinel服務,會提示我們把6380切換到了主服務:
這裡寫圖片描述

這時候,我們連上6380這個服務,發生竟然可以set了

/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6380
set name lisi

這裡寫圖片描述
好神奇,這就完成了redis的主從切換了。

我們可以重新把6379這個redis服務給啟動起來:

/usr/local/redis/bin/redis-server /usr/local/redis/conf/6379.conf

這裡寫圖片描述

然後我們連上6379這個服務:

/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379

這裡寫圖片描述

我們發現我們現在只能get到6380機器設定的值,不能set了。
現在不是主機,是從機了。

這就是最簡單的主從切換(2個節點的主從切換),其實我們還可以來更多節點:6379、6380、6381、6382。