Redis主從和哨兵模式搭建
一、系統環境和redis版本:
-
- 系統:CentOS-7-x86_64
- Redis:redis-5.0.2
- 環境配置:一臺master,二臺slave
名稱 |
IP |
埠 |
密碼 |
Master |
192.168.8.111 |
6379 |
1+1=2?Yes |
Slave |
192.168.8.112 |
6379 |
1+1=2?Yes |
slave |
192.168.8.113 |
6379 |
1+1=2?Yes |
二、安裝配置CentOS7:
-
- 安裝系統太簡單不描述,linux主要系統目錄如下:
/etc/sysconfig/network-scripts/ifcfg-eth0 #網絡卡配置檔案 /etc/resolv.conf #客戶端DNS /etc/hosts #本地的主機名解析的檔案 /etc/sysconfig/network #主機名 /etc/fstab #開機磁碟自動掛載的檔案 /etc/rc.local #把命令寫在此處,系統自啟動時會執行 /etc/inittab #開機載入先後級別的指令碼 /etc/init.d # yum、rpm安裝的軟體預設的啟動命令放在目錄下 /etc/profile #全域性(所有使用者) /etc/bashrc #全域性(所有使用者) ~/.bashrc #區域性(當前使用者) /usr/local #C盤Program預設的安裝目錄 /usr/src #原始碼安裝目錄 /var/log/messages #系統日誌 /var/log/secure #安全日誌 |
- 配置網路:
vim /etc/sysconfig/network-scripts/ifcfg-eth0 # 網絡卡配置檔案一般為ifcfg-xxxxxx
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth0 UUID=7a752861-020f-427c-bc29-fd8f1eeb80bc DEVICE=eth0 ONBOOT=yes IPADDR=192.168.8.111 PREFIX=24 GATEWAY=192.168.8.1 DNS1=114.114.114.114 |
Service network restart
Ip addr
- 防火牆策略:
firewall-cmd --zone=public --add-port=6379/tcp --permanent # 開放6379埠
firewall-cmd --zone=public --remove-port=6379/tcp --permanet # 刪除6379埠
firewall-cmd --zone=public --add-port=26379/tcp --permanent # 開放26379埠
firewall-cmd --zone=public --remove-port=26379/tcp --permanet # 刪除26379埠
firewall-cmd --reload # 配置立即生效
firewall-cmd --zone=public --list-ports # 檢視當前防火牆開放的埠
systemctl stop firewalld.service # 關閉防火牆
firewall-cmd --state # 檢視防火牆狀態
netstat -lnpt # 檢視埠開放狀態
ss -tanl #檢視埠
- 配置環境:
yum-yinstallgccautomakeautoconflibtoolmake
yum -y install tcl
yum -y install telnet
yum -y install openssh*
systemctl enable sshd
vim /etc/ssh/sshd_config # 配置ssh檔案
Port 22 ListenAddress 192.168.8.111 PermitRootLogin yes PasswordAuthentication yes AllowUsers root #新增允許遠端SSH登陸的使用者名稱,空格隔開(需reboot) |
三、配置redis:
-
- 上傳或wget得到redis-5.0.2.tar.gz壓縮包:
cd /root
wget http://download.redis.io/releases/redis-5.0.2.tar.gz
- 安裝redis:
tar -xzvf redis-5.0.2.tar.gz
ll
cd redis-5.0.2 #進入redis目錄
make # 編譯
make install # 執行安裝,可用引數指定安裝路徑”PREFIX=/xxx/xxx”
- 測試redis正確安裝:
redis-server redis.conf # 啟動redis服務,順便看一下是否安裝成功
redis-cli -h 192.168.8.111 -p 6379 -a 1+1=2?Yes # 登陸redis命令介面
redis-cli -h 192.168.8.111 -p 6379 -a 1+1=2?Yes shutdown # 關閉redis程序或kill
- 配置主從複製模式:
- Master端,修改conf檔案:
vim /root/redis-5.0.2/redis.conf #修改redis配置,完成後可用mv改名
protected-mode no # 允許遠端訪問 daemonize yes # redis服務後臺執行 port 6379 # 埠號 logfile 7000.log # 日誌檔案及路徑 dir ./ # 資料檔案目錄 requirepass 1+1=2?Yes # 配置redis登陸密碼 masterauth 1+1=2?Yes # 配置哨兵模式選舉時的內部訪問密碼 bind 192.168.8.111 127.0.0.1 # 配置外網訪問IP # AOF 資料持久化,主從模式必須開啟 appendonly yes appendfilename aof-7000.aof appendfsync everysec no-appendfsync-on-rewrite yes auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb |
- Slave端,修改conf配置檔案:
vim /root/redis-5.0.2/redis.conf #修改redis配置,完成後可用mv改名
protected-mode no # 允許遠端訪問 daemonize yes # redis服務後臺執行 port 6379 # 埠號 logfile 7000.log # 日誌檔案及路徑 dir ./ # 資料檔案目錄 requirepass 1+1=2?Yes # 配置redis登陸密碼 slaveof 192.168.8.111 6379 # 繫結master的IP和埠 masterauth 1+1=2?Yes # 配置哨兵模式選舉時的內部訪問密碼 bind 192.168.8.111 127.0.0.1 # 配置外網訪問IP # AOF 資料持久化,主從模式必須開啟 appendonly yes appendfilename aof-7000.aof appendfsync everysec no-appendfsync-on-rewrite yes auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb |
- 配置redis服務系統啟動:
cd /root/redis-5.0.2/untils/
./install_server.sh # 執行redis提供的系統啟動解決方案,一路回車即可
(注:執行完畢,會自動生成”/etc/init.d/redis_6379”指令碼檔案)
chkconfig –add redis_6379 # 將生成的指令碼寫入自定義系統服務
systemctl start redis_6379 # 啟動服務,重啟也成
systemctl daemon-reload # 重啟系統也可以
- 配置哨兵模式:
- 哨兵模式Sentinel架構示意圖:
- 配置三臺機器的conf,以啟動Sentinel:
cd /root/redis-5.0.2
vim sentinel-26379.conf
port 26379 # 指定哨兵模式埠 daemonize yes #後臺執行 logfile "/root/redis-5.0.2/26379.log" # 日誌位置 dir "./" # 資料目錄 sentinel monitor mymaster 192.168.8.111 6379 2 # 指定監控主庫mymaster的IP、埠、2臺sentinel選舉 sentinel down-after-milliseconds mymaster 30000 # 指定失效30秒後mymaster為不可用 sentinel parallel-syncs mymaster 1 # 主備時只允許1臺slave同步 sentinel failover-timeout mymaster 15000 sentinel auth-pass mymaster 1+1=2?Yes # 主從密碼必須一致 bind 192.168.8.111 127.0.0.1 # 對映對外IP |
redis-sentinel sentinel-26379.conf
# 其餘2臺slave的配置同上,只是bind對映的IP換成各自對外IP即可
- 測試Sentinel:
當主mymaster故障關閉時,兩臺slavewf 選舉出新的mymaster,自動切換主從,日誌記錄如下(可放大200%檢視具體內容):
- 為了sentinel更好的執行,需要修改一些系統限制:
- 修改open files:
ulimit -n 10032 # 系統預設是1024
ulimit -a # 再檢視確認一下修改成功,重啟後失效
永久修改open files數量,需要修改系統配置檔案limits.conf如下: vim /etc/security/limits.conf
|
- 修改core.somaxconn:
vim /etc/sysctl.conf
net.core.somaxconn = 1024 #寫入sysctl.conf,使系統預設128改成1024 |
sysctl -p #過載sysctl.conf配置
- 配置sentinel服務系統執行:
chmod +x /etc/rc.d/rc.local #賦許可權
chmod +x /etc/rc.local #賦軟連結許可權
ll /etc/rc.* #檢視確認一下賦rc.local的許可權成功
vim /etc/rc.local
redis-sentinel /root/redis-5.0.2/sentinel-26379.conf |
reboot #或init 6重啟生效
- Redis的一些常用操作命令:
redis-server redis.conf # 以redis.conf配置啟動redis
redis-sentinel sentinel-26379.conf # sentinel-26379.conf配置啟動哨兵模式
redis-cli -h 192.168.8.111 -p 6379 -h 1+1=2?Yes # 登陸redis命令介面
set #新增記錄
get #獲取一條記錄
keys * #顯示當前redis中所有的記錄
info server #查詢當前redis資訊
info replication #查詢主從複製狀態和關係
info keyspace #查詢keys所有數量
flushdb #清庫