Overview
本小节将会介绍
- 在Docker环境下给Haproxy容器安装Keepalived
- 在Docker环境下以haproxy-keepalived镜像的方式安装Haproxy和Keepalived
本小节环境介绍
- 服务器环境:阿里云ECS.t5、CentOS7.6、Docker1.13
- 本地环境:MacOS10.13、DataGrip2019.1、Chrome73.0
Haproxy主备方案架构
在【Docker环境下的前后端分离项目部署与运维 4-3数据库负载均衡】安装Haproxy负载均衡的架构中,可以看出Haproxy是存在单点故障问题的。为实现高可用,我们采用Haproxy的主备方案,当一个Haproxy节点宕机时,另一个节点获得虚拟ip继续提供服务。
给Haproxy容器安装Keepalived
在【Docker环境下的前后端分离项目部署与运维 4-3数据库负载均衡】安装Haproxy负载均衡中已经介绍了Haproxy(h1)容器的安装,现在来给h1容器安装上Keepalived。
1、进入h1容器,更新apt-get,安装vim
[root@chesterdong ~]# docker exec -it h1 /bin/bash
root@c563d59f35ae:/# apt-get clean
root@c563d59f35ae:/# apt-get update
root@c563d59f35ae:/# apt-get install vim
2、编辑sources.list文件,添加以下内容
root@c563d59f35ae:/# vim /etc/apt/sources.list
deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
3、再次更新apt-get,安装keepalived并修改配置文件
root@c563d59f35ae:/# apt-get clean
root@c563d59f35ae:/# apt-get update
root@c563d59f35ae:/# apt-get install keepalived
root@c563d59f35ae:/# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 { #虚拟路由的标识符
state MASTER #状态只有MASTER和BACKUP两种,并且要大写,MASTER为工作状态,BACKUP是备用状态
interface eth0 #通信所使用的网络接口
#lvs_sync_daemon_inteface eth0 #这个默认没有,相当于心跳线接口,DR模式用的和上面的接口一样,也可以用机器上的其他网卡eth1,用来防止脑裂。
virtual_router_id 51 #虚拟路由的ID号,是虚拟路由MAC的最后一位地址
priority 100 #此节点的优先级,主节点的优先级需要比其他节点高
advert_int 1 #通告的间隔时间
#nopreempt #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高
#preempt_delay #抢占延时,默认5分钟
authentication { #认证配置
auth_type PASS #认证方式
auth_pass 1111 #认证密码
}
virtual_ipaddress { #虚拟ip地址,可以有多个地址,每个地址占一行,不需要子网掩码,同时这个ip 必须与我们在lvs客户端设定的vip相一致!
172.18.0.201
}
}
4、启动keepalived,并在宿主机进行验证keepalived是否安装成功
在宿主机上ping虚拟ip(172.18.0.201),如果能ping通,说明keepalived安装成功。
root@c563d59f35ae:/# service keepalived start
[ ok ] Starting keepalived: keepalived.
root@c563d59f35ae:/# exit
exit
[root@chesterdong ~]# ping 172.18.0.201
PING 172.18.0.201 (172.18.0.201) 56(84) bytes of data.
64 bytes from 172.18.0.201: icmp_seq=1 ttl=64 time=0.060 ms
64 bytes from 172.18.0.201: icmp_seq=2 ttl=64 time=0.068 ms
64 bytes from 172.18.0.201: icmp_seq=3 ttl=64 time=0.066 ms
64 bytes from 172.18.0.201: icmp_seq=4 ttl=64 time=0.058 ms
以镜像的方式安装Haproxy和Keepalived
1、在宿主机创建好haproxy.cfg
和keepalived.conf
两个配置文件
[root@chesterdong ~]# mkdir haproxy/h2
[root@chesterdong ~]# cd haproxy/h2
[root@chesterdong ~]# vim haproxy.cfg
global
#工作目录
chroot /usr/local/etc/haproxy
#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
log 127.0.0.1 local5 info
#守护进程运行
daemon
defaults
log global
mode http
#日志格式
option httplog
#日志中不记录负载均衡的心跳检测记录
option dontlognull
#连接超时(毫秒)
timeout connect 5000
#客户端超时(毫秒)
timeout client 50000
#服务器超时(毫秒)
timeout server 50000
#监控界面
listen admin_stats
#监控界面的访问的IP和端口
bind 0.0.0.0:8888
#访问协议
mode http
#URI相对地址
stats uri /dbs
#统计报告格式
stats realm Global\ statistics
#登陆帐户信息
stats auth admin:abc123456
#数据库负载均衡
listen proxy-mysql
#访问的IP和端口
bind 0.0.0.0:3306
#网络协议
mode tcp
#负载均衡算法(轮询算法)
#轮询算法:roundrobin
#权重算法:static-rr
#最少连接算法:leastconn
#请求源IP算法:source
balance roundrobin
#日志格式
option tcplog
#在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
option mysql-check user haproxy
server MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000
server MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000
server MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000
server MySQL_4 172.18.0.5:3306 check weight 1 maxconn 2000
server MySQL_5 172.18.0.6:3306 check weight 1 maxconn 2000
#使用keepalive检测死链
option tcpka
[root@chesterdong ~]# vim keepalived.conf
vrrp_instance VI_1 { #虚拟路由的标识符
state MASTER #状态只有MASTER和BACKUP两种,并且要大写,MASTER为工作状态,BACKUP是备用状态
interface eth0 #通信所使用的网络接口
#lvs_sync_daemon_inteface eth0 #这个默认没有,相当于心跳线接口,DR模式用的和上面的接口一样,也可以用机器上的其他网卡eth1,用来防止脑裂。
virtual_router_id 51 #虚拟路由的ID号,是虚拟路由MAC的最后一位地址
priority 100 #此节点的优先级,主节点的优先级需要比其他节点高
advert_int 1 #通告的间隔时间
#nopreempt #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高
#preempt_delay #抢占延时,默认5分钟
authentication { #认证配置
auth_type PASS #认证方式
auth_pass 1111 #认证密码
}
virtual_ipaddress { #虚拟ip地址,可以有多个地址,每个地址占一行,不需要子网掩码,同时这个ip 必须与我们在lvs客户端设定的vip相一致!
172.18.0.201
}
}
2、下载haproxy-keepalived镜像,安装Haproxy和Keepalived,并启动h2容器
[root@chesterdong h2]# docker run -it -d --privileged -p 4003:8888\
-p 4004:3306 \
-v /root/haproxy/h2/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg \
-v /root/haproxy/h2/keepalived.conf:/etc/keepalived/keepalived.conf \
--net=net1 \
--name h2 \
--ip 172.18.0.8 \
pelin/haproxy-keepalived
3、参照【Docker环境下的前后端分离项目部署与运维 4-3数据库负载均衡】安装Haproxy负载均衡的步骤5~6来验证Haproxy安装成功
Problem
Reference
Episode
docker run -v
描述:宿主机的目录或文件挂载到容器上
例子1:
宿主机的v1目录
挂载到容器的/var/lib/mysql目录
上。也就是说,容器共享宿主机v1目录
里的内容
-v v1:/var/lib/mysql
例子2:
宿主机的haproxy.cfg文件
挂载到容器的haproxy.cfg文件
上。也就是说,容器的haproxy.cfg文件
的数据来自宿主机的haproxy.cfg文件
。
-v /root/haproxy/h2/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg