1. 程式人生 > >Redis 主從+哨兵安裝與部署

Redis 主從+哨兵安裝與部署

1 前言

  redis叢集常見的部署方式有:
  • 採用主從複製 + sentinel(哨兵)監控的方式;
  • 採用redis-cluster叢集(去中心化分片叢集)的方式
  本文以筆者內部專案為例,採用主從複製+哨兵的方式部署。

2 版本說明

  • 三臺伺服器(一主兩從):192.168.1.60 為主伺服器,192.168.1.59 和192.168.1.58 為從伺服器
  • 作業系統:CentOS Linux release 7.4.1708 (Core)
  • JDK版本:jdk 1.8.0_171
  • REDIS版本:redis 4.0.10

3 配置主伺服器 192.168.1.60

  • 建立安裝資料夾,把下載的redis版本放到資料夾中
mkdir -p /data/software
  • redis原始碼獲取
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
  • 若提示找不到wget命令,需先安裝wget工具
yum -y install wget
  • 解壓,並切換到redis根目錄下
tar -zvxf redis-4.0.10.tar.gz
cd ./redis4.0.10
  • 編譯和安裝redis
make && make install
  • 建立redis儲存資料檔案的資料夾redis-data
mkdir /data/software/redis 4.0.10/redis-data
  • 建立統一儲存Log日誌的資料夾LOG
mkdir /data/log/redis
  • 修改redis配置檔案,修改的內容如下所示
vim ./redis.conf

--- 將redis設定為守護程序的方式執行,啟用後redis會在/var/run資料夾下生成記錄pid的檔案:”daemonize yes”

--- 保護模式預設開啟,當未繫結ip或設定密碼時,無法進行非本地連線,可關閉保護模式(因下面已繫結ip及設定密碼,這一步配置可忽略,否則加上):”protected-mode no”

--- 將繫結ip修改為本機ip:即”bind 192.168.1.60“

--- 指定記錄日誌路徑:logfile "/data/log/redis/redis.log"

--- 指定redis工作路徑,redis的資料儲存到磁碟將在此路徑下(檔名預設為dump.rdb): “dir  ‘/data/………/redis-data’ “

--- 新增客戶端連線redis服務時的訪問密碼(*號代表自己設定的密碼): “requirepass *** ”

--- 配置從伺服器訪問主伺服器密碼: “masterauth *** ”

常規配置按以上配置即可,需進一步配置redis其他引數,如快照或AOF等,可參考redis.conf詳細配置說明:https://www.cnblogs.com/qq78292959/archive/2013/09/21/3331032.html

  • 啟動redis服務
./src/redis-server ./redis.conf
  • 啟動服務後,可能出現下列WARNING資訊:
① overcommit_memory的警告資訊(下圖所示),表示overcommit_memory當前設定為0,當系統記憶體不足時,記憶體申請可能會不成功。這可能會導致可用記憶體低時,redis無法儲存日誌等問題。 解決辦法:截圖的警告已給出解決辦法,分別執行以下三個指令,將overcommit_memory設定為1後重新執行檔案:
echo "vm.overcommit_memory=1" > /etc/sysctl.conf
reboot
echo 1 > /proc/sys/vm/overcommit_memory
  ②  警告核心引數預設128,這對於負載很大的服務是不夠的。 解決方法,執行以下指令:
echo 511 > /proc/sys/net/core/somaxconn

4  配置從伺服器192.168.1.59 和 192.168.1.58

  redis安裝步驟與主伺服器操作相同,只是修改配置檔案時略有不同:
  • 修改redis配置檔案
vim ./redis.conf

--- 將redis設定為守護程序的方式執行:”daemonize yes”

--- 將繫結ip修改為本機ip:”bind 192.168.1.59 “

--- 配置跟隨主伺服器: “slaveof 192.168.1.60 6379”

--- 指定記錄日誌路徑:logfile "/data/log/redis/redis.log"

--- 指定redis工作路徑: “dir  ‘/data/………/redis-data’ “

--- 新增客戶端連線redis服務時的訪問密碼: “requirepass *** ”

--- 配置從伺服器訪問主伺服器密碼: “masterauth *** ”


5 redis主從測試

  • redis客戶端連線主伺服器,新增鍵值對
./src/redis-cli -h 192.168.1.60 -p 6379 -a ***
-> set name testredis
-> get name 
  • redis客戶端連線其中一臺從伺服器,獲取鍵值對的值
./src/redis-cli -h 192.168.1.58 -p 6379 -a [email protected]
-> get name
  在主伺服器上寫入鍵值對後,從伺服器能夠讀取,證明配置正常。

6 配置哨兵,每臺伺服器配置1個哨兵,在三臺伺服器均進行相同配置

  • 切換到redis根目錄下,配置哨兵
cd ./redis4.0.10
vim ./sentinel.conf

--- 哨兵監控主節點的ip & port:sentinel monitor mymaster 192.168.1.60 6379 2

--- 將redis設定為守護程序的方式執行:”daemonize yes”

--- 關閉保護模式:”protected-mode no”

--- 哨兵工作目錄為redis根目錄:”dir ‘/data/software/redis4.0.10’ “

--- 指定記錄日誌路徑:logfile "/data/log/redis/sentinel.log"

--- 配置主節點多少毫秒無響應後被視為主觀下線(sdown):”sentinel down-after-milliseconds mymaster 10000”

--- 配置主服務客觀下線時,進行故障轉移的時效,在這個時間段內如果轉移沒完成,則本次轉移失效:”sentinel failover-timeout mymaster 30000”

--- 配置哨兵sentinel連線主從的密碼:”sentinel auth-pass mymaster *** ”

  注意點:哨兵配置檔案中,若沒有配置連線伺服器的密碼,啟動後無法正常監控伺服器。

  • 三臺伺服器均啟動哨兵
./src/redis-sentinel ./sentinel.conf
  • 哨兵執行情況測試
  進入主伺服器192.168.1.60,殺死redis-server程序:
ps -ef|grep redis-server
kill 主服務程序號
    檢視sentinel.log 日誌,日誌記錄主服務主觀停止(sdown),哨兵進行投票(vote)後判斷主伺服器客觀停止(odown),繼續檢視日誌,哨兵將主服務切換(switch)到其他從伺服器,證明哨兵配置生效。

7 配置redis服務和哨兵 開啟自啟動

  • 編輯rc.local

  注:rc.local檔案是系統全域性指令碼檔案,會在其他開機程序指令碼檔案執行完畢後執行該檔案。

vim /etc/rc.d/rc.local
在rc.local檔案末尾加入命令:
# start the redis-server 啟動服務
/data/software/redis4.0.10/src/redis-server "data/software/redis4.0.10/redis.conf"

# start the redis-sentinel 啟動哨兵
/data/software/redis4.0.10/src/redis-sentinel
"data/software/redis4.0.10/sentinel.conf"
  • 為rc.local增加可執行許可權
chmod +x /etc/rc.d/rc.local
  • 重啟系統,檢視服務是否自動開啟
ps -ef|grep redis
  若看到redis-server和redis-sentinel程序,則配置生效。