1. 程式人生 > >redis哨兵主從配置

redis哨兵主從配置

redis 主從 哨兵模式

REDIS哨兵主從配置

  1. 環境描述
    操作系統:CentOS 5.10 x64
    硬件配置:阿裏雲8核8G100G硬盤。
    IP地址:10.253.2.32 【默認主】
    IP地址:10.253.5.158【默認從】
    版本號:redis-2.8
  2. Redis安裝部署
    Redis是一種高級key-value數據庫。它跟memcached類似,不過數據可以持久化,而且支持的數據類型很豐富。有字符串,鏈表,集 合和有序集合。支持在服務器端計算集合的並,交和補集.
    (difference)等,還支持多種排序功能。所以Redis也可以被看成是一個數據結構服務 器。
    Redis的所有數據都是保存在內存中,然後不定期的通過異步方式保存到磁盤上(這稱為“半持久化模式”);也可以把每一次數據變化都寫入到一個append only file(aof)裏面(這稱為“全
    久化模式”)。
    安裝 tcl
    下載tcl 包 http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
    --解壓包
    tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/
    --進入目錄
    cd /usr/local/tcl8.6.1/unix/
    --安裝前檢查
    ./configure
    --編譯
    make
    --運行
    make install

    安裝時間比較花時間

    安裝redis
    1. 下載地址:
    $ wget http://redis.io/download
    2. 解壓縮
    $ tar xzf redis-2.8.19.tar.gz
    3. 編譯
    $ cd redis-2.8.19

    $ make
    $make install
    或者指定目錄安裝
    $ make PREFIX=/home/redis/redis install
    $cp redis.conf /etc/
    參數介紹:
    make install命令執行完成後,會在/usr/local/bin目錄下生成個可執行文件,分別是redis-server、redis-cli、redis-benchmark、redis-check-aof 、redis-check-dump,它們的作用如下:
    redis-server:Redis服務器的daemon啟動程序
    redis-cli:Redis命令行操作工具。也可以用telnet根據其純文本協議來操作
    redis-benchmark:Redis性能測試工具,測試Redis在當前系統下的讀寫性能
    redis-check-aof:數據修復
    redis-check-dump:檢查導出工具
    4. 修改系統配置文件,執行命令
    a) echo vm.overcommit_memory=1 >> /etc/sysctl.conf
    b) sysctl vm.overcommit_memory=1 或執行echo vm.overcommit_memory=1 >>/proc/sys/vm/overcommit_memory
    使用數字含義:
    0,表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,並把錯誤返回給應用進程。
    1,表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。
    2,表示內核允許分配超過所有物理內存和交換空間總和的內存
    5. 修改redis配置文件
    a) $ cd /etc/
    b) vi redis.conf
    c) 修改daemonize yes---目的使進程在後臺運行
    參數介紹:
    daemonize:是否以後臺daemon方式運行
    pidfile:pid文件位置
    port:監聽的端口號
    timeout:請求超時時間
    loglevel:log信息級別
    logfile:log文件位置
    databases:開啟數據庫的數量
    save :保存快照的頻率,第一個表示多長時間,第三個表示執行多少次寫操作。在一定時間內執行一定數量的寫操作時,自動保存快照。可設置多個條件。
    rdbcompression:是否使用壓縮
    dbfilename:數據快照文件名(只是文件名,不包括目錄)
    dir:數據快照的保存目錄(這個是目錄)
    appendonly:是否開啟appendonlylog,開啟的話每次寫操作會記一條log,這會提高數據抗風險能力,但影響效率。
    appendfsync:appendonlylog如何同步到磁盤(三個選項,分別是每次寫都強制調用fsync、每秒啟用一次fsync、不調用fsync等待系統自己同步)
    6. 啟動redis
    a) $ cd /usr/local/bin
    b) ./redis-server /etc/redis.conf
    7. 檢查是否啟動成功
    a) $ ps -ef | grep redis
    b) redis-cli -p 8086
    127.0.0.1:6379> set foo bat
    OK
    127.0.0.1:6379> set foo bar
    OK
    127.0.0.1:6379> get foo
    "bar"
    127.0.0.1:6379> get bat

  3. Redis主從配置
    僅需要在slave node上修改配置:
    找到slaveof這行,參考下面的修改(填上master node的ip和端口就完事了)
    slaveof 10.253.2.332 8086 //哨兵主從配置,第一次必須人工定義好主從。後續哨兵記住了同一網絡中存在的所有redis服務器,會自動刪除掉此配置。
    另外註意下 slave-read-only yes 這行,這表示slave只讀不寫,也是推薦設置【在哨兵主從這個參數不需要配置,因為從機我們還需要提升為master】
  4. 哨兵的配置
    redis提供了sentinel(哨兵)機制,通過sentinel模式啟動redis後,自動監控master/slave的運行狀態,基本原理是:心跳機制+投票裁決。每個sentinel會向其它sentinal、master、slave定時發送消息,以確認對方是否“活”著,如果發現對方在指定時間(可配置)內未回應,則暫時認為對方已掛(所謂的“主觀認為宕機” Subjective Down,簡稱SDOWN)。
    若“哨兵群”中的多數sentinel,都報告某一master沒響應,系統才認為該master"徹底死亡"(即:客觀上的真正down機,Objective Down,簡稱ODOWN),通過一定的vote算法,從剩下的slave節點中,選一臺提升為master,然後自動修改相關配置。
    在2臺redis服務器上分別創建sentinel.conf文件
    安裝redis之後,其安裝目錄為/usr/loca/bin/
    在此目錄下,創建conf文件夾,然後在conf文件夾創建sentinel.conf,內容如下:
    port 7050 //哨兵監聽的端口號
    dir /usr/local/bin/ //redis的主目錄
    sentinel monitor mymaster 10.253.2.32 8086 1 //默認的主服務器。 1表示只要一個哨兵監聽到主服務器ODOWN,就開始failover.
    sentinel down-after-milliseconds mymaster 5000 //哨兵監聽redis主服務器沒有響應超過5秒,就認為是SDOWN了。
    sentinel parallel-syncs mymaster 1 //新master啟動之後,只允許同一時刻一臺從服務器更新同步數據
    sentinel failover-timeout mymaster 15000 //哨兵監聽redis主服務器沒有響應超過15秒,就開始進行failover,進行選舉新的master。
    啟動redis
    ./redis-server /etc/redis.conf
    啟動哨兵
    ./redis-sentinel conf/sentinel.conf
    確認主機
    在2臺機器上同時確認主機信息
    ./redis-cli -p 7050 sentinel masters
    ) 1) "name"
    2) "mymaster"
    3) "ip"
    4) "10.253.2.32"
    5) "port"
    6) "8086"
    7) "runid"
    8) "3bad76dd51566847d8b0603865310b87584201f9"
    9) "flags"
    10) "master"
    11) "pending-commands"
    12) "0"
    13) "last-ping-sent"
    14) "0"
    15) "last-ok-ping-reply"
    16) "351"
    17) "last-ping-reply"
    18) "351"
    19) "down-after-milliseconds"
    20) "5000"
    21) "info-refresh"
    22) "8559"
    23) "role-reported"
    24) "master"
    25) "role-reported-time"
    26) "44678013"
    27) "config-epoch"
    28) "8"
    29) "num-slaves"
    30) "1"
    31) "num-other-sentinels"
    32) "1"
    33) "quorum"
    34) "1"
    35) "failover-timeout"
    36) "15000"
    37) "parallel-syncs"
    38) "1"
    關閉掉主服務器
    ./redis-cli -p 8086 shutdown
    再次確認主機信息
    ./redis-cli -p 7050 sentinel masters
    ) 1) "name"
    2) "mymaster"
    3) "ip"
    4) "10.253.5.158"
    5) "port"
    6) "8086"
    7) "runid"
    8) "3bad76dd51566847d8b0603865310b87584201f9"
    9) "flags"
    10) "master"
    11) "pending-commands"
    12) "0"
    13) "last-ping-sent"
    14) "0"
    15) "last-ok-ping-reply"
    16) "351"
    17) "last-ping-reply"
    18) "351"
    19) "down-after-milliseconds"
    20) "5000"
    21) "info-refresh"
    22) "8559"
    23) "role-reported"
    24) "master"
    25) "role-reported-time"
    26) "44678013"
    27) "config-epoch"
    28) "8"
    29) "num-slaves"
    30) "1"
    31) "num-other-sentinels"
    32) "1"
    33) "quorum"
    34) "1"
    35) "failover-timeout"
    36) "15000"
    37) "parallel-syncs"
    38) "1"
    查看哨兵的配置
    port 7050
    dir "/usr/local/bin"
    sentinel monitor mymaster 10.253.2.32 8086 1
    sentinel down-after-milliseconds mymaster 5000
    sentinel failover-timeout mymaster 15000

    Generated by CONFIG REWRITE

    sentinel config-epoch mymaster 8
    sentinel leader-epoch mymaster 8
    sentinel known-slave mymaster 10.253.5.158 8086
    sentinel known-sentinel mymaster 10.253.5.158 3306 8f27d969797b27e89da6ed2156ba9f1cebfdc885 //哨兵記錄了網絡中存在的這臺redis服務器,在10.253.2.32 down掉之後,通過選舉把10.253.5.158定義為主服務器。同時,記錄了這臺redis服務器的信息在自己的配置文件中。2臺服務器上的哨兵配置都會記錄。
    sentinel current-epoch 8

  5. 生產項目配置redis
    配置文件application.yml
    spring:
    redis:
    sentinel:
    master: mymaster
    nodes: 10.253.2.32:3306,10.253.5.158:3306

redis哨兵主從配置