由于分布式微博爬虫中使用celery作为分布式任务调度工具,使用redis作为celery的broker.由于redis是单机,当redis挂掉之后,整个系统就会挂掉。所以我抽时间看了一下redis的高可用方案,本文讲讲使用redis sentinel配置redis 主从高可用架构的过程。
目前节点:
- 123.206.21.165 主节点
- 119.29.193.219 从节点
redis的安装我就不说了,官网写得很明白,也可以查看我写的wiki
在主节点安装完redis后,我们在redis安装目录新建一个myredis.conf
文件,里面内容如下
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是否成功启动。启动成功后,我们在从节点进行相同的操作,只有一步不同,就是myredis.conf
文件,除了包含上述内容以外,还得包括
slaveof 123.206.21.165 6379
在从节点启动后,我们再分别在两个节点配置sentinel。这里仍然以主节点为例说明,在redis安装目录我们新建一个mysentinel.conf
文件,加上如下内容
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 # 主节点名 和 ip port
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
sentinel auth-pass mymaster abcdefg
通过
src/redis-sentinel mysentinel.conf
启动位于主节点的哨兵。从节点配置过程和启动哨兵方式和上述完全一样。这里就不啰嗦了。
这个时候,我们可以通过杀死主节点的redis服务,看是否会成功切换到从节点。其实我想讲的就是这里。当我们哨兵只有两个的时候,会发现一直选举主节点都会失败。
我们需要设置三个或者三个以上的哨兵,才可以让选举成功。如果服务器只有两台,可以通过修改
port 26379
为 别的端口,来在同一台机器上设置多个哨兵
在折腾了很久后,终于把主从切换做好了,结果发现想要把它用到celery中,还十分困难,目前也还不知道如何做celery中的redis高可用方案,有知道的朋友可以给我讲讲,感谢!
这篇文章写得比较简单,也懒得截图,如果有缘人看到了,按上述过程来做 redis sentinel有问题的话,可以留言。
另外,除了主从设置哨兵以外,还可以通过redis cluster集群方案、keepalived+redis或者codis这类ha proxy的方案来做redis的高可用。时间允许的话,我也会去尝试一下,看能不能和celery结合起来。