Keepalived和Haproxy

Keepalived和Haproxy

一、Keepalived

1、keepalived概念

调度器的高可用

vip地址主备之间的切换,主在工作时,vip地址值在主上,主停止工作,vip飘移到备服务器

在主备的优先级不变的情况下,主恢复工作,vip会飘回到主服务器

1、配优先级

2、配vip地址和真实服务器

3、主备的id要一致

4、主备的id要区分

keepalive是专门为lvs打造的,但是不是为lvs专门服务的

keepalive也可以使用nginx,haproxy

2、keepalive+nginx实现高可用

实验

在这里插入图片描述

nginx1 192.168.100.11 keepalive

nginx2 192.168.100.12 keepalive

客户端 192.168.100.13

监控脚本,来监控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的页面

3、脑裂是什么?

是什么:HA 高可用架构中的一个特殊现象,只要使用vip地址代理的冗余模式的高可用,都有可能出现脑裂的问题

现象:主和备同时都有vip地址,主和备无法确定各自的身份,同时出现了vip地址,两边都起来了,但是两边都无法使用。

原因:

3.1 keepalive的配置文件出现问题

3.2 心跳线(网线)断了、老化

3.3 网卡出现问题(硬件),ip地址出现问题

3.4 防火墙的策略,iptables的策略,屏蔽了组播的地址广播,屏蔽了vrrp的协议的报文

3.5 两台服务器的时间不同步也可能导致

3.6 其他的服务配置对心跳线的检测造成了干扰

4、怎么解决?

lvs中碰见、nginx中碰见如何解决?

4.1 查看keepalive的配置文件是否配置有误

4.2 更换新的网线,或者同时使用两条心跳线,用来预防其中一条挂掉导致出现脑裂

4.3 检查网卡和ip地址是否出现问题

4.4 关闭防火墙,关闭iptables策略,或者在配置文件里增加vrrp_iptables

4.5 保持两台服务器的时间同步,设置NTP

nginx、lvs、lvs+keepalive、keepalive单独配置

二、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、实验:七层代理

在这里插入图片描述

nginx1 192.168.100.11

nginx2 192.168.100.12

客户端 192.168.100.13

#客户端#
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

3、实验:四层配置

#客户端#
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

keepalive+haproxy

ode 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


 keepalive+haproxy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值