【Docker环境下的前后端分离项目部署与运维 4-4负载均衡的高可用方案】Haproxy主备方案

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.cfgkeepalived.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值