<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jinfeng_wang

    G-G-S,D-D-U!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks
    http://bboyjing.github.io/2016/12/08/Redis%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%B9%9D%E3%80%90%E5%A4%84%E7%90%86%E7%B3%BB%E7%BB%9F%E6%95%85%E9%9A%9C%E3%80%91/



    如果決定要將Redis用作應用程序唯一的數據存儲手段的話,那么就必須確保Redis不會丟失任何數據。根提供了ACID保證的傳統關系數據庫不同,在使用Redis為后端構建應用程序的時候,我們需要多做一些工作才能保證數據的一致性。

    驗證快照文件和AOF文件

    無論時快照持久化還是AOF持久化,都提供了在遇到系統故障時進行數據回復的工具。Redis提供了兩個命令行程序redis-check-aof和redis-check-dump(redis-check-rdb),它們可以在系統故障發生之后,檢查AOF文件和快照文件的狀態,并在有需要的情況下對文件進行修復。下面是使用方法:

    1
    2
    3
    4
    5
    cd /opt/redis-3.2.4
    redis-3.2.4 src/redis-check-aof
    Usage: src/redis-check-aof [--fix] <file.aof>
    redis-3.2.4 src/redis-check-rdb
    Usage: src/redis-check-rdb <rdb-file-name>

    如果運行redis-check-aof程序時給了–fix參數,那么會對AOF文件進行修復。修復方法非常簡單:掃描AOF文件,尋找不正確或不完整的命令,當發現第一個出錯命令的時候,程序會刪除出錯的命令以及位于出錯命令之后的所有命令。在大多數情況下,被刪除的都是AOF文件末尾的不完整寫命令。
    遺憾的是,目前沒有辦法修復出錯的快照文件。盡管發現快照文件收個出現錯誤的地方是有可能的,但因為快照文件本身經過了壓縮,而出現在快照文件中間的錯誤有可能會導致快照文件的剩余部分無法讀取。因此,最好為重要的快照文件保留多個備份。

    更換故障主服務器

    我們來看一下在擁有一個主服務器和一個從服務器的情況下,更換主服務器的具體步驟。假設A、B兩臺機器都運行著Redis,機器A為master,機器B為slave。機器A因為暫時無法修復的故障而斷開了連接,因此決定將同樣安裝了Redis的機器C用作新的主服務器。
    更換服務器的計劃非常簡單:首先像機器B發送一個SAVE命令,讓它創建一個新的快照文件,接著將這個快照文件發送給機器C,并在機器C上面啟動Redis。最后讓B成為機器C的從從服務器。由于環境有限,就在同一臺機器上起不同的端口測試,本機已經安裝了兩個Redis服務,下面演示下步驟:

    1. 再安裝一個Redis服務并修改port配置,改為6381

      1
      2
      3
      4
      cd /opt
      sudo cp -r redis-3.2.4 redis-new-master
      sudo chmod -R 777 redis-new-master
      vim redis-new-master/redis.conf
    2. 啟動機器A、B,讓環境正常運行

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      //啟動機器A
      cd /opt/redis-3.2.4
      ./src/redis-server redis.conf
      //添加一個key
      ./src/redis-cli
      127.0.0.1:6379> set key4 haha
      OK
      //啟動機器B
      cd /opt/redis-replication
      ./src/redis-server redis.conf
    3. kill掉機器A的Redis服務,此時只剩Redis從服務在運行

    4. 向機器B發送SAVE命令

      1
      2
      3
      4
      cd /opt/redis-replication
      ./src/redis-cli -h localhost -p 6380
      localhost:6380> SAVE
      OK
    5. 將機器B的快照文件復制到機器C的對應目錄,并啟動Redis服務

      1
      2
      3
      cp -f /opt/redis-replication/dump.rdb /opt/redis-new-master
      cd /opt/redis-new-master
      src/redis-server redis.conf
    6. 讓機器B成為機器C的從服務器

      1
      2
      localhost:6380> SLAVEOF localhost 6381
      OK

      從機器B的日志已經可以看出成功連接上了6381的新主服務

    7. 測試機器B是否能從機器C同步數據
      1
      2
      3
      4
      5
      6
      7
      8
      //連接新master并新增key
      cd /opt/redis-new-master
      ./src/redis-cli -h localhost -p 6381
      localhost:6381> set key5 new_master
      OK
      //查看B機器的key,成功
      localhost:6380> get key5
      "new_master"

    Redis Sentinel可以監視指定的Redis主服務器及其下屬的從服務器,并在主服務器下線時自動進行故障轉移(failover),后面再學習這個功能。

    posted on 2016-12-14 15:26 jinfeng_wang 閱讀(175) 評論(0)  編輯  收藏 所屬分類: 2016-REDIS
    主站蜘蛛池模板: 精选影视免费在线 | 亚洲av永久无码天堂网| 成人片黄网站色大片免费观看APP| 国产免费人成视频在线观看| 国产成人亚洲合集青青草原精品 | 亚洲成aⅴ人在线观看| 国产va在线观看免费| 日韩亚洲AV无码一区二区不卡 | 亚洲午夜福利717| 成人一区二区免费视频| 亚洲日产韩国一二三四区| h在线看免费视频网站男男| 亚洲综合亚洲综合网成人| 羞羞视频免费网站在线看| 中文字幕在亚洲第一在线| 中文字幕av免费专区| 亚洲av中文无码乱人伦在线咪咕| 日本免费一区二区久久人人澡| 亚洲视频一区调教| free哆啪啪免费永久| 亚洲H在线播放在线观看H| 国产精品成人免费一区二区| 亚洲最大的成人网| 国产免费av一区二区三区| 日韩成人毛片高清视频免费看| 亚洲人成网77777亚洲色| 亚洲视频在线观看免费| 亚洲国产成a人v在线观看| 国产免费观看视频| 国产高潮久久免费观看| 久久久亚洲欧洲日产国码aⅴ| 一区二区无码免费视频网站 | 亚洲国产成人精品无码区在线观看| 无码国产精品一区二区免费模式| 亚洲妓女综合网99| 美女被免费视频网站a国产| 一级毛片大全免费播放| 亚洲av一综合av一区| 日本免费人成视频播放| 国产免费区在线观看十分钟 | 亚洲av成人一区二区三区观看在线|