由于分布式微博爬蟲中使用celery作為分布式任務(wù)調(diào)度工具宴凉,使用redis作為celery的broker.由于redis是單機(jī)赤屋,當(dāng)redis掛掉之后宠互,整個系統(tǒng)就會掛掉擎厢。所以我抽時間看了一下redis的高可用方案,本文講講使用redis sentinel配置redis 主從高可用架構(gòu)的過程蔼啦。
目前節(jié)點:
- 123.206.21.165 主節(jié)點
- 119.29.193.219 從節(jié)點
redis的安裝我就不說了榆纽,官網(wǎng)寫得很明白,也可以查看我寫的wiki
在主節(jié)點安裝完redis后询吴,我們在redis安裝目錄新建一個myredis.conf
文件掠河,里面內(nèi)容如下
daemonize yes
pidfile "/home/ubuntu/program/others/redis.pid"
port 6379
logfile "/home/ubuntu/program/others/redis.log"
requirepass "abcdefg"
masterauth "abcdefg"
啟動redis
src/redis-server myredis.conf
然后查看/home/ubuntu/program/others/redis.log
文件亮元,看redis是否成功啟動猛计。啟動成功后,我們在從節(jié)點進(jìn)行相同的操作爆捞,只有一步不同奉瘤,就是myredis.conf
文件,除了包含上述內(nèi)容以外煮甥,還得包括
slaveof 123.206.21.165 6379
在從節(jié)點啟動后盗温,我們再分別在兩個節(jié)點配置sentinel。這里仍然以主節(jié)點為例說明成肘,在redis安裝目錄我們新建一個mysentinel.conf
文件卖局,加上如下內(nèi)容
port 26379
bind 0.0.0.0
daemonize yes
logfile "/home/ubuntu/program/others/sentinel.log"
sentinel monitor mymaster 123.206.21.165 6379 1 # 主節(jié)點名 和 ip port
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
sentinel auth-pass mymaster abcdefg
通過
src/redis-sentinel mysentinel.conf
啟動位于主節(jié)點的哨兵。從節(jié)點配置過程和啟動哨兵方式和上述完全一樣双霍。這里就不啰嗦了砚偶。
這個時候批销,我們可以通過殺死主節(jié)點的redis服務(wù),看是否會成功切換到從節(jié)點染坯。其實我想講的就是這里均芽。當(dāng)我們哨兵只有兩個的時候,會發(fā)現(xiàn)一直選舉主節(jié)點都會失敗单鹿。
我們需要設(shè)置三個或者三個以上的哨兵掀宋,才可以讓選舉成功。如果服務(wù)器只有兩臺仲锄,可以通過修改
port 26379
為 別的端口劲妙,來在同一臺機(jī)器上設(shè)置多個哨兵
在折騰了很久后,終于把主從切換做好了儒喊,結(jié)果發(fā)現(xiàn)想要把它用到celery中是趴,還十分困難,目前也還不知道如何做celery中的redis高可用方案澄惊,有知道的朋友可以給我講講唆途,感謝!
這篇文章寫得比較簡單掸驱,也懶得截圖肛搬,如果有緣人看到了,按上述過程來做 redis sentinel有問題的話毕贼,可以留言温赔。
另外,除了主從設(shè)置哨兵以外鬼癣,還可以通過redis cluster集群方案陶贼、keepalived+redis或者codis這類ha proxy的方案來做redis的高可用。時間允許的話待秃,我也會去嘗試一下拜秧,看能不能和celery結(jié)合起來。