1.需求
实现beanstalkd的主备自动切换功能,当beanstalkd的master主机故障或者beanstalkd故障时,能自动切换到备机运行。
2.实现思路
采用keepalived双backup模式,并设置不抢占资源。当master挂机,切换为backup;完成修复后,不会抢占为master,避免不必要的切换。
假设两台主机如下,虚IP设成xx.xx.112.50(先确保该ip未被分配)。
- mster host:xx.xx.112.190, ubuntu14.04
- backup host:xx.xx.69.239, ubuntu14.04
安装步骤如下:
1. 安装beanstalkd
2. 安装rsync
3. 安装keepalived
4. 启动
源码见github:https://github.com/qinguanri/beanstalkd_HA
后续会研究基于docker的高可用方案
3.安装beanstalkd
在ubuntu下使用apt-get安装
sudo apt-get install beanstalkd
修改beanstalkd默认启动配置项/etc/default/beanstalkd
sudo cat /etc/default/beanstalkd
## Defaults for the beanstalkd init script, /etc/init.d/beanstalkd on
## Debian systems.
BEANSTALKD_LISTEN_ADDR=127.0.0.1
BEANSTALKD_LISTEN_PORT=11300
# You can use BEANSTALKD_EXTRA to pass additional options. See beanstalkd(1)
# for a list of the available options. Uncomment the following line for
# persistent job storage.
BEANSTALKD_EXTRA="-b /var/lib/beanstalkd"
4.安装keeplived
sudo apt-get install keeplived
修改master主机上的/etc/keepalived/keepalived.conf配置文件
sudo cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id beanstalkd_router # all node must same
}
vrrp_script chk_beanstalkd
{
# exit 0 if beanstalkd is running, exit 1 if beanstalkd is inactive
script "/etc/keepalived/scripts/beanstalkd_check.sh"
interval 2
timeout 2
fall 3 # require 3 failures for failures
}
vrrp_script sync_bstk_binlog
{
# usage: sh bstk_binlog_sync.sh -u SERVER_USER -h MASTER_IP. Please init before install
script "/etc/keepalived/scripts/bstk_binlog_sync.sh -u qinguanri -h xx.xx.112.50"
interval 30 # backup binlog each 30 seconds
}
vrrp_instance beanstalkd {
state BACKUP # master or backup, please init before install
interface eth0 # bind vip on eth0
virtual_router_id 55 # all node must same
priority 150 #
advert_int 1 # send keepalived msg every 1 second
nopreempt # must need
authentication { # all node must same
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
xx.xx.112.50