前段時間項目里正好用到了redis的集群哨兵部署,因為此前并無了解過趾唱,所以一臉懵逼啊,查閱了幾篇資料蜻懦,特此綜合總結(jié)一下甜癞,作為記錄。
寫在前沿:隨著項目的擴(kuò)張宛乃,對redis的依賴也越來越大悠咱,為了增強redis的性能,防止其掛掉烤惊,所以第一次嘗試下項目里引用redis哨兵監(jiān)控redis集群乔煞。
哨兵模式:粗略看了原理吁朦,并無詳細(xì)了解柒室,如有不對,虛心求教逗宜。監(jiān)聽redis主庫心跳包,如果心跳斷開雄右,則枚舉一個從庫推舉成為新的主庫空骚,防止redis宕機(jī)不能使用
本方法是通過php-redis擴(kuò)展里的rawCommand函數(shù)完成(必須安裝2.2.7或以上的php-redis擴(kuò)展才有此函數(shù)),如果不了解哨兵模式的工作原理擂仍,可以先查詢一下囤屹,可以更好的幫助理解,在此之前我只是粗略的查了一下逢渔,
//初始化redis對象
$redis = new Redis();
//連接sentinel服務(wù) host為ip肋坚,port為端口,哨兵的ip和端口號
$redis->connect($host, $port);
//獲取主庫列表及其狀態(tài)信息
$result = $redis->rawCommand('SENTINEL', 'masters');
//根據(jù)所配置的主庫redis名稱獲取對應(yīng)的信息
//master_name應(yīng)該由運維告知(也可以由上一步的信息中獲人嗬)
$result = $redis->rawCommand('SENTINEL', 'master', $master_name);
//根據(jù)所配置的主庫redis名稱獲取其對應(yīng)從庫列表及其信息
$result = redis->rawCommand('SENTINEL', 'slaves', $master_name);
//獲取特定名稱的redis主庫地址
$result = $redis->rawCommand('SENTINEL', 'get-master-addr-by-name', $master_name)
//以上部分可以獲取到主庫的ip和對應(yīng)端口智厌,程序可以直接像鏈接單臺redis一樣鏈接操作使用?