redis 單機部署、集群部署(主從同步+哨兵)


環境准備

服務器IP

服務器 IP 角色
redis-140 192.168.86.140 master
redis-141 192.168.86.141 slave
redis-142 192.168.86.142 slave

單機模式部署

  1. linux 安裝 gcc : 用於編譯 redis

    yum install gcc
    
  2. 上傳安裝包到服務器的 /opt 目錄

  3. 解壓安裝包,此時 redis 沒有編譯

    cd /opt
    tar -zxvf redis-6.2.2.tar.gz
    
  4. 編譯並測試

    cd /opt/redis-6.2.2
    make 
    #可能出現問題見常見問題,不執行 make test 也可以
    make test  
    
  5. 安裝到指定目錄

    make PREFIX=/usr/local/redis install 
    
  6. 增加一些目錄和拷貝 redis.conf 到安裝目錄

    #配置文件存放路徑
    mkdir /usr/local/redis/conf
    #數據存放目錄
    mkdir /usr/local/redis/data
    #日志存放目錄
    mkdir /usr/local/redis/logs
    #拷貝 配置文件到安裝目錄
    cp /opt/redis-6.2.2/redis.conf /usr/local/redis/conf/redis.conf
    
  7. 修改安裝目錄下的配置文件,修改指定的內容即可,vi /usr/local/redis/conf/redis.conf

    #用於指定本機網卡對應的IP地址,如果是默認 127.0.0.1 的話,則只有本機可以訪問。如果注釋掉則表示客戶端可以通過本機所有網卡進來,如果這樣設置,且沒有設置 requirepass 密碼, redis 默認開始了保護模式 protected-mode,則其它客戶端都可以連接,但是一發送命令就會失敗
    bind 192.168.86.140
    #數據存放目錄
    dir /usr/local/redis/data
    #是否后台運行
    daemonize yes 
    #日志文件
    logfile "/usr/local/redis/logs/redis.log" 
    #設置客戶端連接后進行任何其他操作前需要使用的密碼
    requirepass  pass
    
  8. 啟動 redis-server

    cd /usr/local/redis/bin
    ./redis-server ../conf/redis.conf
    
  9. 檢查

    ps -ef | grep redis
    ./redis-cli -h 192.168.86.140 -p 6379
    

集群模式搭建(主從同步+哨兵模式)

  1. redis 高可用集群搭建依賴於 主從同步哨兵模式

  2. 若無特殊說明,以下操作均需在三台 redis 服務器上操作

  3. 按照單機模式部署的方式執行操作,一直執行到第七步修改配置文件為止

  4. 主從同步配置 > 修改 master 配置,修改指定的內容即可,vi /usr/local/redis/conf/redis.conf

    # 用於指定本機網卡對應的IP地址
    bind 192.168.86.140
    #數據存放目錄
    dir /usr/local/redis/data
    #是否后台運行
    daemonize yes 
    #日志文件
    logfile "/usr/local/redis/logs/redis.log" 
    #設置客戶端連接后進行任何其他操作前需要使用的密碼
    requirepass  pass
    #當master服務設置了密碼保護時(用requirepass制定的密碼),slave服務連接master的密碼
    masterauth  pass
    
  5. 主從同步配置 > 修改兩台 slave 配置,修改指定的內容即可,vi /usr/local/redis/conf/redis.conf

    # 用於指定本機網卡對應的IP地址 每台機器設置為自己的IP
    bind 192.168.86.141
    #數據存放目錄
    dir /usr/local/redis/data
    #日志文件
    logfile "/usr/local/redis/logs/redis.log" 
    #是否后台運行
    daemonize yes 
    #指定要同步的主機的 ip,端口
    replicaof 192.168.86.140
    #設置客戶端連接后進行任何其他操作前需要使用的密碼
    requirepass  pass
    #當master服務設置了密碼保護時(用requirepass制定的密碼),slave服務連接master的密碼
    masterauth  pass
    
    
  6. 啟動三台機器的 redis-server

    cd /usr/local/redis/bin
    ./redis-server ../conf/redis.conf
    
  7. 檢查 redis 服務是否啟動成功

    ps -ef | grep redis
    ./redis-cli -h <服務器IP> -p 6379
    
  8. 檢查主從同步是否配置成功,分別登錄三台 redis ,並輸入 info replication

    • master-140

      image-20210604145640259

    • slave-141

      image-20210604145710337

    • slave-142

      image-20210604145819939

  9. 主從同步完畢之后進行 哨兵模式 配置,可以大概將 redis-sentinel 理解為 zookeeper,是用來監控機器的運行情況的,在 master 宕機之后,先從 哨兵集群中選舉一個哨兵作為故障轉移處理的機器,之后被選舉出來的哨兵用來協調各個 slave 的進行選舉 master

  10. 在每台機器上設置一個哨兵,配置文件完全一樣,當然可以使用另外的機器來部署 哨兵

  11. 拷貝並修改哨兵配置

    cd /opt/redis-6.2.2
    cp sentinel.conf /usr/local/redis/conf
    vi sentinel.conf
    
  12. 修改 sentinel.conf ,只修改下面列出的項目

    #設置為后台運行
    daemonize yes 
    #日志存放目錄
    logfile /usr/local/redis/logs/sentinel.log
    #數據存放目錄
    dir /usr/local/redis/data/
    #監控名為 mymaster 的主節點,仲裁參數為 2,一般是哨兵個數的一半+1(類似於zookeeper的過半寫成功機制) 
    sentinel monitor mymaster 192.168.86.140 6379 2
    #主機多長時間連接不上,哨兵就判定他掛了,單位毫秒
    sentinel down-after-milliseconds mymaster 30000
    #主機如果設置了 requirepass
    sentinel auth-pass mymaster pass
    
  13. 啟動哨兵

    cd /usr/local/redis/bin
    ./redis-sentinel ../conf/sentinel.conf 
    
  14. 查看哨兵是否啟動成功

    #查看進程
    ps -ef | grep redis
    #查看日志
    tail -f /usr/local/redis/logs/sentinel.log
    

    image-20210604172717670

  15. 測試集群是否搭建成功

    • 關閉或 kill 掉 master 上的 redis 服務,等待30秒,因為我們配置 30秒連接不上就認為他掛了

    • 查看 sentinel 日志

      image-20210604173005656

    • 在另外兩台 slave 上執行 **info replication **

      image-20210604173201098

      image-20210604173218272

  16. 重新啟動原來的主機,此時重啟之后它將會變為新主機的從機

    image-20210604173359818

常見問題

  1. 執行 make 時,出現 "fatal error: jemalloc/jemalloc.h: No such file or directory"

    執行=> make distclean && make

  2. 執行 make test 時,出現 "You need tcl 8.5 or newer in order to run the Redis test"

    執行=> yum install tcl

  3. 執行 ./redis-cli -p 6379 出現 connection refused

    使用 ./redis-cli -h <服務器IP> -p 6379 訪問

  4. 主從復制的時候,master 正常寫入但是 salve 讀取不到

    • 檢查一下 master 的 bind 設置,關於 bind 的正常理解: Redis的bind的誤區
    • 檢查一下 slave 的 masterauth 是否正確
    • 服務器的端口是否開通,防火牆是否攔截了
  5. 主機宕機,但是 sentinel 集群沒有重新進行選主

    • 如果使用 scp 命令拷貝的話,需要在 sentinel 從沒運行過的時候拷貝,或者進入配置文件,在末尾刪除程序運行自動生成的一些參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM