1. 程式人生 > >Redis叢集生產環境原始碼安裝

Redis叢集生產環境原始碼安裝

安裝redis叢集  根據各人單位生產環境使用者搭建
一、安裝環境
    作業系統:centos7.6
 關閉防火牆、關閉selinux
 redis1:192.168.26.128
 redis2:192.168.26.129
二、使用者環境
 groupadd usr
 useradd -g usr -md /usr/users/sw sw
 cd /usr/users/sw/
 mkdir  app;mkdir  backup
 cd app
 mkdir redis
 make /applog
 chown -R sw:usr /usr/users/sw
 chown -R sw:usr /applog
三、系統引數修改,有幾個系統引數需要調整,否則,在啟動redis時會有幾個WARNING:
 1.redis的配置檔案中,預設的最大客戶端連線數為10000,要求至少最大檔案描述符要10032個,我 們一般系統都會設定為65535
  vim /etc/security/limits.conf新增以下內容
   *  soft   nproc  12000
   *  hard  nproc   12000
   *  soft   nofile  65535
   *  hard  nofile  65535
   *  hard  stack    10240    
   *  soft  stack    10240 
   *  hard  sigpending  127934
   *  soft  sigpending  127934
  vim /etc/security/limits.d/20-nproc.conf   修改
   *  soft   nproc  12000
 2.在/etc/sysctl.conf中加入 net.core.somaxconn=511 ,然後執行 sysctl ‐p 生效,解決預設設 置為一個較低的值128的警告。
 3. overcommit_memory 設定為0,在低記憶體環境下的後臺儲存可能失敗。在檔案 /etc/sysctl.conf 中添 加 vm.overcommit_memory = 1 ,然後重啟或執行命令 sysctl vm.overcommit_memory=1
 4.如果伺服器的"Transparent Huge Pages (THP)"支援在核心中啟用了。這將在使用Redis時造成延遲和 記憶體使用問題。使用root執行命令
      echo never > /sys/kernel/mm/transparent_hugepage/enabled ,並且將它新增到你的/etc/rc.local中使在 重啟後仍然保持生效來修復這個問題。在THP禁用之後Redis必須重啟。
四、安裝GCC編譯工具,不然會有編譯不過的問題
    yum install gcc g++ gcc-c++ make -y
五、下載、解壓、編譯安裝
     su - sw
  cd backup
  wget http://download.redis.io/releases/redis-4.0.1.tar.gz
  tar -xvf redis-4.0.1.tar.gz
  cd redis-4.0.1
  make
  make PREFIX=/usr/users/sw/app/redis install
  編譯完成,redis已經安裝在/usr/users/sw/app/redis/bin下面,幾個檔案大致作用為
  redis‐benchmark:效能測試工具,測試Redis在你的系統及配置下的讀寫效能
  redis‐check‐aof:用於修復出問題的AOF檔案
  redis‐check‐dump:用於修復出問題的dump.rdb檔案
  redis‐cli:Redis命令列互動客戶端
  redis‐sentinel:redis‐server別名
  redis‐server:Redis伺服器啟動程式
六、redis的配置修改
    在原始碼目錄中,將配置檔案模板redis.conf複製到redis配置檔案目錄中app/redis/conf/,因為一個虛擬機器要啟動單個
 redis節點,所以配置檔案要複製三份,分別用於用於規劃的伺服器埠號命名區別
 mkdir ~/app/redis/conf
 cp backup/redis-4.0.1/redis.conf ~/app/redis/conf/redis8601.conf
七、編輯redis8601.conf檔案
    1. 設定bind地址為本機IP,&&為本機IP,需要改為其他節點機器可訪問的ip,否則建立叢集時無法訪問對應的埠,無法建立叢集
     bind 192.168.26.*
 2. 修改daemonize為yes,即以後臺程式方式執行
  daemonize yes
 3. 修改服務埠
  port 8601
 4. 修改pid生成路徑
  pidfile "/usr/uses/sw/app/redis/run/redis8601.pid"
     需要手動建立run目錄存放pid路徑
  mkdir /usr/users/sw/app/redis/run/
 5.  修改日誌檔案的位置
  logfile "/applog/redis8601/redis.log"
        需要手動建立日誌目錄
        mkdir /applog/redis8601/
    6. 修改工作目錄,資料檔案,append only檔案等會在該目錄生成
     dir "/applog/redisdump"
        需要手動建立該目錄
        mkdir /applog/redisdump
 7.  資料檔名
  dbfilename "dump8601.rdb"
 8.  是否每次更新操作進行日誌記錄
     appendonly yes
  檔名設定
  appendfilename "appendonly8601.aof"
 9.  是否支援叢集
  cluster-enabled yes
 10. 叢集配置檔名
  cluster-config-file "nodes-8601.conf"
