Linux企业运维 6.8 -- haproxy负载均衡

目录

一、HAProxy 简介

HAProxy 特点

适用场景

二、HAProxy负载均衡

1.安装部署haproxy

2.身份验证 

3.自定义路由监控器

4.负载均衡权重

5.设置备份服务器

6.访问黑名单与错误重定向

7.访问重定向

8.读写分离

四、HAProxy高可用

环境配置

配置集群管理VIP 

五、fence防止脑裂


一、HAProxy 简介

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

HAProxy 特点

1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
7、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
8、不能做Web服务器即Cache。

适用场景

1.网站建设初期,可以选用Nigix/HAproxy作为反向代理负载均衡(或者流量不大都可以不选用负载均衡),因为其配置简单,性能也能满足一般的业务场景。
  如果考虑到负载均衡器是有单点问题,可以采用Nginx/HAproxy+Keepalived来避免。
2.网站并发达到一定程度之后,为了提高稳定性和转发效率,可以使用LVS、毕竟LVS比Nginx/HAproxy要更稳定,转发效率也更高。不过维护LVS对维护人员的要求也会更高,投入成本也更大。

二、HAProxy负载均衡

1.安装部署haproxy

在server1上安装haproxy
编辑haproxy的配置文件

yum install -y haproxy

vim /etc/haproxy/haproxy.cfg
\\\
stats uri /status                     #设置统计页面的uri为/status
frontend main *:80                   #监听地址为80
default_backend  app                 #默认的请求转发地址,名为app
backend app                          #定义一个名为app的后端部分,需要与frontend的配置项default_backend 值相一致,算法为轮询,将动态请求转到以下两台服务器的任意一台
server app1 172.25.35.2:80 check     #定义的多个后端
server app2 172.25.35.3:80 check     #定义的多个后端
\\\

Linux企业运维 6.8 -- haproxy负载均衡_第1张图片

server1启动haproxy服务,看到端口处于监听状态 

Linux企业运维 6.8 -- haproxy负载均衡_第2张图片

server2和server3安装http,在网页发布文件分别写入server2/server3,然后启动httpd服务

在真机或浏览器访问172.25.35.1进行测试,可以看到轮询请求

Linux企业运维 6.8 -- haproxy负载均衡_第3张图片

Linux企业运维 6.8 -- haproxy负载均衡_第4张图片

 server1中修改系统文件 /etc/security/limits.conf,添加如下配置

vim /etc/security/limits.conf
\\\
# End of file
haproxy         nofile  4096
\\\

浏览器访问统计页面172.25.35.1/status

Linux企业运维 6.8 -- haproxy负载均衡_第5张图片

关闭server3的httpd服务
在web统计页面也可以看到app1标红了,就是出现了问题无法工作

Linux企业运维 6.8 -- haproxy负载均衡_第6张图片

2.身份验证 

编译haproxy配置文件,输入用户名密码
注意:haproxy配置文件修改后,必须使用reload,不能restart,否则会使连接断开) 

Linux企业运维 6.8 -- haproxy负载均衡_第7张图片

此时浏览器访问会验证身份 

Linux企业运维 6.8 -- haproxy负载均衡_第8张图片Linux企业运维 6.8 -- haproxy负载均衡_第9张图片

3.自定义路由监控器

自定义设置符合监控条件的url转发到指定服务器

编译haproxy配置文件,并重新加载服务:当访问路径以/static /images等开头,以.jpg .gif等结尾时,跳入backend static模块,由该模块内server提供服务

vim haproxy.cfg
\\\
frontend  main *:80
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

    use_backend static          if url_static
    default_backend             app

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static 172.25.7.3:80 check
\\\
 
 systemctl reload haproxy.service    #重新加载

Linux企业运维 6.8 -- haproxy负载均衡_第10张图片

在server3网站目录内创建images文件夹并放入一张jpg格式的图片 

Linux企业运维 6.8 -- haproxy负载均衡_第11张图片

 Linux企业运维 6.8 -- haproxy负载均衡_第12张图片

浏览器访问172.25.7.1/images/1.png

Linux企业运维 6.8 -- haproxy负载均衡_第13张图片

自己下载的图片如果无法在浏览器访问可能是图片格式问题,在配置文件中添加该格式参数即可 

4.负载均衡权重

vim haproxy.cfg
设置后端服务器的权重值,这里将app1(也就是server2)的权重设置为weight2

即访问服务器时,haproxy通过权重值分配给后端服务器的概率为2:1

