1. 程式人生 > >用haproxy+redis實現分散式redis伺服器

用haproxy+redis實現分散式redis伺服器

redis是一個非常強大的nosql服務,不僅能替代memcache這樣的key/value服務,也具有強大的佇列功能,在普通應用上可以替代activemq/rabbitmq一類佇列服務

但是目前為止,redis都沒有實現真正有效的叢集功能,redis的作者承諾會在redis 3.0的時候將名為“redis-cluster”的叢集功能加入redis,但是截至目前,redis還是2.8版本

redis本身不具有叢集,不代表我們不能實現redis叢集,通過思考,我選擇使用流行的負載均衡器+redis的組合來實現

在負載均衡器的選擇上,我選擇haproxy。目前圈內流行的負載均衡器有lvs、nginx、haproxy,lvs的資料相對較少,nginx只支援http和email的負載均衡,相較之下,只有haproxy比較適合我們的應用場景。

多的不說了,我們馬上開始

實驗過程全部在一臺伺服器上進行:

192.168.1.168

在這臺伺服器上只裝了一個redis

/usr/local/redis

但是通過使用不同的配置檔案(實際只是copy了同一份配置檔案,改一下監聽埠),開啟了兩個redis監聽例項,就等於兩個redis了

192.168.1.168:6379

192.168.1.168:6378

我們的haproxy裝在

/usr/local/haproxy

安裝過程很簡單

到http://download.chinaunix.net/download/0013000/12508.shtml下載haproxy的最新版本,我選擇下載http://down1.chinaunix.net/distfiles/haproxy-1.4.21.tar.gz這個

tar zxvf haproxy-1.4.21.tar.gz

mv haproxy-1.4.21 /usr/local/haproxy

cd /usr/local/haproxy

make install

這樣就裝好了,簡單不

接下來要寫配置檔案

cd /usr/local/haproxy

mkdir conf log

cd conf

vim haproxy.cfg

配置內容如下:

global
        log 127.0.0.1   local0        #日誌輸出配置,所有日誌都記錄在本機,通過local0輸出
        maxconn 4096    #最大連線數
        chroot /usr/local/haproxy    #改變當前工作目錄
        user haproxy    #所屬執行的使用者
        group haproxy    #所屬執行的使用者組
        daemon        #以後臺形式執行ha-proxy
        nbproc 4    #啟動4個ha-proxy例項
        pidfile /usr/local/haproxy/log/haproxy.pid        #pid檔案位置

defaults
        log     127.0.0.1       local3    #日誌檔案的輸出定向
        mode    tcp        #{ tcp|http|health } 設定啟動的例項的協議型別,此處要選擇tcp,因為redis是基於tcp協議執行的
        option dontlognull        #保證HAProxy不記錄上級負載均衡傳送過來的用於檢測狀態沒有資料的心跳包
        option redispatch        #當serverId對應的伺服器掛掉後,強制定向到其他健康的伺服器
        retries 2        #重試2次連線失敗就認為伺服器不可用,主要通過後面的check檢查
        maxconn 2000    #最大連線數
        balance roundrobin        #負載均衡演算法,roundrobin表示輪詢,source表示按照IP
        contimeout      5000    #連線超時時間
        clitimeout      50000    #客戶端連線超時時間
        srvtimeout      50000    #伺服器端連線超時時間

listen proxy 192.168.1.168:6300
        server redis_192.168.1.168_6378 192.168.1.168:6378 check inter 2000 rise 2 fall 5    #你的均衡節點
        server redis_192.168.1.168_6379  192.168.1.168:6379 check inter 2000 rise 2 fall 5

配置檔案儲存,然後來啟動haproxy

/usr/local/haproxy/haproxy -f /usr/local/haproxy/conf/haproxy.cfg

如果修改了配置檔案要重新執行,先要結束haproxy的所有程序

killall haproxy

然後再重新執行啟動haproxy的命令

這樣redis的叢集就搭好了!

現在來試驗一下,php程式碼:

$redis = new Redis();
$redis->connect('192.168.1.168',6300);
$r = $redis->info();
print_r($r);

打印出來的狀態陣列,能看得出來是不同的例項,process_id是不同的程序id

以上是為實現redis叢集目的進行的haproxy配置,haproxy是一款非常強大的負載均衡器,功能不止於此

更多的haproxy配置方法請參考:

更詳細的haproxy配置引數解釋請參考: