Haproxy+keepalived群集

发布于:2021-09-27 13:55:29



目录
1、常见的Web集群调度器2、Haproxy应用分析2.1、Haproxy调度算法原理
3、Haproxy参数优化4、案例:使用Haproxy搭建Web群集一、进入Nginx1进行配置二、进入Nginx2进行配置三、进入Haproxy1进行配置四、安装keepalived进行配置五、进入Haproxy2进行配置六、安装keepalived进行配置七、、打开网页,查看调度情况八、进行Haproxy1进行日志管理(主备服务器都配置)九、进行Haproxy2进行日志管理(主备服务器都配置)
十一、关闭主服务器后,漂移ip由备份服务器承担 ,继续工作十二、统计页面设置



1、常见的Web集群调度器

■ 目前常见的Web集群调度器分为软件和硬件
■ 软件通常使用开源的LVS、Haproxy、 Nginx
■ 硬件一般使用比较多的是F5,也有很多人使用国内的一
些产品,如梭子鱼、绿盟等


2、Haproxy应用分析

■ LVS在企业应用中抗负载能力很强,但存在不足
● LVS不支持正则处理,不能实现动静分离
● 对于大型网站,LVS的实施配置复杂,维护成本相对较高


■ Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件
● 适用于负载大的Web站点
● 运行在硬件.上可支持数以万计的并发连接的连接请求


2.1、Haproxy调度算法原理

■ Haproxy支持多种调度算法,最常用的有3种
● RR (Round Robin)
◆ RR算法是最简单最常用的一种算法,即轮询调度
● 理解举例
◆ 有三个节点A、B、C
◆ 第一个用户访问会被指派到节点A
◆ 第二个用户访问会被指派到节点B
◆ 第三个用户访问会被指派到节点C
◆ 第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果


● LC (Least Connections)
◆ 最小连接数算法,根据后端的节点连接数大小动态分配前端请求
● 理解举例
◆ 有三个节点A、B、C,各节点的连接数分别为A:4、B:5、 C:6
◆ 第一个用户连接请求,会被指派到A上,连接数变为A:5、B:5、 C:6
◆ 第二个用户请求会继续分配到A上,连接数变为A:6、B:5、 C:6; 再
有新的请求会分配给B,每次将新的请求指派给连接数最小的客户端
◆ 由于实际情况下A、B、C的连接数会动态释放,很难会出现一样连
接数的情况
◆ 此算法相比较rr算法有很大改进,是目前用到比较多的一种算法


● SH (Source Hashing)
◆ 基于来源访问调度算法,用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度
● 理解举例
◆ 有三个节点A、B、C,第一个用户第一次访问被指派到了A,第二个用户第一次访问被指派到了B
◆ 当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡调度器不*簦谝灰桓鲇没Х梦识蓟岜恢概傻紸,第二个用户访问都会被指派到B,实现集群的调度
◆ 此调度算法好处是实现会话保持,但某些IP访问量非常大时会引|起负载不均衡,部分节点访问量超大,影响业务使用


3、Haproxy参数优化

■ 随着企业网站负载增加,haproxy参数优化相当重要
●maxconn:最大连接数,根据应用实际情况进行调整,推荐使用10240
●daemon:守护进程模式,Haproxy可以使用非守护进程模式启动,建议使用守护进程模式启动
●nbproc:负载均衡的并发进程数,建议与当前服务器CPU核数相等或为其2倍
◆retries: 重试次数,主要用于对集群节点的检查,如果节点多,且并发量大,设置为2次或3次
●option http-server-close:主动关闭http请求选项,建议在生产环境中使用此选项
●timeout http- keep-alive:长连接超时时间,设置长连接超时时间,可以设置为10s
●timeout http-request: http请求超时时间,建议将此时间设置为5~ 10s,增加http连接释放速度
●timeout client:客户端超时时间,如果访问量过大,节点响应慢,可以将此时间设置短一-些, 建议设置为1min左右就可以了


