Open jacobfan opened 10 years ago
mongodb 可以采用 一主一从的部署方式(多个从有点浪费), 然后在主fail掉之后,会自动切换。程序需要做对应的修改,如果操作返回了相关错误,需要程序自动切换mongodb的地址。
链接: http://docs.mongodb.org/manual/core/replica-set-architecture-three-members/ , Primary with a Secondary and an Arbiter 这一小节
redis 官方也有一个 failover 的自动解决方案,同样可以采用一主一从的部署方式: http://redis.io/topics/sentinel
py的代码需要做对应的修改,在第一个ip地址读取、写入失败之后,自动切换到 slave 的ip。
es 官方也提供了对应的解决 方案 http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_add_failover.html
我回头测试一下这三个软件的 failover 的方式,让线上做参考。
cluster.name
为 elasticsearch
(建议后面更改为更有含义的名称),此时服务运行在端口 9200cluster.name
为 elasticsearch
,es1 运行在端口9201, 会自动以 es0 为master, es1 为 slave127.0.0.1:9201/_cluster/state/master_node?pretty
和 127.0.0.1:9201/_cluster/state/?pretty
可以查看 es 的运行状态我在自己的开发机上,按照master-slave-arbiter
的方式,部署了三个 mongodb 节点,步骤如下:
mongod --port 27027 --dbpath /home/liszt/work/tmp/rs00 --replSet rs0 --smallfiles --oplogSize 128
mongod --port 27028 --dbpath /home/liszt/work/tmp/rs01 --replSet rs0 --smallfiles --oplogSize 128
mongod --port 27029 --dbpath /home/liszt/work/tmp/arb --replSet rs0 --smallfiles --oplogSize 128
mongo 127.0.0.1:27027
# init master
rs.initiate()
# add slave
rs.add("192.168.1.104:27028")
# add arbiter
rs.addArb("192.168.1.104:27029")
rs.status()
Redis 可以使用 master-slave 方式的配置,配合 sentinel 来完成 failover,具体步骤如下
slaveof 127.0.0.1 8009
slave-read-only no
sentinel monitor mymaster 127.0.0.1 8009 1
sentinel down-after-milliseconds mymaster 6000
sentinel failover-timeout mymaster 10000
sentinel can-failover mymaster yes
sentinel parallel-syncs mymaster 1
sentinel monitor resque 127.0.0.1 8008 1
sentinel down-after-milliseconds resque 6000
sentinel failover-timeout resque 10000
sentinel can-failover resque yes
sentinel parallel-syncs resque 5
redis-server sentinel.conf --sentinel
此时,运行在 8009 端口的服务为 master,运行在8008端口的服务为 slave。
如果停掉运行在 8009 端口的服务,运行在 8008 的 redis 会自动切换成 master,并继续提供服务。 启动8009后,8009会运行服务,但不会自动变成master, 8008保持master不变, 需要手工参与master、slave的配置。
需要使用支持 sentinel 的 redis-client, python 有对应的包。
我们需要测试用的这些工具,在各种边缘状态下(例如大数据量)下的反应。 各个服务高可用的调研。