@
目錄- 前言
- 一、先裝好Redis
- 一、主從復制
- 1.先在主機192.168.2.237的/usr/local目錄下新建redisfile檔案,并將之前安裝好的redis檔案復制到該目錄下,然后redis目錄下創建redis的組態檔redis-6556.conf
- 2. 其次在從機192.168.2.37(我這里將redis的兩臺從機都部署在同一臺虛擬機的不同埠)的/usr/local目錄新建redisfile檔案夾和redisfile2檔案夾,并將之前安裝好的redis檔案分別復制到以上兩個檔案夾目錄下,以下在各自的redis目錄下創建創建redis的組態檔步驟一樣,埠及地址做下改變即可,我在創建的兩個redis組態檔分別命名為redis-6557.conf和redis-6558,其中redis-6557.conf配置如下:
- 二、哨兵模式
- 1. 先在主機192.168.2.237的redis目錄下創建sentinel的組態檔sentinel-6776.conf
- 2.其次在從機192.168.2.37各自的redis目錄下創建sentinel的組態檔,與上步驟一樣,埠及地址做下改變即可,我在創建的兩個sentinel組態檔分別命名為sentinel-6777.conf和sentinel-6778,其中sentinel-6777.conf配置如下:
- 三、運行
- 1.先運行redis
- 1.1 先運行192.168.2.237的主機
- 1.2 再運行192.168.2.37的兩臺從機
- 2.再運行sentinel
- 2.1 先運行192.168.2.237的主機
- 2.2 再運行192.168.2.37的兩臺從機
- 3.試試故障轉移
- 1.先運行redis
- 四、其他
- 踩到的坑如下,待下回講解主從復制及哨兵模式與java的spring專案整合一起分析解答,
前言
一、先裝好Redis
網上有很多教程,這里不做贅述,只提我之前踩過的坑:
caused by:io.lettuce.core.redisException:connot retrieve initial cluster partitions from initial URIs
原因:因為埠未開放
解決:以開放6556埠為例
#查看開放的埠
$ firewall-cmd --list-ports
#查詢6556埠是否開放
$ firewall-cmd --query-port=6556/tcp
firewall-cmd --add-port=6556/tcp --permanent
#重新加載生效
firewall-cmd --reload
一、主從復制
1.先在主機192.168.2.237的/usr/local目錄下新建redisfile檔案,并將之前安裝好的redis檔案復制到該目錄下,然后redis目錄下創建redis的組態檔redis-6556.conf
daemonize yes #守護執行緒
port 6556 #埠
logfile "6556.log" #日志檔案
dir "/usr/local" #持久化檔案目錄路徑
requirepass "123456" #需要密碼
masterauth "123456" #主機密碼
#系結虛擬機地址及本地映射地址
bind 192.168.2.237 127.0.0.1
appendonly yes #開啟持久化aof模式
appendfilename "aof-6556.aof" #aof檔案夾
appendfsync everysec #每秒更新
no-appendfsync-on-rewrite yes #同步資料時不重寫
auto-aof-rewrite-percentage 100 #增加倍數達到100%重寫
auto-aof-rewrite-min-size 64mb #重寫最低檔案大小為64mb
2. 其次在從機192.168.2.37(我這里將redis的兩臺從機都部署在同一臺虛擬機的不同埠)的/usr/local目錄新建redisfile檔案夾和redisfile2檔案夾,并將之前安裝好的redis檔案分別復制到以上兩個檔案夾目錄下,以下在各自的redis目錄下創建創建redis的組態檔步驟一樣,埠及地址做下改變即可,我在創建的兩個redis組態檔分別命名為redis-6557.conf和redis-6558,其中redis-6557.conf配置如下:
port 6557
daemonize yes
logfile "6557.log"
dir "/usr/local"
requirepass "123456"
masterauth "123456"
bind 192.168.2.37 127.0.0.1
appendonly yes
appendfilename "aof-6557.aof"
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
二、哨兵模式
1. 先在主機192.168.2.237的redis目錄下創建sentinel的組態檔sentinel-6776.conf
port 6776 #埠
daemonize yes #守護執行緒
logfile "6776.log" #日志
dir "/usr/local" #持久化目錄
#sentinel監聽主機為master及其地址和埠
#且當有2個sentinel認為master失效后才算真正失效
sentinel monitor master 192.168.2.237 6556 2
#當達到15000毫秒(默認30s),master失效才被sentinel認為失效
sentinel failover-timeout master 15000
#連接master和slave的密碼,且master和slave的密碼須一致
sentinel auth-pass master 123456
#發生failover時主備切換有1個slave同時對新的master進行同步
sentinel parallel-syncs master 1
#該sentinel系結的地址及埠
bind 192.168.2.237 127.0.0.1
2.其次在從機192.168.2.37各自的redis目錄下創建sentinel的組態檔,與上步驟一樣,埠及地址做下改變即可,我在創建的兩個sentinel組態檔分別命名為sentinel-6777.conf和sentinel-6778,其中sentinel-6777.conf配置如下:
port 6777 #埠
daemonize yes #守護執行緒
logfile "6777.log" #日志
dir "/usr/local" #持久化目錄
#sentinel監聽主機為master及其地址和埠
#且當有2個sentinel認為master失效后才算真正失效
sentinel monitor master 192.168.2.237 6556 2
#當達到15000毫秒(默認30s),master失效才被sentinel認為失效
sentinel failover-timeout master 15000
#連接master和slave的密碼,且master和slave的密碼須一致
sentinel auth-pass master 123456
#發生failover時主備切換有1個slave同時對新的master進行同步
sentinel parallel-syncs master 1
#該sentinel系結的地址及埠
bind 192.168.2.37 127.0.0.1
三、運行
1.先運行redis
1.1 先運行192.168.2.237的主機
我直接在usr/local目錄下運行:
./redisfile/redis/src/redis-server ./redisfile/redis/redis-6556.conf
1.2 再運行192.168.2.37的兩臺從機
這里直接在/usr/local目錄下撰寫一個.sh腳本同時啟動兩個redis服務,節省后面每次啟動的時間,腳本start-all.sh
如下:
./redisfile/redis/src/redis-server ./redisfile/redis/redis-6557.conf
./redisfile2/redis/src/redis-server ./redisfile2/redis/redis-6558.conf
撰寫好后要賦予其讀寫執行的權限,最后啟動
chmod +x start-all.sh
sh start-all.sh
2.再運行sentinel
2.1 先運行192.168.2.237的主機
我直接在usr/local目錄下運行:
./redisfile/redis/src/redis-sentinel ./redisfile/redis/sentinel -6776.conf
2.2 再運行192.168.2.37的兩臺從機
這里直接在/usr/local目錄下撰寫一個.sh腳本同時啟動兩個sentinel 服務,節省后面每次啟動的時間,腳本start-all-sentinel.sh
如下:
./redisfile/redis/src/redis-sentinel ./redisfile/redis/sentinel-6777.conf
./redisfile2/redis/src/redis-sentinel ./redisfile2/redis/sentinel-6778.conf
撰寫好后要賦予其讀寫執行的權限,最后啟動
chmod +x start-all-sentinel.sh
sh start-all-sentinel.sh
待redis和sentinel都運行后,sentinel的組態檔也發生了改變,其中sentinel-6556.conf如下:
sentinel known-slave master 192.168.2.37 6557
sentinel known-slave master 192.168.2.37 6558
sentinel known-sentinel master 192.168.2.37 6778 75f0266605bfa79a173076e6394d1c5f0032ebd6
sentinel known-sentinel master 192.168.2.37 6777 03e6af6441ffac5c9602c693974e299136ac4632
3.試試故障轉移
現在主機是6556,我們把6556的redis服務停止,同時停止6778的sentinel服務,看sentinel是否能夠選舉出新的主機并切換過去,
## 先在主機192.168.2.237找出6556redis的運行行程
ps -ef|grep redis
## 再殺死行程
kill -9 76529
同上從機192.168.2.37找出6778sentinel的運行行程并殺死
過15秒后看sentinel-6776.conf的主機master已經由6556變成6558了
port 6776
daemonize yes
logfile "6776.log"
dir "/usr/local"
sentinel myid 72ea9a3eb747027d16a2911abe372e7f5a24b620
sentinel monitor master 192.168.2.37 6558 2
四、其他
踩到的坑如下,待下回講解主從復制及哨兵模式與java的spring專案整合一起分析解答,
這里簡單說下:master可讀可寫,另外一臺salve(經三次測驗每次都是下一次宕機后不會成為主機的從機)竟然也是可讀可寫,但是其中的資料并不會同步到master和另一臺slave,包括主機切換后也不會,
隨心所往,看見未來,Follow your heart,see night!
歡迎點贊、關注、留言,一起學習、交流!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/499939.html
標籤:Java
上一篇:Java連接資料庫(增刪改查)
