欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

负载均衡之Haproxy+keepalived双机热备(二)

程序员文章站 2022-03-30 11:49:20
...
接上一篇负载均衡之Haproxy(一),本篇主要讲解haproxy+keepalived双机热备,实现服务的快速切换。

haproxy+keepalive双机热备(主主模式)

1、概述

haproxy的出现正是弥补nginx一些应用上不足,比如session会话保持,健康监控检测机制,负载算法等等,在很多应用环境中,nginx的代理性能会haproxy稍逊一些,不过在一些实际案例中,keepalive+nginx与keepalive+haproxy往往会根据业务去选择,比如nginx有着haproxy没有的代理缓存的功能等等,如果需要用到缓存就可以使用nginx,总之:根据业务来选择这两者即可。

2、规划

负载均衡之Haproxy+keepalived双机热备(二)

3、架构图

负载均衡之Haproxy+keepalived双机热备(二)

4、安装并配置keepalive(haproxy主备上安装)

1)安装

yum -y install keepalived

负载均衡之Haproxy+keepalived双机热备(二)

2)配置keepalive.conf(主)

cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {    #定义收件人邮箱,多个邮箱另起一行,对齐写即可
     aaa@qq.com
   }
   notification_email_from aaa@qq.com   #定义发件人邮箱
   smtp_server 127.0.0.1                    #定义邮件服务器地址
   smtp_connect_timeout 30                  #定有邮件服务器连接超时时长为30秒
   router_id LVS_A      #运行keepalive的机器的标识,自定义即可
}
vrrp_instance VI_1 {    #定义VRRP实例,实例名自定义
    state MASTER        #指定当前节点的角色,master为主,backup为从
    interface ens33     #直接HA监测的接口
    nopreempt           #不抢占master
    virtual_router_id 51   #虚拟路由标识,在同一VRRP实例中,主备服务器ID必须一样
    priority 100         #定义节点优先级,数字越大越优先,主服务器优先级高于从服务器
    advert_int 1         #设置主备之间永不检查时间间隔,单位为秒
    authentication {     #设置主从之间验证类型和密码
        auth_type PASS
        auth_pass a23c7f32dfb519d6a5dc67a4b2ff8f5e
    }
    virtual_ipaddress {
        192.168.171.100   #定义虚拟ip地址
    }
}    
vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    nopreempt
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 56f7663077966379d4106e8ee30eb1a5
    }
    virtual_ipaddress {
        192.168.171.200     #定义虚拟ip地址 
    }
}

负载均衡之Haproxy+keepalived双机热备(二)

3)配置keepalive.conf(备)

cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     aaa@qq.com
   }
   notification_email_from aaa@qq.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass a23c7f32dfb519d6a5dc67a4b2ff8f5e
    }
    virtual_ipaddress {
        192.168.171.100
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 56f7663077966379d4106e8ee30eb1a5
    }
    virtual_ipaddress {
        192.168.171.200
    }
}

负载均衡之Haproxy+keepalived双机热备(二)

5、查看这两个节点获取ip的情况

1)先启动主,观察获取ip信息(vip1)

systemctl start keepalived.service
systemctl enable keepalived.service
systemctl status keepalived.service
ip addr

负载均衡之Haproxy+keepalived双机热备(二)

2)再启动备,观察获取ip信息(vip2)

systemctl start keepalived.service
systemctl enable keepalived.service
systemctl status keepalived.service
ip addr

负载均衡之Haproxy+keepalived双机热备(二)

6、安装tomcat(web端)(忽略不计)

1)现有配置

web01和web02都已经部署了httpd服务,且访问可以获取各自的index信息
负载均衡之Haproxy+keepalived双机热备(二)
负载均衡之Haproxy+keepalived双机热备(二)

2)部署tomcat服务

1> 下载

tomcat下载

wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.30/bin/apache-tomcat-9.0.30.tar.gz
2> 解压
tar -xf apache-tomcat-9.0.30.tar.gz -C /usr/local/
cd /usr/local/apache-tomcat-9.0.30/
3> 修改tomcat的index的页面(index.jsp)

Web01的Home改为192.168.171.119
Web02的Home改为192.168.171.129
负载均衡之Haproxy+keepalived双机热备(二)
负载均衡之Haproxy+keepalived双机热备(二)

4> 浏览器访问

负载均衡之Haproxy+keepalived双机热备(二)
负载均衡之Haproxy+keepalived双机热备(二)

7、haproxy配置

1)配置(主备相同)

