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資訊:
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
- 哨兵執行情況測試
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程序,則配置生效。