文章目录
前言
在ansible使用那块,已经学过基本的haproxy的安装使用ansible角色使用2.2
在企业运维1中我们已经实现IOS模型第四层上的负载均衡与高可用企业运维1
但是存在很多不足
- 在大规模网络中应用不足
各种转发模式;网络拓扑复杂,运维成本高。 - 和商用LB设备比较
缺少TCP标志位DDOS攻击防御。 - 主备部署方式不足
性能无法线性扩展。
本篇内容主要利用haproxy+pacemaker实现在IOS模型第七层的负载均衡与高可用
一、haproxy的详细使用
1.1 实验环境清理
- 在企业运维1中我们设置了lvs和keepalived,这里需要将server11和server14上的keepalived停止
- 将server12和server13上的arptables策略删除,并删除vip
- 在企业运维1中我们设置了lvs和keepalived,这里需要将server11和server14上的keepalived停止
- 将server12和server13上的arptables策略删除,并删除vip
1.2 实验环境搭建
- 在server11上安装haproxy并配置,重启服务生效。
配置文件如下:
[root@server11 ~]# cat /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
stats uri /status ##这里增加后台监控
stats auth admin:haojin ##后台监控的用户名和密码
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main *:80 ##这里改成80端口,记得关闭httpd,不然端口冲突
# 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 127.0.0.1:4331 check
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
balance roundrobin
server app1 1.2.3.12:80 check #改为rs的ip和端口,这里我是12和13
server app2 1.2.3.13:80 check
# server app3 127.0.0.1:5003 check
# server app4 127.0.0.1:5004 check
1.3 haproxy日志设置
- haproxy默认不记录日志,我们需要进行设置
vim /etc/haproxy/haproxy.cfg
vim /etc/sysconfig/rsyslog
vim /etc/rsyslog.conf
重启日志服务,重启haproxy,查看日志是否生成!
systemctl restart rsyslog.service
systemctl restart haproxy.service
cat /var/log/haproxy.log
可以看到我刷新几次页面,日志被记录
1.4 给后台监测增加密码
stats uri /status ##这里增加后台监控
stats auth admin:haojin ##后台监控的用户名和密码
vim /etc/haproxy/haproxy.cfg
1.5 haproxy的source模式
介绍
源地址散列调度(Source Hashing Scheduling)算法正好与目标地址散列调度算法相反,它根据请求的源 IP 地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
这个效果就是一直是调server12
1.6 default_backend和use_backend的使用
配置文件解释
- default_backend
default_backend
use_backend
在没有匹配的”use_backend”规则时为实例指定使用的默认后端,因此,其不可应用于backend区段。在”frontend”和”backend”之间进行内容交换时, 通常使用”use-backend”定义其匹配规则;而没有被规则匹配到的请求将由此 参数指定的后端接收。
结果:
1.7 设置黑/白名单及重定向网址
结果:
1.8 redirect location设置默认访问地址
结果:
1.9 读写操作与读写分离
acl write method POST | PUT
(读的时候是默认的app,在server2上,写的时候的在server3上,
数据存储在server3上,server2和server3上需要同样的文件,实现读写分离)
俩个php文件内容
index.php
<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
upload_file.php
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 2000000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
http://172.25.13.100/
测试:
二、pacemaker的搭建(集群,没有主辅之分)
2.1 备用机前期的一些简单设置
测试:
2.2 pacemaker的配置
下载pacemaker有俩个包需要另一个仓库才可以全部安装成功。
2.3 stonith的设置(fencing设备) (后期看一看)
网卡坏了,内核坏了也不可能手动去重启网卡,重启电脑。所以需要设置stonith。
stonith相当于电源交换机,插排,可以发信息告诉stonith需要断开哪个电源(直接断电),
开启哪个电源,实现了远程自动开关机。
小知识:
- Intel支持的虚拟化技术是kvm,AMD支持的是svm
- 没有kvm和svm之前使用的是qemu技术,半虚拟化。
- kvm解决的是cpu和memory的问题,而qemu结局的是剩下的问题,一起组成了一个完整的虚拟机。
对真机的操作
对server1和server4上面的操作
开始配置stonith
检测配置了stonith之后的效果
- 可以实现摧毁内核,然后自动重启。
- 注意:如果stonith设备老是自动停止,可能是真机的防火墙和selinux设置问题。
- 可以关闭防火墙,将selinux配置文件改为disabled。