概述
-
为什么要采用双机热备
单节点Haproxy不具备高可用,必须要有冗余设计
双机就是两个请求处理程序,比如两个haproxy,当一个挂掉的时候,另外 一个可以顶上。
-
虚拟IP地址
linux系统可以在一个网卡中定义多个IP地址,把这些地址分配给多个应用程序,这些地址就是虚拟IP,Haproxy的双机热备方案最关键的技术就是虚拟IP。
-
利用Keepalived实现双机热备
定义虚拟IP
在Docker中启动两个Haproxy容器,每个容器中还需要安装Keepalived程序
两个Keepalived会争抢虚拟IP,一个抢到后,另一个没抢到就会等待,抢到的作为主服务器,没抢到的作为备用服务器
两个Keepalived之间会进行心跳检测,如果备用服务器没有受到主服务器的心跳响应,说明主服务器发生故障,那么备用服务器就可以争抢虚拟IP,继续工作
我们向虚拟IP发送数据库请求,一个Haproxy挂掉,可以有另一个接替工作
-
Нaproxy双机热备方案
Docker中创建两个Haproxy,并通过Keepalived抢占Docker内地虚拟IP
Docker内的虚拟IP不能被外网,所以需要借助宿主机Keepalived映射成外网可以访问地虚拟IP
-
Haproxy容器内安装Keepalived,设置虚拟IP
Keepalived必须要安装在Haproxy所在容器之内
1.进入h1容器,安装Keepalived
docker exec -it h1 bash
apt-get update
apt-get install keepalived
apt-get下载慢,修改Ubuntu的apt-get源为国内镜像源
2.编辑Keepalived配置文件
Keepalived的配置文件是/etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
配置文件内容如下:
vrrp_instance VI_1 {
state MASTER # Keepalived的身份(MASTER主服务要抢占IP,BACKUP备服务器不会抢占IP)。
interface eth0 # docker网卡设备,虚拟IP所在
virtual_router_id 51 # 虚拟路由标识,MASTER和BACKUP的虚拟路由标识必须一致。从0~255
priority 100 # MASTER权重要高于BACKUP数字越大优先级越高
advert_int 1 # MASTER和BACKUP节点同步检查的时间间隔,单位为秒,主备之间必须一致
authentication { # 主从服务器验证方式。主备必须使用相同的密码才能正常通信
auth_type PASS
auth_pass 123456
}
virtual_ipaddress { # 虚拟IP。可以设置多个虚拟IP地址,每行一个
172.18.0.201
}
}
3.启动Keepalived
service keepalived start
4.宿主机执行ping命令
ping 172.18.0.201
5.进入h2容器,安装Keepalived
docker exec -it h2 bash
apt-get update
apt-get install keepalived
6.编辑Keepalived配置文件
vim /etc/keepalived/keepalived.conf
配置文件内容如下:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
172.18.0.201
}
}
7.启动Keepalived
service keepalived start
8.宿主机执行ping命令
ping 172.18.0.201
-
实现外网访问虚拟IP
1.宿主机执行安装Keepalived
yum -y install keepalived
2.编辑Keepalived配置文件
vi /etc/keepalived/keepalived.conf
配置文件内容如下:
vrrp_instance VI_1 {
state MASTER
#这里是宿主机的网卡,可以通过ip a查看当前自己电脑上用的网卡名是哪个
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#这里是指定的一个宿主机上的虚拟ip,一定要和宿主机网卡在同一个网段,
192.168.123.150
}
}
#接受监听数据来源的端口,网页入口使用
virtual_server 192.168.123.150 8888 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
#把接受到的数据转发给docker服务的网段及端口,由于是发给docker服务,所以和docker服务数据要一致
real_server 172.18.0.201 8888 {
weight 1
}
}
#接受数据库数据端口,宿主机数据库端口是3306,所以这里也要和宿主机数据接受端口一致
virtual_server 192.168.123.150 3306 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
#同理转发数据库给服务的端口和ip要求和docker服务中的数据一致
real_server 172.18.0.201 3306 {
weight 1
}
}
3.启动Keepalived
service keepalived start
最后
以上就是贤惠乐曲为你收集整理的数据库负载均衡(下)虚拟IP地址利用Keepalived实现双机热备Нaproxy双机热备方案Haproxy容器内安装Keepalived,设置虚拟IP实现外网访问虚拟IP的全部内容,希望文章能够帮你解决数据库负载均衡(下)虚拟IP地址利用Keepalived实现双机热备Нaproxy双机热备方案Haproxy容器内安装Keepalived,设置虚拟IP实现外网访问虚拟IP所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复