haproxy 负载均衡
haproxy概述
ha-proxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一件事情,因此与nginx比起来在负载均衡这件事情上做更好,更专业。
软件:haproxy—主要是做负载均衡的7层,也可以做4层负载均衡
haproxy的特点
ha-proxy 作为目前流行的负载均衡软件,必须有其出色的一面
支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。
支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。
性能非常优秀,基于单进程处理模式(和Nginx类似)让其性能卓越。
拥有一个功能出色的监控页面,实时了解系统的当前状况。
功能强大的ACL支持,给用户极大的方便。
优点:支持session会话保持一致,四层和七层都支持;支持通过URL来检测后端服务器的状态。支持负载节点开/关
缺点:在七层转发支持上,不如nginx强大。
haproxy 使用
haproxy 安装
# 关闭SElinux 和 firewalld防火墙
setenforce 0
systemctl disable firewalld
# yum 安装
yum -y install haproxy
haproxy配置
- haproxy 配置文件
vim /etc/haproxy/ha - 配置文件说明
global #全局配置
log 127.0.0.1 local3 info #日志配置
maxconn 4096 #最大连接限制(优先级低)
user nobody
group nobody
daemon #守护进程运行
nbproc 1 #haproxy进程数
defaults # 针对(listen和backend块进行设置没如果块中没设置,则使用默认设置)默认配置
log global # 日志使用全局配置
mode http # 模式7层LB
maxconn 2048 # 最大连接数(优先级中)
retries 3 # 健康检查。3次连接失败就认为服务不可用
option redispatch # 服务不可用后的操作,重定向到其他健康服务器
stats uri /haproxy # web页面状态模块功能开启
stats auth admin:admin # 状态模块认证(用户名admin:admin)
contimeout 5000 # 定义haproxy将客户端请求转发至后端服务器,所等待的超时时长
clitimeout 50000 # haproxy作为客户,和后端服务器之间空闲连接的超时时间,到时候发送fin指令
srvtimeout 50000 # haproxy作为服务端,和用户之间空闲连接的超时时间,到时候发送fin指令断开tcp
frontend web-frontend # 前端配置块。面对用户侧 名称为main
bind 0.0.0.0:880 # 监听地址和端口
mode http # http模式的LB
stats uri /haproxy?status # 状态页面
log global # 日志使用全局配置
option httplog # 默认日志格式非常简陋,仅包括源地址、目标地址和实例名称,而“option httplog参数将会使得日志格式变得丰富许多,其通常包括但不限于HTTP请求、连接计时器、会话状态、连接数、捕获的首部及cookie、“frontend”、“backend”及服务器名称,当然也包括源地址和端口号等。
option httpclose # 每次请求完毕后,关闭http通道
default_backend web-backend #默认的后端服务器是 html-server
backend web-backend # 后端服务器名称为 web-backend
mode http # 模式为7层代理
balance roundrobin # 负载规则 轮循(rr)
option httpchk GET /index.html # 允许用http协议检查server 的健康
cookie SERVERID insert indirect nocache # 轮询的同时,根据插入的cookie SERVERID 的值来做会话保持,将相同的用户请求,转发给相同的真实服务器。
server web-A 127.0.0.1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
server web-B 127.0.0.2:81 weight 1 cookie 4 check inter 2000 rise 2 fall 5
# 添加后端服务器 weight 权重 cookie 3 服务器ID,避免rr算法将客户机请求转发给其他服务器 ,对后端服务器的健康状况检查间隔为2000毫秒,连续2次健康检查成功,则认为是有效的,连续5次健康检查失败,则认为服务器宕机
访问haproxy 管理页面
127.0.0.1:880/haproxy?status
lvs
安装
# 安装lvs
apt install ipvsadm
配置
# 创建一个负载均衡 端口 777 调度算法 轮询
ipvsadm -A -t 0.0.0.0:777 -s rr
## 添加后端
ipvsadm -a -t 127.0.0.1:777 -r 127.0.0.1:8889
ipvsadm -a -t 127.0.0.1:777 -r 127.0.0.1:9091
## 查看 策略
ipvsadm -ln
## 删除后端
ipvsadm -d -t 0.0.0.0:777 -r 127.0.0.1:8889
## 删除lvs
ipvsadm -D -t 0.0.0.0:777
## 保存 ipvsadm 策略
ipvsadm save
keepalived
keepalived说明
keepalived的主要由vrrp stack、checkers、ipvs wrapper以及控制组件配置文件分析器,IO复用器,内存管理这些组件组成,其中vrrp stack 是用来实现vip的高可用;checkers用于基于不同协议对后端服务做检测,它两都是基>于系统调用和SMTP协议来完成对vip的转移,以及故障转移后的邮件通知,以及vip和后端服务的检测;ipvs wrapper主要用于生成ipvs规则;而对于keepalved的核心组件vrrp stack 和checkers是由watchdog进程一直监控着,一旦vrrp stack 或者checkers宕掉,watchdog会立即启动一个新的vrrp stack或checkers,从而保证了keepalived自身的组件的高可用;
安装
# 环境说明
#- 两台linux 主机
#- 两台主机 时间同步
# iptabels selinux 关闭
# host1 host2
systemctl stop fireware # 不同linux 版本 命令不一
setenforce 0 # 不同linux 版本 命令不一 ubuntu不需要关闭
# host1 host2 执行
apt install keepliaved
配置
keepalived的配置文件主要由global configuration、vrrpdconfiguration、LVS configuration这三部分配置段组成;其中global配置段主要定义全局属性以及静态路由和地址相关配置;vrrp配置段主要定义VRRP实例或vrrp同步组
相关配置;LVS配置段主要定义IPVS集群和LVS后端各real server相关的配置;
配置文件位置 /etc/keepalived/keepalived.conf
以下配置 10.0.0.9/24 为虚拟vip 地址 使用两台机器的 eth0 网卡 虚拟出来一张网卡 eth0:1 两台机器同时启动相同服务 客户访问虚拟地址时hosts1主 接受请求 当1 挂了 被机器会抢占 虚拟IP 代替主提供服务
# 主 host1
global_defs { #全局配置
router_id lb01 #身份识别(全局唯一)
}
vrrp_instance VI_1 { # 配置VRRP协议
state MASTER # 状态,MASTER 和 BACKUP(这里仅仅是一个标记,真正确认VIP的是权重)
interface eth0 # 绑定网卡
virtual_router_id 50 # 虚拟路由标示,可以理解为分组
priority 100 # 优先级(数字越大,权重越大)
advert_int 1 # 监测心跳间隔时间
authentication { # 配置认证
auth_type PASS # 认证类型
auth_pass 12345678 # 认证的密码
}
virtual_ipaddress { # 设置VIP
10.0.0.9/24 brd 0.0.0.255 dev eth0 label eth0:1 # 虚拟的VIP地址
}
}
# 备 host2
global_defs {
router_id node02
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 50
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
10.0.0.9/24 brd 0.0.0.255 dev eth0 label eth0:1
}
}
验证
主查看网卡配置
# ifconfig eth0:1
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.9 netmask 255.255.255.0 broadcast 10.0.0.255
ether 52:54:00:82:d0:a1 txqueuelen 1000 (Ethernet)