5.设置备份服务器

在haproxy配置文件中添加备份服务器

vim haproxy.cfg
\\\
server  backup 172.25.35.1:8080 backup      #因为haproxy用的端口是80,所以这里http用8080端口
\\\

systemctl reload haproxy.service 

在server1中编辑http配置文件

vim /etc/httpd/conf/httpd.conf
\\\
Listen 8080
\\\

echo server1 > /var/www/html/index.html
systemctl restart httpd     #重启server1的httpd服务,现在可以看到8080端口处于监听状态
netstat -antlp

访问172.25.35.1,可以看到备份服务器生效

6.访问黑名单与错误重定向

现实中我们需要拉黑一些恶意的Ip访问服务器
所以可以直接将IP放入黑名单或者错误重定向到其他网址

编辑haproxy的配置文件,添加黑名单

vim haproxy.cfg
\\\
    acl blacklist src 172.25.35.250
    block if blacklist

\\\
systemctl reload haproxy.service

Linux企业运维 6.8 -- haproxy负载均衡_第14张图片

用黑名单中的IP172.25.35.250主机访问发现被拒绝403

如果觉得直接拒绝访问失败的页面不妥,可以直接重定向跳转到别的页面,我们可以在配置文件中将黑名单访问重定向条转到其他网址 

vim haproxy.cfg
\\\
    errorloc 403 http://www.taobao.com       #添加错误重定向
\\\
systemctl reload haproxy.service

Linux企业运维 6.8 -- haproxy负载均衡_第15张图片

Linux企业运维 6.8 -- haproxy负载均衡_第16张图片

此时黑名单中的IP172.25.35.250主机访问,可以看到页面没有报错而是直接跳转到了百度网站 

7.访问重定向

vim haproxy.cfg
\\\
    redirect location http://172.25.35.1:8080/rewrite.html
\\\
systemctl reload haproxy.service

8.读写分离

目标:访问流量导向server2服务器,写入数据时导向server2服务器

编辑server1的haproxy配置文件,使得server2来接收访问流量,当写入数据时切换至server3

Linux企业运维 6.8 -- haproxy负载均衡_第17张图片

Linux企业运维 6.8 -- haproxy负载均衡_第18张图片

在server2和server3上都安装php 

在server2网站目录下创建index.php和upload_file.php,创建upload文件夹并赋予权限,用来接收访问者上传的文件
index.php和upload_file.php文件源码需要下载,这里只需要了解

Linux企业运维 6.8 -- haproxy负载均衡_第19张图片

编辑upload_file.php
将上传目录改为自己创建的目录upload

Linux企业运维 6.8 -- haproxy负载均衡_第20张图片

将上一步server2上创建的文件和文件夹发送给server3

Linux企业运维 6.8 -- haproxy负载均衡_第21张图片

重启httpd服务

浏览器访问172.25.35.1进行上传测试

Linux企业运维 6.8 -- haproxy负载均衡_第22张图片

上传图片,在server3的指定上传目录upload中查看

Linux企业运维 6.8 -- haproxy负载均衡_第23张图片

Linux企业运维 6.8 -- haproxy负载均衡_第24张图片

四、HAProxy高可用

环境配置

在真实主机上准备高可用插件的文件夹
将真机中的资源挂载在网络仓库中

在server1上安装高可用插件pacemaker 和其需要的依赖

Linux企业运维 6.8 -- haproxy负载均衡_第25张图片

Linux企业运维 6.8 -- haproxy负载均衡_第26张图片

为了操作方便,server1生成免密操作密钥,发送给server4
将server1的仓库配置文件发送给server4并安装

Linux企业运维 6.8 -- haproxy负载均衡_第27张图片

开启server1和server4的pcsd服务,可以使用pcs命令
修改server1和server4的hacluster认证密码,然后认证 

systemctl enable --now pcsd.service         ##启动服务
ssh server4 systemctl enable --now pcsd.service    
echo westos | passwd --stdin hacluster      ##修改密码
ssh server4 echo westos | passwd --stdin hacluster
pcs cluster auth server4 server1     ##认证
设定集群的名称为mycluster,集群内有server1和server4两个设备
pcs cluster setup --name mycluster server1 server4

Linux企业运维 6.8 -- haproxy负载均衡_第28张图片

启动集群内所有服务节点 

pcs cluster start --all
pcs cluster enable --all
pcs property set stonith-enabled=false    ##禁用stonith功能,使其不出现告警
pcs status   #查看状态