八、複製redis8601.conf檔案為另外兩個節點修改
 1. cp redis8601.conf redis8602.conf
  cp redis8601.conf redis8603.conf
    2.統一替換配置檔案redis8602.conf和redis8603.conf的8601為8602和8603
  sed -i 's/8601/8602/g' redis8602.conf
  sed -i 's/8601/8603/g' redis8603.conf
 3.要手動建立8602和8603的日誌目錄
  mkdir /applog/redis8602
  mkdir /applog/redis8603
九、啟動redis各節點服務
    1、cd ~/app/redis/bin
    ./redis-server ~/app/redis/conf/redis8601.conf
    ./redis-server ~/app/redis/conf/redis8602.conf
    ./redis-server ~/app/redis/conf/redis8603 .conf
十、指令碼啟動
 mkdir ~/bin
 vim redis.sh
   #!/bin/bash
   case $1 in
     start)
      cd /usr/users/sw/app/redis/bin
      ./redis-server /usr/users/sw/app/redis/conf/redis8601.conf
      ./redis-server /usr/users/sw/app/redis/conf/redis8602.conf
      ./redis-server /usr/users/sw/app/redis/conf/redis8603.conf       if [ "$?" -eq 0 ];then
        ps -ef|grep redis|grep -v grep
        echo "redis is started"
      else
        echo "redis is error"
        exit 10
      fi
     ;;
     stop)
       for pid in $(ps -ef|grep redis|grep -v "grep"|egrep -v "${0}"|awk -F " " '{print $2}'|uniq);do
         kill -9 $pid >> /dev/null 2>&1
       done
       #echo "redis is stopped"
     ;;
     restart)
       ${0} stop
       ${0} start
     ;;
   esac  
十一、叢集搭建
    1.yum -y install ruby-devel  ruby-irb  ruby-libs ruby-rdoc ruby rubygems-devel rubygems
 2. 下載redis的gem並上傳至伺服器
  https://rubygems.org/downloads/redis-3.3.0.gem
  安裝redis-gem
  gem install --local redis‐3.3.3.gem
  檢視安裝
  gem list redis
 3.使用 redis‐trib.rb 指令碼建立叢集 redis‐trib.rb 在redis的原始碼包的src目錄中:
   cd ~/backup/redis-4.0.1/src/
十二、 為redis各節點設定密碼 為redis各節點設定密碼,應用設定裡也要設定redis的密碼,如果密碼不匹配,則應用無法連線上 redis。
     密碼均設定為:111111   修改配置檔案 直接修改配置檔案的方法,需要修改完後重啟redis服務。
 1.在每個節點的配置檔案末尾加上: 然後重啟所有節點的redis使密碼生效即可。 masterauth "111111" requirepass "111111"
     vim redis8601.conf 新增
  masterauth "111111"
  requirepass "111111"
 2. 已設定了密碼的節點建立叢集,但此時建立叢集,redis‐trib.rb指令碼會提示無法連線到redis節點,這是因為ruby的redis gem中預設的客戶 端連線密碼為空,
    所以導致redis‐trib.rb指令碼無法建立叢集。 可以修改ruby的redis gem的預設redis客戶端密碼即可
  vi /usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb 如果redis‐3.3.3.gem是使用非root安裝的,則在使用者主目錄下搜尋client.rb即可找到。
  使用root編輯redis gem 裡的client.rb檔案: 第15行為設定密碼,預設為空: :password => "111111", 修改完後,再回去執行redis‐trib.rb即可連線上redis進行叢集操作。
   vi /usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb
        15       :password => "111111",  
 3.然後進行叢集搭建
   ./redis-trib.rb create --replicas 1 192.168.26.128:8601 192.168.26.128:8602 192.168.26.128:8603 192.168.26.129:8601 192.168.26.129:8602 192.168.26.129:8603
    4.如果有報錯[ERR] Node 192.168.26.129:8601 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    刪除各個節點下面的redis.log和dump下面的aof,rdb,conf檔案
十三、檢視叢集狀態
     ./redis-trib.rb check 192.168.26.129:8602