负载均衡之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、规划
3、架构图
4、安装并配置keepalive(haproxy主备上安装)
1)安装
yum -y install 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地址
}
}
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
}
}
5、查看这两个节点获取ip的情况
1)先启动主,观察获取ip信息(vip1)
systemctl start keepalived.service
systemctl enable keepalived.service
systemctl status keepalived.service
ip addr
2)再启动备,观察获取ip信息(vip2)
systemctl start keepalived.service
systemctl enable keepalived.service
systemctl status keepalived.service
ip addr
6、安装tomcat(web端)(忽略不计)
1)现有配置
web01和web02都已经部署了httpd服务,且访问可以获取各自的index信息
2)部署tomcat服务
1> 下载
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
4> 浏览器访问
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
2)重新启动haproxy(主备均启动)
1> 启动
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg
2> 测试
3> 监控页面
http://192.168.171.100/haproxy-stats
http://192.168.171.200/haproxy-stats
4> haproxy的状态统计页面(用户名和密码:admin:admin)
http://192.168.171.100:8001/haproxyadmin?stats
http://192.168.171.200:8001/haproxyadmin?stats
问题整理
1、VMware虚拟机添加网卡无配置文件问题
现象:
解决办法:
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens37
编辑 ifcfg-ens37配置文件,修改NAME和DEVICE为esn37,删除uuid
重启网卡
systemctl restart network
2、编译haproxy时报错:make TARGET=linux2628 PREFIX=/usr/local/haproxy
现象:
解决办法:
使用 make TARGET=linux-glibc命令即可
上一篇: LVS高可用