之前说过的lvs搭建是服务器集群代理的方法之一,而lvs有着的特点就是在底层中有着非常良好的工作原理环境,他性能非常好。但是同样的,缺点也很明显,他无法实现动静分离,而且对于健康检查方面的性能并没有haproxy。
我们可以直接进行yum安装该软件,当然也可以使用源代码进行安装,推荐使用yum进行安装。yum -y install haproxy
今天要做的搭建就相当于使haproxy取代了ipvsadm
下载完成后,就可以开始进行搭建步骤了,需要用到的材料为,两台调度器,两台及以上的集群。其中,集群可以单独只下载nginx或者httpd,推荐搭建好lnmp或者lamp等环境,方便验证动静态效果。
1)首先调度器需要下载好haproxy
2)设置虚拟VIP地址,即ens33:0,这边设置的虚拟网卡为192.18.53.254
3) vim /etc/haproxy/haproxy.cfg修改haproxy配置文件,基础配置如下:
需要更改的配置为调度算法还有服务器的加入:
其中,算法有以下几种方式:
roundrobin 轮询
static-rr 权重轮询
leastconn 最少链接
source 根据ip地址请求连接
url 根据请求的url连接
url_param 根据请求的url参数进行调度
其中最常用到的为轮询和最少链接,可以先做一个简单的测试,只保留静态模块,将动态模块注释掉,A和B节点服务器分别输入a和b的网页内容,重启haproxy后直接输入虚拟ip地址进行测试:
更改端口和节点服务器地址,并且将模块更改成静态
直接输入虚拟ip地址进行验证:
第一次刷新:
由于是轮询,所以每次刷新都会进行服务器节点的跳转
4)日志分析
传统的服务器启动日志只需要到相应的文件夹中就可以看到,但是haproxy软件它的启动报停日志是需要手动去配置的。
1、首先需要进入vim /etc/rsyslog.conf该位置对其配置文件进行更改。
将如下两行的注释给去掉:
并且追加字段至local7字段下,该字段意思为在/var/log/路径下生成一个haproxy.log的文件:
2、再次进入haproxy的配置文件中进行更改,主要为添加其端口:
当以上操作都已经配置完成后,开启rsyslog服务,并且重启haproxy服务,而后就可以看到在/var/log/下有haproxy.log日志文件生成。我们也可以手动更改该日志文件生成的位置。
5)动态追踪
该追踪主要是针对,当服务器集群数量较多的时候,但看日志可能会比较头疼,而追踪文件可以统计出一个准确的访问数据,方便查看以及管理。
主要操作就是进入配置文件vim /etc/haproxy/haproxy.cfg的最后段节下追加如下字段:
listen stats
bind 0.0.0.0:8080
stats refresh 30s
stats uri /stats
stats realm Haproxy Manager
stats auth admin:admin
stats hide-version
stats admin if TRUE
重启haproxy端口,这样的话,就可以进行网页刷新访问(用户名密码为admin和admin)
目前页面并没有爆红等状况出现,证明一切开启正常,如果报红,则证明某一模块并没有开启成功。
6)下载keepalived,并且进入其配置文件更改,注意,因为是ipvsadm和keepalived天生附带有绑定关系,所以不需要进行过多操作,但是keepalived和haproxy二者没有进行绑定,所以要进行手动声明才可以进行。将/etc/keepalived下的配置文件复制一份,并将其内容替换成如下:
global_defs {
router_id R1 {
}
}
vrrp_script check_haproxy {
script “/etc/haproxy/check.sh”
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 20
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.53.254
}
track_script {
check_haproxy
}
}
global下的vrrp模块是为了指明启动时所需要验证的脚本,当然,该脚本需要自己手动去编写。在自己指明的/etc/haproxy路径下,编写一个名为check.sh的脚本:
#!/bin/bash
A=ps -C haproxy --no-header |wc -l
if [ $A -eq 0 ]
then
systemctl start haproxy
if [ ps -C haproxy --no-header |wc -l
-eq 0 ]
then
killall -9 haproxy
#echo “haproxy is down” | mail -s “alarm” [email protected]
#sleep 3600
fi
fi
编写完成后,启动加上永久开启haproxy端口和keepalived端口服务,开始进行第二台虚拟机操作(要注意给该脚本加上可执行权限,不然的话有可能执行不起来):
第二个调度器一样要先下载haproxy和keepalived软件,下载完成之后同样去配置该软件(比较简便的方法就是从第一台调度器上将他们的配置文件传输到第二台调度器上,因为需要修改的配置文件地方其实不多。)
主要就只是修改/etc/keepalived/keepalived.conf的几处即可,设置完成后同样的自启动并且开启keepalived和haproxy服务
7)验证
当我们手动停止haproxy服务的时候,我们可以通过ps -C haproxy来查看是否真的被关闭,由于我们创建了一个手动开启的脚本,那么这个时候即使我们停止该服务,该服务也不会真正被停掉。
第二个就是验证当我们的第一台调度器坏掉的时候,第二台调度器能不能顺利的继承虚拟ip地址继续进行工作:
可以看到,当第一个调度器被关掉之后,第二个调度器立马就衔接上了虚拟ip地址
1)在haproxy的配置文件中,加虚拟ip地址的那一块,后辍可以再增添一些参数,比如:
2)使用源代码安装haproxy的好处是有个别的应用是yum安装所没有的,如果想使用源代码安装,首先需要去到官网下载该安装包:
tar xf lua-5.4.3.tar.gz -C /usr/local
cd /usr/local/lua-5.4.3
yum install -y readline-devel
make linux
查看安装版本
./src/lua
lua-5.4.3 Copyright © 1994-2020 Lua.org, PUC-Rio
print(‘hello world’)
hello world
yum install -y gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop bc zlib-devel ntpdate lsof tcpdump
进入haproxy源码包目录
make -j lscpu |awk 'NR==4{print $2}'
ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE
_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 USE_LUA=1 LUA_INC=/usr/local/lua-5.4.3/src/ LUA_LIB=/usr/local/lua-5.4.3/src/ PREFIX=/usr/local/haproxy
echo $? 检查是否成功编译
make install PREFIX=/usr/local/haproxy
cd /usr/local/haproxy/sbin
./haproxy -v
HA-Proxy version 2.3.5-5902ad9 2021/02/06 - https://haproxy.org/
Status: stable branch - will stop receiving fixes around Q1 2022.
Known bugs: http://www.haproxy.org/bugs/bugs-2.3.5.html
Running on: Linux 3.10.0-862.el7.x86_64