Linux企业运维 6.8 -- haproxy负载均衡_第29张图片Linux企业运维 6.8 -- haproxy负载均衡_第30张图片

在server4上安装haproxy,并将server1的haproxy配置文件发送给server4

server1中
scp haproxy.cfg server4:/etc/haproxy/

配置集群管理VIP 

 现在haproxy已经有了备用负载均衡服务器,我们可以设置一个VIP来通过访问VIP即可追踪到正在使用的haproxy,固定的VIP方便用户访问

设定VIP
pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.7.100 op monitor interval=30s     #设定VIP
ip addr #查看

可以看到集群状态里已经获取到了VIP信息,测试访问看到服务已经成功启动 

Linux企业运维 6.8 -- haproxy负载均衡_第31张图片

在server1中删除vip网络接口,因为server4节点已经为后备状态了,所以vip网络接口信息又会自动生成

Linux企业运维 6.8 -- haproxy负载均衡_第32张图片

关闭server1、server4 的haproxy服务

在server1中
将haproxy 添加到集群管理

pcs resource create haproxy systemd:haproxy op monitor interval=60s
pcs status     #查看集群状态

Linux企业运维 6.8 -- haproxy负载均衡_第33张图片

查看状态发现vip运行在server1节点,haproxy运行在server4节点 

Linux企业运维 6.8 -- haproxy负载均衡_第34张图片

我们需要将vip和haproxy 放入同一个组中解决不同步的问题

pcs resource group add hagroup vip haproxy   #将vip和haproxy放在hagroup组中
pcs status    

Linux企业运维 6.8 -- haproxy负载均衡_第35张图片

我们将server1设为备用服务器,可以看到vip和haproxy都在server4节点上运行 

 关闭server4的haproxy服务,查看集群运行状态,可以看到运行出现了错误和警告

Linux企业运维 6.8 -- haproxy负载均衡_第36张图片

五、fence防止脑裂

Fence主要作用是防止两个系统同时向资源写数据
破坏资源的安全性和一致性从而导致脑裂

真实主机安装fence插件

dnf install -y fence-virtd-libvirt fence-virtd-multicast fence-virtd
fence_virtd -c    #配置fence(需要输入的只有在网桥的时候选择br0接口,其余回车即可)

Linux企业运维 6.8 -- haproxy负载均衡_第37张图片

Linux企业运维 6.8 -- haproxy负载均衡_第38张图片

因为第一次实验未设为br0,所以后续实验报错,此处需要重视 

Linux企业运维 6.8 -- haproxy负载均衡_第39张图片

配置完可以看到之后要生成的fence_xvm.key文件的存放位置 

建立fence_xvm.key的存放目录,并生成fence_xvm.key文件

mkdir /etc/cluster
cd /etc/cluster
dd if=/dev/urandom of=fence_xvm.key bs=128 count=1
systemctl restart fence_virtd.service
scp fence_xvm.key server1:/etc/cluster/
scp fence_xvm.key server4:/etc/cluster/

Linux企业运维 6.8 -- haproxy负载均衡_第40张图片

重启fence服务,关闭火墙
真实主机将生成的密钥文件发送给server1、server4 

Linux企业运维 6.8 -- haproxy负载均衡_第41张图片

在server1、server4安装客户端fence

yum install fence-virt -y
pcs stonith list    #查看stonith列表
stonith_admin -I    #查询fence设备

Linux企业运维 6.8 -- haproxy负载均衡_第42张图片

 查询fence设备的元数据

Linux企业运维 6.8 -- haproxy负载均衡_第43张图片

Linux企业运维 6.8 -- haproxy负载均衡_第44张图片

在server1将server1、server4节点添加到fence 

#server1:y1(主机名:虚拟机名)

pcs stonith create vmfence fence_xvm pcmk_host_map="server1:server1;server4:server4" op monitor interval=60s     #server1:serevr1(主机名:虚拟机名)
pcs status    #查看状态

可以看到haproxy和vip在server1,fence运行在server4

Linux企业运维 6.8 -- haproxy负载均衡_第45张图片

关闭server1网卡 

 成功切换

Linux企业运维 6.8 -- haproxy负载均衡_第46张图片

  让系统崩溃,执行后主机断点重启

server1接管 

Linux企业运维 6.8 -- haproxy负载均衡_第47张图片

你可能感兴趣的:(Linux操作系统基础六,linux,nginx,运维)