在日常的运营过程中,因为容灾的考虑,程序都会部署并运行在多台机器上,如果是无状态的程序还好,可以直接多机部署并且运行,但是有状态的程序该怎么办呢?
1.主备模式
该模式对程序有个要求,就是程序不要依赖本地文件,存储一定要用存储组件,比如mysql、redis等。一旦用了本地文件,那么主机挂掉迁移到备机的时候会缺少本地文件而运行异常的。采用主备模式,故障迁移的时候也有自动和手动区分。手动切换就是对时间不敏感,在一旦时间切换过去就行,一般是监控、离线统计等业务适用。如果是自动的话,需要有个第三方的keeper来监控主机是否允许正常,一旦主机运行不正常就启动备机。但是这个keeper的容灾也是值得考虑的一个地方。
2.抢主模式
多机器通过抢主的方式实现,抢主一般是通过分布式存储组件来实现,比如zk,简单的话redis也行,抢一段时间然后租赁1分钟,这样1分钟之后再抢主。