之前我们已经搭建好了MyCat管理的PXC集群以及replication集群
MyCat实现PXC集群负载均衡以及replication集群读写分离
为了实现高可用,我们接下来需要在MyCat中间件之前使用Keepalived实现双机热备
为了实现高可用,我们使用keepalived来实现双机热备。
其主要工作原理是,在MyCat容器上面使用keepalived来生成一个虚拟IP地址。
连接数据库的时候不实用MyCat的IP地址,而是使用keepalived的虚拟IP地址。
在我们构建的双keepalived+MyCat方案中,两个keepalived争抢节点连接,
抢到之后该节点变为master节点,另一个节点变成backup节点。
同时master节点开始向外发布广播,如果master节点宕机,那么广播就会停止,
此时backup收不到广播,就会去获得节点连接,实现双机热备。
因为在Keepalived一方面把MyCat端口的请求映射到swarm集群中的虚拟IP。
但是在swarm集群外部,我们是没有办法访问到swarm集群的,因此需要在宿主机上安装keepalived,然后把宿主机的某个端口映射到swarm集群中的虚拟IP中的端口。
这样才可以实现双机热备
首先,因为keepalived端口发送广播是VRRP协议的,因此需要centos7先支持VRRP协议。
vrrp在Docker上面的配置如下:
{
state Mater ##这里配置keepalived节点的地位 master代表主节点,backup代表备用节点,如果两个都设置为master,那么两个节点在开始连接的时候会竞争
interface docker_gwbridge ##dokcer_gwbridge指docker虚拟机的网卡
virtual_route_id 51 ##这里指多个keepalived连接时的路由号,必须保持一致
priority 100 ##分配权重
advert_int 1 ##表示1S没有接受到master的VRRP广播就开始竞争节点
autnentication {
auth_type PASS ##表示使用密码方式来链接
auth_pass 123456
}
virtual_ipaddress{ ##映射的虚拟IP
172.18.0.201
}
}
这里因为Keepalived是安装在宿主机上面,因此我们需要把宿主机上面配置上虚拟IP跟上面相似
state Mater ##这里配置keepalived节点的地位 master代表主节点,backup代表备用节点,如果两个都设置为master,那么两个节点在开始连接的时候会竞争
interface docker_gwbridge ##dokcer_gwbridge指docker虚拟机的网卡
virtual_route_id 61 ##这里跟上面的路由号不一样
priority 100 ##分配权重
advert_int 1 ##表示1S没有接受到master的VRRP广播就开始竞争节点
autnentication {
auth_type PASS ##表示使用密码方式来链接
auth_pass 123456
}
virtual_ipaddress{ ##映射的虚拟IP
192.168.99.150 ##注意 这是宿主机的虚拟IP
}
但是呢 因为我们需要映射到Docker的某些端口上,因此比上面我们需要多配置一些
{
virtual_server 192.168.99.150 8066{
delay_loop 3
lb_algo rr
lb_kind NAT
persistence timeout 50
protocol TCP
real_reserver 172.18.0.201.8066{ ##虚拟IP接受到请求之后,把IP转发到真正的IP
weight 1
}
}
virtual_server 192.168.99.150 9066{
delay_loop 3
lb_algo rr
lb_kind NAT
persistence timeout 50
protocol TCP
real_reserver 172.18.0.201.9066{ ##虚拟IP接受到请求之后,把IP转发到真正的IP
weight 1
}
}
}
这里我们可以看到,在宿主机上的keepalived把宿主机上的两个虚拟端口转发到Docker上的两个keepalived节点上面。这里我们的配置就完成了。