網(wǎng)站設(shè)置反爬蟲的常用方法有哪些中國輿情網(wǎng)
哨兵(Sentinel)模式
1 . 什么是哨兵模式?
反客為主的自動(dòng)版,能夠自動(dòng)監(jiān)控master是否發(fā)生故障,如果故障了會(huì)根據(jù)投票數(shù)從slave中挑選一個(gè)
作為master,其他的slave會(huì)自動(dòng)轉(zhuǎn)向同步新的master,實(shí)現(xiàn)故障自動(dòng)轉(zhuǎn)義
2 . 原理
-
sentinel會(huì)按照指定的頻率給master發(fā)送ping請(qǐng)求,看看master是否還活著,若master在指定時(shí)間內(nèi)未
正常響應(yīng)sentinel發(fā)送的ping請(qǐng)求,sentinel則認(rèn)為master掛掉了,但是這種情況存在誤判的可能,比
如:可能master并沒有掛,只是sentinel和master之間的網(wǎng)絡(luò)不通導(dǎo)致,導(dǎo)致ping失敗。 -
為了避免誤判,通常會(huì)啟動(dòng)多個(gè)sentinel,一般是奇數(shù)個(gè),比如3個(gè),那么可以指定當(dāng)有多個(gè)sentinel都
覺得master掛掉了,此時(shí)才斷定master真的掛掉了,通常這個(gè)值設(shè)置為sentinel的一半,比如sentinel
的數(shù)量是3個(gè),那么這個(gè)量就可以設(shè)置為2個(gè) -
當(dāng)多個(gè)sentinel經(jīng)過判定,斷定master確實(shí)掛掉了,接下來sentinel會(huì)進(jìn)行故障轉(zhuǎn)移:會(huì)從slave中投票
選出一個(gè)服務(wù)器,將其升級(jí)為新的主服務(wù)器, 并讓失效主服務(wù)器的其他從服務(wù)器slaveof指向新的主服務(wù) 器;
當(dāng)客戶端試圖連接失效的主服務(wù)器時(shí), 集群也會(huì)向客戶端返回新主服務(wù)器的地址, 使得集群可以 使用新主服務(wù)器代替失效服務(wù)器。
操作流程
1. 案例 - 配置1主2從3個(gè)哨兵
下面我們來實(shí)現(xiàn)1主2從3個(gè)sentinel的配置,當(dāng)從的掛掉之后,要求最少有2個(gè)sentinel認(rèn)為主的掛掉了,才進(jìn)行故障轉(zhuǎn)移。
為了方便,我們?cè)谝慌_(tái)機(jī)器上進(jìn)行模擬,我的機(jī)器ip是:192.168.200.129,通過端口來區(qū)分6個(gè)不同的
節(jié)點(diǎn)(1個(gè)master、2個(gè)slave、3個(gè)sentinel),節(jié)點(diǎn)配置信息如下
2 . 創(chuàng)建案例工作目錄:sentinel
執(zhí)行下面命令創(chuàng)建 /opt/sentinel 目錄,本次所有操作,均在 sentinel 目錄進(jìn)行。
# 方便演示,停止所有的redis
ps -ef | grep redis | awk -F" " '{print $2;}' | xargs kill -9
mkdir /opt/sentinel
cd /opt/sentinel/
3 . 將redis.conf復(fù)制到sentinel目錄
redis.conf 是redis默認(rèn)配置文件
cp /opt/redis-6.2.1/redis.conf /opt/sentinel/
4 . 創(chuàng)建master的配置文件:redis-6379.conf
在/opt/sentinel目錄創(chuàng)建 redis-6379.conf 文件,內(nèi)容如下,注意 192.168.200.129 是這個(gè)測(cè)試機(jī)器
的ip,大家需要替換為自己的
include /opt/sentinel/redis.conf
daemonize yes
bind 192.168.200.129
dir /opt/sentinel/
port 6379
dbfilename dump_6379.rdb
pidfile /var/run/redis_6379.pid
logfile "./6379.log"
5 . 創(chuàng)建slave1的配置文件:redis-6380.conf
在/opt/sentinel目錄創(chuàng)建 redis-6380.conf 文件,內(nèi)容如下,和上面master的類似,只是將6379換成6380了
include /opt/sentinel/redis.conf
daemonize yes
bind 192.168.200.129
dir /opt/sentinel/
port 6380
dbfilename dump_6380.rdb
pidfile /var/run/redis_6380.pid
logfile "./6380.log"
6 .創(chuàng)建slave2的配置文件:redis-6381.conf
在/opt/sentinel目錄創(chuàng)建 redis-6381.conf 文件,內(nèi)容如下**
include /opt/sentinel/redis.conf
daemonize yes
bind 192.168.200.129
dir /opt/sentinel/
port 6381
dbfilename dump_6381.rdb
pidfile /var/run/redis_6381.pid
logfile "./6381.log"
7 . 啟動(dòng)master、slave1、slave2
redis-server /opt/sentinel/redis-6379.conf
redis-server /opt/sentinel/redis-6380.conf
redis-server /opt/sentinel/redis-6381.conf
8 . 配置slave1為master的從庫
(1)執(zhí)行下面命令,連接slave1
redis-cli -h 192.168.200.129 -p 6380
(2)執(zhí)行下面命令,指定slave1的作為master的從機(jī)
slaveof 192.168.200.129 6379
(3)如下,使用 info replication 查看下slave1的主從信息
9 . 配置slave2為master的從庫
(1)執(zhí)行下面命令,連接slave2
redis-cli -h 192.168.200.129 -p 6381
(2)執(zhí)行下面命令,指定slave2的作為master的從機(jī)
slaveof 192.168.200.129 6379
(3)如下,使用 info replication 查看下slave2的主從信息
10 . 驗(yàn)證主從復(fù)制是否正常
10.1 運(yùn)行下面命令,連接master
redis-cli -h 192.168.200.129 -p 6379
10.2 運(yùn)行下面命令,查看master主從信息
info replication
slave2 信息
10.3 在master中執(zhí)行下面命令,寫入數(shù)據(jù)
flushdb
set name jack
10.4 如下,查看slave1中name的值
192.168.200.129:6381> get name
"jack"
數(shù)據(jù)一致,說明同步正常
11 .創(chuàng)建sentinel1的配置文件:sentinel-26379.conf
在/opt/sentinel目錄創(chuàng)建 sentinel-26379.conf 文件,內(nèi)容如下
# 配置文件目錄
dir /opt/sentinel/
# 日志文件位置
logfile "./sentinel-26379.log"
# pid文件
pidfile /var/run/sentinel_26379.pid
# 是否后臺(tái)運(yùn)行
daemonize yes
# 端口
port 26379
# 監(jiān)控主服務(wù)器master的名字:mymaster,IP:192.168.200.129,port:6379,最后的數(shù)字2表示當(dāng)
Sentinel集群中有2個(gè)Sentinel認(rèn)為master存在故障不可用,則進(jìn)行自動(dòng)故障轉(zhuǎn)移
sentinel monitor mymaster 192.168.200.129 6379 2
# master響應(yīng)超時(shí)時(shí)間(毫秒),Sentinel會(huì)向master發(fā)送ping來確認(rèn)master,如果在20秒內(nèi),ping
不通master,則主觀認(rèn)為master不可用
sentinel down-after-milliseconds mymaster 60000
# 故障轉(zhuǎn)移超時(shí)時(shí)間(毫秒),如果3分鐘內(nèi)沒有完成故障轉(zhuǎn)移操作,則視為轉(zhuǎn)移失敗
sentinel failover-timeout mymaster 180000
# 故障轉(zhuǎn)移之后,進(jìn)行新的主從復(fù)制,配置項(xiàng)指定了最多有多少個(gè)slave對(duì)新的master進(jìn)行同步,那可以理
解為1是串行復(fù)制,大于1是并行復(fù)制
sentinel parallel-syncs mymaster 1
# 指定mymaster主的密碼(沒有就不指定)
# sentinel auth-pass mymaster 123456
12 . 創(chuàng)建sentinel2的配置文件:sentinel-26380.conf
在/opt/sentinel目錄創(chuàng)建 sentinel-26380.conf 文件,內(nèi)容如下
# 配置文件目錄
dir /opt/sentinel/
# 日志文件位置
logfile "./sentinel-26380.log"
# pid文件
pidfile /var/run/sentinel_26380.pid
# 是否后臺(tái)運(yùn)行
daemonize yes
# 端口
port 26380
# 監(jiān)控主服務(wù)器master的名字:mymaster,IP:192.168.200.129,port:6379,最后的數(shù)字2表示當(dāng)
Sentinel集群中有2個(gè)Sentinel認(rèn)為master存在故障不可用,則進(jìn)行自動(dòng)故障轉(zhuǎn)移
sentinel monitor mymaster 192.168.200.129 6379 2
# master響應(yīng)超時(shí)時(shí)間(毫秒),Sentinel會(huì)向master發(fā)送ping來確認(rèn)master,如果在20秒內(nèi),ping
不通master,則主觀認(rèn)為master不可用
sentinel down-after-milliseconds mymaster 60000
# 故障轉(zhuǎn)移超時(shí)時(shí)間(毫秒),如果3分鐘內(nèi)沒有完成故障轉(zhuǎn)移操作,則視為轉(zhuǎn)移失敗
sentinel failover-timeout mymaster 180000
# 故障轉(zhuǎn)移之后,進(jìn)行新的主從復(fù)制,配置項(xiàng)指定了最多有多少個(gè)slave對(duì)新的master進(jìn)行同步,那可以理
解為1是串行復(fù)制,大于1是并行復(fù)制
sentinel parallel-syncs mymaster 1
# 指定mymaster主的密碼(沒有就不指定)
# sentinel auth-pass mymaster 123456
13 . 創(chuàng)建sentinel3的配置文件:sentinel-26381.conf
在/opt/sentinel目錄創(chuàng)建 sentinel-26381.conf 文件,內(nèi)容如下
# 配置文件目錄
dir /opt/sentinel/
# 日志文件位置
logfile "./sentinel-26381.log"
# pid文件
pidfile /var/run/sentinel_26381.pid
# 是否后臺(tái)運(yùn)行
daemonize yes
# 端口
port 26381
# 監(jiān)控主服務(wù)器master的名字:mymaster,IP:192.168.200.129,port:6379,最后的數(shù)字2表示當(dāng)
Sentinel集群中有2個(gè)Sentinel認(rèn)為master存在故障不可用,則進(jìn)行自動(dòng)故障轉(zhuǎn)移
sentinel monitor mymaster 192.168.200.129 6379 2
# master響應(yīng)超時(shí)時(shí)間(毫秒),Sentinel會(huì)向master發(fā)送ping來確認(rèn)master,如果在20秒內(nèi),ping
不通master,則主觀認(rèn)為master不可用
sentinel down-after-milliseconds mymaster 60000
# 故障轉(zhuǎn)移超時(shí)時(shí)間(毫秒),如果3分鐘內(nèi)沒有完成故障轉(zhuǎn)移操作,則視為轉(zhuǎn)移失敗
sentinel failover-timeout mymaster 180000
# 故障轉(zhuǎn)移之后,進(jìn)行新的主從復(fù)制,配置項(xiàng)指定了最多有多少個(gè)slave對(duì)新的master進(jìn)行同步,那可以理
解為1是串行復(fù)制,大于1是并行復(fù)制
sentinel parallel-syncs mymaster 1
# 指定mymaster主的密碼(沒有就不指定)
# sentinel auth-pass mymaster 123456
14 . 分別查看3個(gè)sentinel的信息
14.1 分別對(duì)3個(gè)sentinel執(zhí)行下面命令,查看每個(gè)sentinel的信息
redis-cli -p sentinel的端口
info sentinel
14.2 sentinel1 的信息如下,其他2個(gè)sentinel的信息這里就不列了,大家自己去看一下
15 . 驗(yàn)證故障自動(dòng)轉(zhuǎn)移是否成功
step1:在master中執(zhí)行下面命令,停止master
192.168.200.129:6379> shutdownstep2:等待2分鐘,等待完成故障轉(zhuǎn)移
step2:等待2分鐘,等待完成故障轉(zhuǎn)移
sentinel中我們配置 down-after-milliseconds 的值是60秒,表示判斷主機(jī)下線時(shí)間是60秒,所以我們
等2分鐘,讓系統(tǒng)先自動(dòng)完成故障轉(zhuǎn)移。
step3:查看slave1的主從信息,如下
使用 info replication 命令查看主從信息
step4:查看slave2的主從信息,如下
slave2變成master了,且slave2變成slave1的從庫了,完成了故障轉(zhuǎn)移。
step5:下面驗(yàn)證下slave1和slave2是否同步
在slave2中執(zhí)行下面命令
192.168.200.129:6381> set address china
OK
在slave1中執(zhí)行下面命令,查詢一下address的值,效果如下,說明slave2和slave1同步正
16 . 恢復(fù)舊的master自動(dòng)俯首稱臣
當(dāng)舊的master恢復(fù)之后,會(huì)自動(dòng)掛在新的master下面,咱們來驗(yàn)證下是不是這樣的。
step1:執(zhí)行下面命令,啟動(dòng)舊的master
redis-server /opt/sentinel/redis-6379.conf
step2:執(zhí)行下面命令,連接舊的master
redis-cli -h 192.168.200.129 -p 6379```
step3:執(zhí)行下面命令,查看其主從信息
info replication
效果如下,確實(shí)和期望的一致。
17 . 更多Sentinel介紹
關(guān)于sentinel更多信息,見:http://itsoku.com/article/247