部署哨兵之前需要了解的基本事情
- 1.一個健壯的部署至少需要三個哨兵實例,并且使用奇數(shù)個Sentinel.
- 2.三個哨兵實例應(yīng)該放置在客戶使用獨立方式確認故障的計算機或虛擬機中。例如不同的物理機或不同可用區(qū)域的虛擬機。
- 3.sentinel + Redis實例不保證在故障期間保留確認的寫入,因為Redis使用異步復制。然而有方式部署哨兵使丟失數(shù)據(jù)限制在特定時刻,雖然有更安全的方式部署它。
- 4.你的客戶端要支持哨兵,流行的客戶端都支持哨兵,但不是全部。
- 5.沒有HA設(shè)置是安全的,如果你不經(jīng)常的在開發(fā)環(huán)境測試,在生產(chǎn)環(huán)境他們會更好。你可能會有一個明顯的錯誤配置只是當太晚的時候。
- 6.Sentinel,Docker,或者其他形式的網(wǎng)絡(luò)地址交換或端口映射需要加倍小心:Docker執(zhí)行端口重新映射,破壞Sentinel自動發(fā)現(xiàn)其他的哨兵進程和master的slave列表。稍后在這個文檔里檢查關(guān)于Sentinel和Docker的部分,了解更多信息。
1.redis環(huán)境:
- 操作系統(tǒng):阿里云Centos 6.8
- Redis版本:Redis-3.2.9
| 角色 | IP地址 | 端口號 |
|---|---|---|
| Redis Master | 10.169.28.143 | 6379 |
| Redis Slave01 | 10.28.10.103 | 6379 |
| Redis Slave02 | 10.174.238.225 | 6379 |
| Redis Sentinel | 10.169.28.143 | 26379 |
| Redis Sentinel | 10.28.10.103 | 26379 |
| Redis Sentinel | 10.174.238.225 | 26379 |
2.安裝Redis主從系統(tǒng):
從官網(wǎng)下載redis-3.2.9,并且安裝。
2.1 安裝redis
$ wget http://download.redis.io/releases/redis-3.2.9.tar.gz
$ tar xzf redis-3.2.9.tar.gz
$ cd redis-3.2.9
$ make && make install
2.2 配置master上的redis.conf
bind 10.169.28.143
port 6379
daemonize yes //啟動redis后臺運行
masterauth 123456 //master的密碼,如果redis設(shè)置了密碼,主從密碼要設(shè)置成一樣的。
requirepass 123456
logfile "/var/log/redis/redis.log"
2.3 配置slave上的redis.conf。另外一個類似
bind 10.28.10.103
port 6379
daemonize yes //啟動redis后臺運行
slave 10.169.28.143 6379
masterauth 123456 //master的密碼,如果redis設(shè)置了密碼,主從密碼要設(shè)置成一樣的。
requirepass 123456
logfile "/var/log/redis/redis.log"
2.4 配置完成以后測試一下主從是否同步正確。
依此啟動master redis和slave redis
啟動方法:
$ ./src/redis-server redis.conf
在mster上創(chuàng)建:
$ redis-cli -h 10.169.28.143 -p 6379 -a 123456
10.169.28.143:6379> set name abc
OK
10.169.28.143:6379> get name
"abc"
在從庫上面查看:
$ redis-cli -h 10.28.10.103 -p 6379 -a 123456
10.28.10.103:6379>get name
"abc"
3.搭建Sentinel系統(tǒng)
修改第一個Sentinel實例的配置文件 sentinel.conf ,配置如下:
bind 10.169.28.143
port 26379
daemonize yes
sentinel monitor mymaster 10.169.28.143 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel auth-pass mymaster 123456
logfile /var/log/redis/redis-sentinel.log
修改第二個Sentinel實例的配置文件 sentinel.conf ,配置如下:
bind 10.28.10.103
port 26379
daemonize yes
sentinel monitor mymaster 10.169.28.143 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel auth-pass mymaster 123456
logfile /var/log/redis/redis-sentinel.log
修改第三個Sentinel實例的配置文件 sentinel.conf ,配置如下:
bind 10.174.238.225
port 26379
daemonize yes
sentinel monitor mymaster 10.169.28.143 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel auth-pass mymaster 123456
logfile /var/log/redis/redis-sentinel.log
然后分別在三臺機器上執(zhí)行以下命令啟動 sentinel 實例。
$ ./src/redis-sentinel sentinel.conf
至此,redis sentinel 系統(tǒng)搭建完成
4.測試redis 是否主從切換
4.1 在10.169.28.143服務(wù)器上查看redis的主從信息
$ ./src/redis-cli -h 10.169.28.143 -p 6379 -a 123456 info Replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.28.10.103,port=6379,state=online,offset=463,lag=0
slave1:ip=10.174.238.225,port=6379,state=online,offset=463,lag=1
4.2 在 10.28.10.103 服務(wù)器上查看redis的主從信息
$ ./src/redis-cli -h 10.28.10.103 -p 6379 -a 123456 info Replication
# Replication
role:slave
master_host:10.169.28.143
master_port:6379
4.3 在master服務(wù)器上作下線操作
$ ./src/redis-cli -h 10.169.28.143 -p 6379 -a 123456 shutdown
4.4 過了一會可以在其他slave上看見新的master信息
./src/redis-cli -h 10.28.10.103 -p 6379 -a 123456 info Replication
# Replication
role:slave
master_host:10.174.238.225
master_port:6379
slave.png
出現(xiàn)如圖所示及為主從切換成功。
4.5 當原master(10.169.28.143)重新上線以后,會自動加入到群組,并且變新master的slave
$ ./src/redis-cli -h 10.169.28.143 -p 6379 -a 123456 info Replication
# Replication
role:slave
master_host:10.174.238.225
master_port:6379
參考資料
https://redis.io/download
https://redis.io/topics/sentinel
https://leehao.me/Redis-Sentinel-%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/
http://redis.majunwei.com/topics/sentinel.html
http://mp.weixin.qq.com/s/YSaRfpIzArqbeyRcyzp4tw
