成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP 在redis-sentinel模式下的使用總結(jié)

cgh1999520 / 1486人閱讀

摘要:模式對服務(wù)無疑是一個很好的支持,但是在開發(fā)人員使用時會稍微麻煩一些。而在模式下需要程序動態(tài)獲取主從庫的,即使某臺服務(wù)出現(xiàn)問題,也不會影響到程序,這樣就避免了手動修改配置的問題。以上只是一個大體的使用過程,不同情況可能有所調(diào)整。

近期公司所用項目的緩存想要由memcache遷移到redis,運維給配置的redis使用模式是sentinel(即哨兵模式的),這種模式之前沒用過,在此記錄一下。

簡單介紹下Redis-sentinel:
Redis-sentinel是Redis實例的監(jiān)控管理、通知和實例失效備援服務(wù),是Redis集群的管理工具。在一般的分布式中心節(jié)點數(shù)據(jù)庫中,Redis-sentinel的作用是中心節(jié)點的工作,監(jiān)控各個其他節(jié)點的工作情況并且進行故障恢復(fù),來提高集群的高可用性
(簡介來自http://www.searchdatabase.com...)

我自己的理解就是,假如有a,b,c 3臺可用的redis服務(wù)器,其中a為主服務(wù)器,b,c為從服務(wù)器。
在sentinel模式下如果a出現(xiàn)問題,可以自動將a服務(wù)器拿掉或者降級為從服務(wù)器,然后從b和c中根據(jù)一定策略選擇一臺升級為主服務(wù)器,之后a恢復(fù)后作為從服務(wù)器使用,避免了了由于某臺服務(wù)器出現(xiàn)問題時影響整個redis服務(wù)。

redis-sentinel模式對redis服務(wù)無疑是一個很好的支持,但是在開發(fā)人員使用時會稍微麻煩一些。因為可能更常用的模式就是直接在程序中寫好一個配置文件,redis主從庫都是確定的,程序讀取配置文件進行redis操作。假如主庫出現(xiàn)問題,必須手動修改配置文件才能繼續(xù)正常使用。而如果發(fā)現(xiàn)的比較晚可能會造成不必要的損失。

而在sentinel模式下需要程序動態(tài)獲取主從庫的ip,即使某臺redis服務(wù)出現(xiàn)問題,也不會影響到程序,這樣就避免了手動修改配置的問題。而關(guān)鍵問題其實就是動態(tài)獲取主從庫的ip,端口等信息了。
在網(wǎng)上查相關(guān)資料,大部分都是講解如何配置sentinel服務(wù),而php對應(yīng)使用方法不太多。看了官方redis-sentinel文檔后了解到獲取sentinel信息是有對應(yīng)API的,只不過是一些原生命令。

而php-redis庫是有支持原生命令的方法的,如下:

    /*
     * Send arbitrary things to the redis server.
     * @param   string      $command    Required command to send to the server.
     * @param   mixed       ...$arguments  Optional variable amount of arguments to send to the server.
     * @return  mixed
     * @example
     * 
     * $redis->rawCommand("SET", "key", "value"); // bool(true)
     * $redis->rawCommand("GET", "key"); // string(5) "value"
     * 
*/ public function rawCommand( $command, $arguments ) {}

而在開發(fā)使用大致過程如下
1、根據(jù)運維給的sentinel配置信息連接sentinel,獲得需要的信息(注意:此處是sentinel服務(wù)的配置信息,和redis的并不一致)。配置信息(IP,PORT)會有多個,每個sentinel返回的redis主從配置信息是一致的,所以進行操作時使用其中一臺服務(wù)返回的信息即可。

//初始化redis對象
$redis = new Redis();
//連接sentinel服務(wù) host為ip,port為端口
$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)

//這個方法可以將以上sentinel返回的信息解析為數(shù)組
function parseArrayResult(array $data)
{
    $result = array();
    $count = count($data);
    for ($i = 0; $i < $count;) {
        $record = $data[$i];
        if (is_array($record)) {
            $result[] = parseArrayResult($record);
            $i++;
        } else {
            $result[$record] = $data[$i + 1];
            $i += 2;
        }
    }
    return $result;
}

2、通過以上操作已經(jīng)可以獲取到redis主從庫的信息,redis密碼是固定的,自己寫好就OK。之后就可以按照單例模式去使用redis了,注意操作時主從分離。

以上只是一個大體的使用過程,不同情況可能有所調(diào)整。

已上只是簡單說了下php程序如何去使用這種模式,具體工作原理和配置請移步
https://segmentfault.com/a/11...
https://segmentfault.com/a/11...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/25840.html

相關(guān)文章

  • PHP redis-sentinel模式下的使用總結(jié)

    摘要:模式對服務(wù)無疑是一個很好的支持,但是在開發(fā)人員使用時會稍微麻煩一些。而在模式下需要程序動態(tài)獲取主從庫的,即使某臺服務(wù)出現(xiàn)問題,也不會影響到程序,這樣就避免了手動修改配置的問題。以上只是一個大體的使用過程,不同情況可能有所調(diào)整。 近期公司所用項目的緩存想要由memcache遷移到redis,運維給配置的redis使用模式是sentinel(即哨兵模式的),這種模式之前沒用過,在此記錄一下...

    ?xiaoxiao, 評論0 收藏0
  • 基于騰訊云CVM自建高可用Redis實踐

    摘要:環(huán)境說明需求與目標本文將通過對目前主流的幾種高可用方案進行對比分析,并基于騰訊云和等基礎(chǔ)產(chǎn)品進行搭建配置測試總結(jié)。 本文來源 | 云+社區(qū)專欄文章作者 | 萬守兵,騰訊云資深架構(gòu)師。8年以上大型互聯(lián)網(wǎng)公司運維工作經(jīng)驗,騰訊云資深遷云架構(gòu)師,一直從事大型互聯(lián)網(wǎng)服務(wù)端架構(gòu)設(shè)計和優(yōu)化工作。個人專注于云計算、k8s和 DevOps領(lǐng)域。 導(dǎo)讀:在企業(yè)實際生產(chǎn)環(huán)境中為了能夠給業(yè)務(wù)上層應(yīng)用提供高...

    DataPipeline 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<