一.Haproxy和Keepalived是两种常用的负载均衡软件,它们有以下区别:
功能:Haproxy是一种高性能的负载均衡软件,可以根据不同的算法将请求分发到多个后端服务器。它还可以进行会话保持和健康检查等功能。Keepalived是一种高可用性软件,可以监控服务的运行状态,当主服务器故障时,可以自动切换到备份服务器。
架构:Haproxy是一个独立的软件,需要安装在每台负载均衡服务器上。Keepalived则是一个守护进程,可以运行在负载均衡服务器上,也可以运行在其他服务器上。
高可用性:Haproxy本身不提供高可用性功能,但可以与Keepalived配合使用,实现高可用性。Keepalived可以监控Haproxy的运行状态,当Haproxy出现故障时,可以自动切换到备份服务器。
配置:Haproxy的配置相对复杂,需要手动配置多个参数和后端服务器。Keepalived的配置相对简单,只需要指定主备服务器的IP地址和监控端口即可。
管理界面:Haproxy有一些开源的管理界面,可以提供图形化的操作界面,方便管理和监控。Keepalived本身没有管理界面,需要通过命令行或配置文件进行管理。
二、Keepalived
1、keepalived概念
调度器的高可用
vip地址主备之间的切换,主在工作时,vip地址值在主上,主停止工作,vip飘移到备服务器
在主备的优先级不变的情况下,主恢复工作,vip会飘回到主服务器
1、配优先级
2、配vip地址和真实服务器
3、主备的id要一致
4、主备的id要区分
keepalive是专门为lvs打造的,但是不是为lvs专门服务的
keepalive也可以使用nginx,haproxy
2、keepalive+nginx实现高可用
监控脚本,来监控nginx1的状态,如果nginx1挂了,nginx1的keepalive也要停止,实现vip的飘移
#nginx1和nginx2#
systemctl stop firewalld
setenforce 0
yum -y install keepalived
#nginx1#
cd /opt
vim check_nginx.sh
#!/bin/bash
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
then
systemctl stop keepalived
fi
wq!
systemctl restart keepalived
systemctl status keepalived
systemctl restart nginx
chmod 777 check_nginx.sh
# ls查看是否生成check_nginx.sh的文件
cd /etc/keepalived
vim keepalived.conf
#修改smtp_server 192.168.200.1如下
smtp_server 127.0.0.1
#修改router_id LVS_DEVEl如下
router_id LVS_01
#新增一行
vrrp_iptables
}
#修改interface eth0如下
interface ens33
#virtual_router_id 51保持不变(主备保持相同)
#priority 100修改如下
priority 120
#virtual_ipaddress修改为vip地址如下
virtual_ipaddress {
192.168.100.100
}
# 以下全部删除
# 在虚拟地址结束的新增一行
track_script {
check_nginx
}
# 在vrrp_iptables
#}下新增
vrrp_script check_nginx {
script "/opt/check_nginx.sh"
# 调用脚本内容,检测nginx的状态
interval 5
# 检测的时间间隔是5秒,如果业务敏感可以改成3秒
}
wq!
systemctl status keepalived.service
# 此时状态是开启
systemctl stop nginx
# 等待5秒
systemctl status keepalived.service
# 此时状态是关闭
#nginx2#
systemctl restart nginx
cd /etc/keepalived
cp keepalived.conf keepalived.conf.bak.2024.07.12
scp root@192.168.100.11:/etc/keepalived/keepalived.conf /etc/keepalived/
vim keepalived.conf
#修改router_id LVS_01如下
router_id LVS_02
#修改state MASTER如下
state BACKUP
#priority 120修改如下
priority 100
wq!
#nginx1#
systemctl start nginx
systemctl start keepalived.service
# 一定要先启动nginx,因为脚本检测的是nginx
vim /usr/local/nginx/html/index.html
# 修改为this is nginx1
wq!
#nginx2#
systemctl restart nginx
systemctl restart keepalived
ip addr
vim /usr/local/nginx/html/index.html
# 修改为this is nginx2
wq!
主备切换
#客户机#
页面访问vip地址:curl 192.168.100.100,此时访问的是nginx1的页面
#nginx1#
systemctl stop nginx
#nginx2#
ip addr
vip地址切换到nginx2
#客户机#
页面访问vip地址:curl 192.168.100.100,此时访问的是nginx2的页面
#nginx1#
页面访问vip地址:curl 192.168.100.100,此时页面又切换回来,是nginx1的页面
三、Haproxy
1、Haproxy的概念
1.1 Haproxy负载均衡:
nginx(四层转发、七层代理)、lvs(四层转发)、Haproxy(四层转发 、七层转发)
1.2 Haproxy的作用和使用场景:
场景:主要用于高并发的web场景,可以支持一万个以上的并发请求,是高性能的tcp和http的负载均衡器
工作原理:提供一个代理地址用来访问集群
作用:
• 可以进行四层和七层转发
• 支持https协议
• Haproxy本身不自带缓存功能,请求当中添加cookie,使用缓存功能
• 支持主备切换(keepalived)
1.3 特点:
• 可靠性高、稳定性好
• 可以同时维护40000~50000个并发,单位时间内可以处理的最大请求数20000个(3秒)
• 支持负载均衡算法,虽然不带缓存,但是可以支持会话保持
权重:rr、wrr、leastconn
2、实验:七层代理
#客户端#
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
tar -xf haproxy-1.5.19.tar.gz
uname -r
cd haproxy-1.5.19
make TARGET=linux2628 ARCH=x86_64
# target使用的版本要大于linux2.60以上的版本
mkdir /etc/haproxy
cd examples
#haproxy.cfg是主配置文件
cp haproxy.cfg /etc/haproxy
cd /etc/haproxy
vim haproxy.cfg
set nu
#第四行五行改为 注释第八行
log /dev/log local0 info
log /dev/log local1 notice
maxconn 4096
# 最多连接数,推荐10240
# 在daemon下新增
nbproc 6
# haproxy的并发线程数,设置的数量最后是cpu的2倍或者和cpu保持一致
defaults
# 这是是默认参数配置,连接配置,监听配置以及代理配置
retries 3
# 检查节点服务器3次,连续3次失败,就任务节点服务器不可用
redispatch
# 服务器负载很高时,自动结束当前队列中处理比较久的连接
maxconn 2000
# 最大连接数,这个数值可以和global里面的maxconn的保持一致,但是不能超过它,一般设置成一致
下面三行注释掉
#
#
#
在注释的三行下新增
timeout http-request 10s
# http请求的默认超时时间
timeout queue 1m
# 在队列当中请求的超时时间
timeout connect 10s
# 连接超时时间
timeout client 1m
# 客户端超时时间
timeout server 1m
# 服务端超时时间
timeout http-keep-alive 10s
# 默认长连接的超时时间
timeout check 10s
# 检查后端服务器超时时间
# 删除listen appli2-insert 0.0.0.0:10002下面的所有行
# 修改listen appli1-rewrite 0.0.0.0:10001为七层配置的格式
# 转发请求的设置,既可以是四层也可以是七层
# 七层的配置:
listen xy102 0.0.0.0:80
option httpchk GET /index.html
# 设置转发请求的内容
balance static-rr
# 默认轮询算法
server rs01 192.168.11:80 check inter 2000 fall 3 weight 2
server rs02 192.168.12:80 check inter 2000 fall 3 weight 3
# server 指定真实服务器 rs01 自定义后台服务器的名称 checkinter 2000 启动对后端服务器进行检查,检查间隔是2000毫秒 fall 3 连续cd三次检测不到,则检测失败
wq!
cd /opt/haproxy-1.5.19/examples
cp haproxy.init /etc/init.d/haproxy
chmod 777 /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin
systemctl restart haproxy.service
#客户端#
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
tar -xf haproxy-15.19.tar.gz
uname -r
make TARGET=linux2628 ARCH=x86_64
# target使用的版本要大于linux2.60以上的版本
mkdir /etc/haproxy
#haproxy.cfg是主配置文件
cp haproxy.cfg
vim haproxy.cfg
set nu
第四行五行
log /dev/log local0 info
log /dev/log local1 notice
maxconn 4096
# 最多连接数,推荐10240
# 在daemon下新增
nbproc 6
# haproxy的并发线程数,设置的数量最后是cpu的2倍或者和cpu保持一致
defaults
# 这是是默认参数配置,连接配置,监听配置以及代理配置
retries 3
# 检查节点服务器3次,连续3次失败,就任务节点服务器不可用
redispatch
# 服务器负载很高时,自动结束当前队列中处理比较久的连接
maxconn 2000
# 最大连接数,这个数值可以和global里面的maxconn的保持一致,但是不能超过它,一般设置成一致
下面三行注释掉
#
#
#
在注释的三行下新增
timeout http-request 10s
# http请求的默认超时时间
timeout-queue 1m
# 在队列当中请求的超时时间
timeout connect 10s
# 连接超时时间
timeout client 1m
# 客户端超时时间
timeout server 1m
# 服务端超时时间
timeout http-keep-alive 10s
# 默认长连接的超时时间
timeout check 10s
# 检查后端服务器超时时间
.....删除
# 转发请求的设置,既可以是四层也可以是七层
# 四层的配置:
frontend test
bind *:80
mode tcp
default_backend test
backend test
mode tcp
balance roundrobin
server server1 182.168.100.11:80 check inter 2000 fall 3 weight 2
server server1 182.168.100.12:80 check inter 2000 fall 3 weight 3
wq!
cp haproxy,init /etc/init.d/haproxy
chmod 777 /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin
1936

被折叠的 条评论
为什么被折叠?