4、案例:使用Haproxy搭建Web群集

案例需求:如图所示,有两台haproxy调度器,但是所有的流量全部由主调度器获取,由主调度器可以正常调度web节点
设备配置:
调度器两台(双机热备)
IP地址:192.168.74.10(主)
IP地址:192.168.74.20(备)
web服务器两台
IP地址:192.168.74.30(Nginx1)
IP地址:192.168.74.40(Nginx2)
客户端电脑两台
IP地址:192.168.74.50
IP地址:192.168.74.60


一、进入Nginx1进行配置

[root@nginx1 ~]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel #安装依赖包
[root@nginx1 ~]# useradd -M -s /sbin/nologin nginx #创建不可登录用户
[root@nginx1 ~]# tar zxvf nginx-1.12.2.tar.gz #解压缩
[root@nginx1 ~]# cd nginx-1.12.2/
[root@nginx1 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
[root@nginx1 nginx-1.12.2]# make && make install #编译安装
[root@nginx1 nginx-1.12.2]# cd
[root@nginx1 ~]# echo "This is nginx1" > /usr/local/nginx/html/index.html #创建首页内容
[root@nginx1 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin #优化启动项
[root@nginx1 ~]# nginx #启动服务
[root@nginx1 ~]# netstat -anpt | grep nginx


[root@nginx1 ~]# curl http://localhost


二、进入Nginx2进行配置

[root@nginx2 ~]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel #安装依赖包
[root@nginx2 ~]# useradd -M -s /sbin/nologin nginx #创建不可登录用户
[root@nginx2 ~]# tar zxvf nginx-1.12.2.tar.gz #解压缩
[root@nginx2 ~]# cd nginx-1.12.2/
[root@nginx2 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
[root@nginx2 nginx-1.12.2]# make && make install #编译安装
[root@nginx2 nginx-1.12.2]# cd
[root@nginx2 ~]# echo "This is nginx2" > /usr/local/nginx/html/index.html #创建首页内容
[root@nginx2 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin #优化启动项
[root@nginx2 ~]# nginx #启动服务
[root@nginx1 ~]# netstat -anpt | grep nginx


[root@nginx2 ~]# curl http://localhost


三、进入Haproxy1进行配置

[root@haproxy1 ~]# yum -y install gcc gcc-c++ make pcre-devel bzip2-devel #安装依赖包
[root@haproxy1 ~]# tar zxvf haproxy-1.4.24.tar.gz #解压缩
[root@haproxy1~]# mkdir /etc/haproxy #创建haproxy目录
[root@haproxy1 ~]# cd haproxy-1.4.24/
[root@haproxy1 haproxy-1.4.24]# make TARGET=linux26 #内核版本不支持低于2.6使用
[root@haproxy1 haproxy-1.4.24]# make install
[root@haproxy1 haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy/ #将软件包中的配置文件模板复制到haproxy目录中
[root@haproxy1 haproxy-1.4.24]# cd
[root@haproxy1 ~]# vim /etc/haproxy/haproxy.cfg #修改haproxy.cfg配置参数
下面两项前面加上注释
#chroot /usr/share/haproxy #固有目录,可注释掉
#redispatch #当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性;而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。需要注释掉
删除原来的listen配置项,添加新配置:
listen webcluster 0.0.0.0:80 #监听所有地址,端口
option httpchk GET /index.html #检查网页内容
balance roundrobin #负载均衡调度算法(rr)轮询
server nginx1 192.168.74.30:80 check inter 2000 fall 3 #检查节点间隔时间2秒,次数3次
server nginx2 192.168.74.40:80 check inter 2000 fall 3


[root@haproxy1 ~]# cp haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy
[root@haproxy1 ~]# vi /etc/init.d/haproxy #进行配置文件编辑


[root@haproxy1 ~]# chkconfig --add haproxy
[root@haproxy1 ~]# chkconfig --list


[root@haproxy1 ~]# chmod 755 /etc/init.d/haproxy #增加haproxy 执行权限
[root@haproxy1 ~]# chkconfig --add /etc/init.d/haproxy
[root@haproxy1 ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy #进行链接
[root@haproxy1 ~]# systemctl start haproxy #启动haproxy
[root@haproxy1 ~]# systemctl status haproxy #查看haproxy状态


四、安装keepalived进行配置

[root@haproxy1 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel #安装依赖包
[root@haproxy1 ~]# tar zxvf keepalived-2.0.13.tar.gz #解压缩
[root@haproxy1 ~]# cd keepalived-2.0.13/
[root@haproxy1 keepalived-2.0.13]# ./configure --prefix=/
[root@haproxy1 keepalived-2.0.13]# make && make install
[root@haproxy1 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d #加入系统管理服务
[root@haproxy1 keepalived-2.0.13]# systemctl enable keepalived.service #设置开机自启动
[root@haproxy1 keepalived-2.0.13]# vi /etc/keepalived/keepalived.conf #进行配置文件编辑
! Configuration File for keepalived
global_defs { #全局参数
router_id LVS_01 #指定名称,各个服务器名称要不一样
}
vrrp_instance VI_1 { #指定vrrp热备参数
state MASTER #服务器角色是master,备份服务器设置为BACKUP
interface ens33 #修改物理网卡名称,默认是centos6的eth0
virtual_router_id 10 #组号相同
priority 150 #优先级,主服务器设置要大于备服务器
advert_int 1
authentication {
auth_type PASS #验证类型和密码,不建议修改
auth_pass 123
}
virtual_ipaddress {
192.168.74.100 #漂移地址(VIP)地址,可以有多个
}
}
[root@haproxy1 keepalived-2.0.13]# systemctl start keepalived #启动程序
[root@haproxy1 keepalived-2.0.13]# ip addr #查询漂移地址


[root@haproxy1 keepalived-2.0.13]# cd
[root@haproxy1 ~]# tail -f /var/log/messages #查询日志信息


五、进入Haproxy2进行配置

[root@haproxy2 ~]# yum -y install gcc gcc-c++ make pcre-devel bzip2-devel #安装依赖包
[root@haproxy2 ~]# tar zxvf haproxy-1.4.24.tar.gz #解压缩
[root@haproxy2 ~]# mkdir /etc/haproxy #创建haproxy目录
[root@haproxy2 ~]# cd haproxy-1.4.24/
[root@haproxy2 haproxy-1.4.24]# make TARGET=linux26 #内核版本不支持低于2.6使用
[root@haproxy2 haproxy-1.4.24]# make install
[root@haproxy2 haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy/ #将软件包中的配置文件模板复制到haproxy目录中
[root@haproxy2 ~]# vim /etc/haproxy/haproxy.cfg #修改haproxy.cfg配置参数
下面两项前面加上注释
#chroot /usr/share/haproxy #固有目录,可注释掉
#redispatch #当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性;而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。需要注释掉
删除原来的listen配置项,添加新配置:
listen webcluster 0.0.0.0:80 #监听所有地址,端口
option httpchk GET /index.html #检查网页内容
balance roundrobin #负载均衡调度算法(rr)轮询
server nginx1 192.168.74.30:80 check inter 2000 fall 3 #检查节点间隔时间2秒,次数3次
server nginx2 192.168.74.40:80 check inter 2000 fall 3


[root@haproxy2 haproxy-1.4.24]# cd
[root@haproxy2 ~]# cp haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy
[root@haproxy2 ~]# vi /etc/init.d/haproxy #进行配置文件编辑


[root@haproxy2 ~]# chkconfig --add haproxy
[root@haproxy2 ~]# chkconfig --list


[root@haproxy2 ~]# chmod 755 /etc/init.d/haproxy #增加haproxy 执行权限
[root@haproxy2 ~]# chkconfig --add /etc/init.d/haproxy
[root@haproxy2 ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy #进行链接
[root@haproxy2 ~]# systemctl start haproxy #启动haproxy
[root@haproxy2 ~]# systemctl status haproxy #查看haproxy状态


六、安装keepalived进行配置

[root@haproxy2 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel #安装依赖包
[root@haproxy2 ~]# tar zxvf keepalived-2.0.13.tar.gz #解压缩
[root@haproxy2 ~]# cd keepalived-2.0.13/
[root@haproxy2 keepalived-2.0.13]# ./configure --prefix=/
[root@haproxy2 keepalived-2.0.13]# make && make install
[root@haproxy2 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d #加入系统管理服务
[root@haproxy2 keepalived-2.0.13]# systemctl enable keepalived.service
#设置开机自启动
[root@haproxy2 keepalived-2.0.13]# vi /etc/keepalived/keepalived.conf #编辑配置文件
! Configuration File for keepalived
global_defs { #全局参数
router_id LVS_02 #指定名称,各个服务器名称要不一样
}
vrrp_instance VI_1 { #指定vrrp热备参数
state BACKUP #服务器角色是master,备份服务器设置为BACKUP
interface ens33 #修改物理网卡名称,默认是centos6的eth0
virtual_router_id 10 #组号相同
priority 145 #优先级,主服务器设置要大于备服务器
advert_int 1
authentication {
auth_type PASS #验证类型和密码,不建议修改
auth_pass 123
}
virtual_ipaddress {
192.168.74.100 #漂移地址(VIP)地址,可以有多个
}
}
[root@haproxy2 keepalived-2.0.13]# cd
[root@haproxy2 ~]# systemctl start keepalived #开启服务
[root@haproxy2 ~]# ip addr #查询漂移地址


七、、打开网页,查看调度情况



八、进行Haproxy1进行日志管理(主备服务器都配置)

[root@haproxy1 ~]# vi /etc/haproxy/haproxy.cfg


[root@haproxy1 ~]# systemctl restart haproxy.service #*簦羧罩竟δ
[root@haproxy1 ~]# vi /etc/rsyslog.d/haproxy.conf


[root@haproxy1 ~]# systemctl restart rsyslog.service
[root@haproxy1 ~]# systemctl restart haproxy.service

九、进行Haproxy2进行日志管理(主备服务器都配置)

[root@haproxy2 ~]# vi /etc/haproxy/haproxy.cfg


[root@haproxy2 ~]# systemctl restart haproxy.service #*簦羧罩竟δ
[root@haproxy2 ~]# vi /etc/rsyslog.d/haproxy.conf


[root@haproxy2 ~]# systemctl restart rsyslog.service
[root@haproxy2 ~]# systemctl restart haproxy.service

十一、关闭主服务器后,漂移ip由备份服务器承担 ,继续工作

[root@haproxy1 ~]# systemctl stop keepalived



[root@haproxy2 ~]# cd /var/log/haproxy/
[root@haproxy2 haproxy]# tail -100 /var/log/messages


[root@haproxy2 haproxy]# cat haproxy-info.log
[root@haproxy2 haproxy]# cat haproxy-notice.log


十二、统计页面设置

[root@haproxy1 ~]# vi /etc/haproxy/haproxy.cfg

listen admin_stats
bind 0.0.0.0:1080
#设置Frontend和Backend的组合体,监控组的名称,按需要自定义名称
mode http #http的7层模式
option httplog #采用http日志格式
#log 127.0.0.1 local0 err #错误日志记录
maxconn 10 #默认的最大连接数
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm XingCloud Haproxy #统计页面密码框上提示文本
stats auth pear:pear #设置监控页面的用户和密码:pear,可以设置多个用户名
stats auth admin:admin #置监控页面的用户和密码: admin
stats hide-version #隐藏统计页面上HAProxy的版本信息
stats admin if TRUE


[root@haproxy1 ~]# systemctl restart haproxy


相关推荐

最新更新

猜你喜欢