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