cat /usr/local/haproxy/etc/haproxy.cfg
global
log 127.0.0.1  local0
#log 127.0.0.1  local1 notice
#log loghost    local0 info
maxconn 4096
chroot /usr/local/haproxy
uid 99                          #所属运行的用户uid
gid 99                     #所属运行的用户组
daemon                     #以后台形式运行haproxy
nbproc 1                   #启动1个haproxy实例。# #工作进程数量(CPU数量) ,实际工作中,应该设置成和CPU核心数一样。 这样可以发挥出最大的性能。
pidfile /usr/local/haproxy/run/haproxy.pid  #将所有进程写入pid文件
#debug      #调试错误时用
#quiet      #安静
 
defaults
log    global
log    127.0.0.1      local3        #日志文件的输出定向。产生的日志级别为local3. 系统中local1-7,用户自己定义
mode    http           #工作模式,所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
option  httplog                     #日志类别,记载http日志
option  httpclose      #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
option  dontlognull    #不记录空连接,产生的日志
option  forwardfor     #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option  redispatch     #当serverid对应的服务器挂掉后,强制定向到其他健康服务器
retries 2              #2次连接失败就认为服务器不可用,主要通过后面的check检查
maxconn 2000           #最大连接数
balance roundrobin                    #负载均衡算法
stats  uri    /haproxy-stats          #haproxy 监控页面的访问地址 # 可通过 http://localhost:80/haproxy-stats 访问
timeout connect      5000             #连接超时时间。 单位:ms 毫秒
timeout client       50000            #客户端连接超时时间
timeout server      50000             #服务器端连接超时时间
mode    http
option  httpchk GET /index.html       #健康检测#注意实际工作中测试时,应该下载某一个页面来进行测试,因此这个页面应该是个小页面,而不要用首页面。这里是每隔一秒检查一次页面。
 
frontend http          #前端配置,http名称可自定义
bind 0.0.0.0:80        #发起http请求80端口,会被转发到设置的ip及端口
default_backend http_back   #转发到后端 写上后端名称
 
backend http_back    #后端配置,名称上下关联
server  server_119 192.168.171.119:80  weight 3 check  #后端的主机 IP &权衡
server  server_129 192.168.171.129:80  weight 3 check  #后端的主机 IP &权衡
#server node1 192.168.179.131:8081 check inter 2000 rise 3 fall 3 weight 30
    # inter 2000 健康检查时间间隔2秒
    # rise 3 检测多少次才认为是正常的
    # fall 3 失败多少次才认为是不可用的
#weight 30 权重
listen state                                            # 使用单独输出,不需要frontedn调用:定义haproxy的状态统计页面
    bind 0.0.0.0:8001                                         # 监听的地址
    mode http                                           # http 7层工作模式:对应用层数据做深入分析,因此支持7层的过滤、处理、转换等机制
    stats enable                                        # 开启统计页面输出
    stats hide-version                                  # 隐藏状态页面版本号
    stats uri /haproxyadmin?stats                       # 指定状态页的访问路径
    stats auth admin:admin                              # 基于用户名,密码验证。
    stats admin if TRUE                                 # 验证通过时运行登录。
    acl num1 src 192.168.171.0/24                       # 定义源地址为192.168.171.0/24网段的acl规则,将其命名为num1
    tcp-request content accept if num1                  # 如果满足此规则,则允许访问
tcp-request content reject

负载均衡之Haproxy+keepalived双机热备(二)

2)重新启动haproxy(主备均启动)

1> 启动
 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg
2> 测试

负载均衡之Haproxy+keepalived双机热备(二)

3> 监控页面

http://192.168.171.100/haproxy-stats
负载均衡之Haproxy+keepalived双机热备(二)
http://192.168.171.200/haproxy-stats
负载均衡之Haproxy+keepalived双机热备(二)

4> haproxy的状态统计页面(用户名和密码:admin:admin)

http://192.168.171.100:8001/haproxyadmin?stats
负载均衡之Haproxy+keepalived双机热备(二)
http://192.168.171.200:8001/haproxyadmin?stats
负载均衡之Haproxy+keepalived双机热备(二)

问题整理

1、VMware虚拟机添加网卡无配置文件问题

现象:
负载均衡之Haproxy+keepalived双机热备(二)
负载均衡之Haproxy+keepalived双机热备(二)
解决办法:
负载均衡之Haproxy+keepalived双机热备(二)

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens37
编辑 ifcfg-ens37配置文件,修改NAME和DEVICE为esn37,删除uuid

负载均衡之Haproxy+keepalived双机热备(二)
重启网卡

systemctl restart network

2、编译haproxy时报错:make TARGET=linux2628 PREFIX=/usr/local/haproxy

现象:
负载均衡之Haproxy+keepalived双机热备(二)
解决办法:
使用 make TARGET=linux-glibc命令即可
负载均衡之Haproxy+keepalived双机热备(二)

相关标签: 负载均衡