日誌收集系統之redis高可用集羣搭建

    爲了搭建日誌收集系統LEK,須要搭建一套Redis高可用集羣,確保日誌正常從各個應用服務器流轉到ElasticSeach服務器,最終經過Kabana顯示出來。Redis高可用集羣採用redis自帶的sentinel實現,具備主備和故障轉移功能。 c++

1、安裝環境說明

兩臺機器:master(192.168.2.52),slave(192.168.2.53)
操做系統:CentOS 6.5
Redis:2.8.17,下載地址:http://download.redis.io/releases/redis-2.8.17.tar.gz redis

2、安裝Redis

  • 安裝前準備 服務器

    一、安裝c++編譯器
    yum install gcc-c++ 架構

    二、安裝依賴tcl
    yum install -y tcl 分佈式

  • 安裝 測試

    一、下載
    wget http://download.redis.io/releases/redis-2.8.17.tar.gz ui

    二、解壓
    tar -zxvf redis-2.8.17.tar.gz spa

    三、安裝
    先建立一個軟連接,而後進入連接目錄,安裝。 操作系統

    ln -s redis-2.8.17 redis
    cd redis
    make install

    安裝完成以後,在/usr/local/bin目錄下會出現redis相關的腳本文件(不包含redis-sentinel.sh)。以下圖所示: .net

  • 配置

    一、建立相關目錄

    redis配置須要指定日誌文件、進程id文件、數據文件和數據文件目錄,下面建立這些相關目錄,以便在下一步進行配置。

    mkdir /var/redis
    cd /var/redis
    mkdir log #存放日誌
    mkdir run #存放redis進程文件
    mkdir data #存放備份數據

    此外,還須要建立一個存放配置文件的目錄,將redis連接目錄中的redis.conf文件拷貝過來。

    mkdir /etc/redis
    cp YOURPATH/redis/redis.conf /etc/redis/

    二、配置文件

    一般須要修改一下配置:

    daemonize yes
    pidfile "/var/redis/run/redis.pid"
    logfile "/var/redis/log/redis.log"
    dir "/var/redis/data"
    dir "/var/redis/data" #這個能夠本身定義大小
  • 測試

    啓動redis服務 redis-server /etc/redis/redis.conf
    執行簡單的存取操做,若是成功,則表示redis服務正常。以下圖所示

  • 複製安裝
    按照上述步驟,在slave機器上安裝好redis服務,redis主備和高可用至少須要兩臺機器。

3、Redis主備

  • 前提
    master和slave兩臺機器均已完成Redis安裝,且服務能夠正常運轉。

  • 主備配置
    redis的主備配置比較簡單,只須要在從服務的配置文件中指明主服務地址和端口號便可。即修改slave上的redis配置文件:
    slaveof 192.168.2.52 6379

  • 測試
    依次重啓redis master,redis slave,在master和slave分別執行以下命令,能夠查看主備信息。

    #在master上執行
    redis-cli -h 192.168.2.52 -p 6379 info Replication
    
    #在slave上執行
    redis-cli -h 192.168.2.53 -p 6379 info Replication

    此外還能夠進行存取測試,在master上執行set操做,在slave上執行get操做,若是value相等,則證實主備功能正常。由於默認 slave是隻讀,因此當在slave上執行set操做時,將報錯:(error) ERR wrong number of arguments for 'set' command

4、Redis高可用

redis高可用的實現採用redis-sentinel,自Redis2.8版開始,正式提名爲Sentinel主從切換方案。Sentinel用於管理多個Redis服務器實例,主要負責3個方面的任務:

  • 監控(Monitoring):Sentinel會不斷檢測你的主服務器和從服務器是否正常運做

  • 提醒(Notification):當被監控的某個Redis服務器出現問題時,Sentinel能夠經過API向管理員或者其餘應用程序發送通知

  • 自 動故障轉移(Automatic Failover):當一個主服務器不能正常工做時, Sentinel 會開始一次自動故障遷移操做, 它會將失效主服務器的其中一個從服務器升級爲新的主服務器, 並讓失效主服務器的其餘從服務器改成複製新的主服務器; 當客戶端試圖鏈接失效的主服務器時, 集羣也會向客戶端返回新主服務器的地址, 使得集羣可使用新主服務器代替失效服務器。

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

  1. Redis-sentinel配置

拷貝sentinel的腳本至/usr/local/bin目錄 cp src/redis-sentinel /usr/local/bin;

拷貝配置文件sentinel.conf至/etc/redis目錄cp sentinel.conf /etc/redis,修改配置文件:

port 26379

# master1
sentinel monitor master1 192.168.2.52 6379 1
sentinel down-after-milliseconds master1 5000
sentinel failover-timeout master1 900000
sentinel parallel-syncs master1 1
  1. 集羣測試

啓動redis-sentinel服務redis-sentinel /etc/redis/sentinel.conf --sentinel;

執行檢測命令redis-cli -h 192.168.2.52 -p 26379 info Sentinel,結果以下,master爲192.168.2.52

如今中止52上redis服務redis-cli -h 192.168.2.52 -p 6379 shutdown,再執行檢測命令以下,master變成了192.168.2.53

5、總結

本文主要介紹瞭如何使用redis-sentinel搭建redis高可用集羣,理論結合實際演示了集羣實現的效果,主備和故障轉移。


歡迎轉載,請註明出處:http://my.oschina.net/xiaohui249/blog/338517

相關文章
相關標籤/搜索