微网站开发需求文档,廊坊网站霸屏,wordpress 获取分类名称,网站前台登录模板一、负载均衡
1.1、概念#xff1a;
负载均衡SLB#xff08;Server Load Balancer#xff09;是一种对流量进行按需分发的服务#xff0c;通过将流量分发到不同的后端服务来扩展应用系统的服务吞吐能力#xff0c;并且可以消除系统中的单点故障#xff0c;提升应用系统…一、负载均衡
1.1、概念
负载均衡SLBServer Load Balancer是一种对流量进行按需分发的服务通过将流量分发到不同的后端服务来扩展应用系统的服务吞吐能力并且可以消除系统中的单点故障提升应用系统的可用性。至于为什么使用它可参照我之前的博客lvs用法简介中。
1.2、算法
加权轮询(WRR)算法为每台分配一个权重权重表示相对于其他服务器自身能处理连接的能力。权重为n表示SLB为下一服务器分配流量之前要为这台服务器分配n条新连接。
加权最小连接(WLC)算法SLB会将新连接分配给活动连接数最少的真实服务器。为每台真实服务器分配权重m服务器处理活动连接的能力等于m除以所有服务器权重之和。SLB会将新连接分配给活动连接数远少于其能力范围的真实服务器。
使用加权最小连接(WLC)算法时SLB使用一种慢启动的方式来控制对新加真实服务器的访问。“慢启动”限制了新连接的建立频率并允许逐渐增加以此来防范服务器的的过载。
二、haproxy用法
2.1、环境搭建
新建三个虚拟机
Webserver1和2以及haproxy基于rhel9
Hadproxy设置为172.25.254.100server分别为10和20
分别echo webserver1 - 172.25.254.10 /usr/share/nginx/html/index.html
echo webserver2 - 172.25.254.20 /usr/share/nginx/html/index.html
2.2、全局参数
两个主机中
在主机haproxy中下载yum install haproxy -y
接着在vim /etc/haproxy/haproxy.cfg 接着vim ~/.vimrc
Set ts4 ai sw4
先写前两行然后#掉
然后重启systemctl restart nginx.service
这里使用的是xshell所以直接创建新的本地链接。 接着vim /etc/haproxy/haproxy.cfg中将global后面的#注释全部删掉 log是日志chroot是运行目录maxconn指的是最大连接数user是运行用户group指的是运行组。nbproc 设置进程数cpu更改使用核心。
然后再次重启haproxy pstree -p | grep haproxy可以查看进程 接着vim /etc/haproxy/haproxy.cfg 运行后注释掉上述变量
Cat /proc/33101/status | grep -i thread
接着Vim /etc/rsyslog.conf
2.3、更改日志
在 vim /etc/haproxy/haproxy.cfg中查看日志名 接着 vim /etc/rsyslog.conf 相当于把udp打开
使用如下命令查看 2.4、proxies
global参数 proxies参数
proxies参数设置 参数类型作用default[]proxies默认配置项针对以下的frontend、backend和listen生效可以多个 name也可以没有namefrontendproxies前端servername类似于Nginx的一个虚拟主机 server和LVS服务集 群。backendproxies后端服务器组等于nginx的upstream和LVS中的RS服务器listenproxies将frontend和backend合并在一起配置相对于frontend和backend 配置更简洁生产常用 紧接着vim /etc/httpd/conf/httpd.conf
添加Listen 8080 接着vim /etc/haproxy/haproxy.cfg 2.5、socat
同样是vim /etc/httpd/conf/httpd.conf
配置
listen webclusterbind *:80 mode http balance roundrobinserver web1 172.25.254.10:80server web2 172.25.254.20:80
vim /etc/haproxy/haproxy.cfg 添加如图所示haproxy如何热处理 三、haproxy的哈希圆算法
3.1、概念
HAProxy通过固定参数 balance 指明对后端服务器的调度算法 balance参数可以配置在listen或backend选项中。 HAProxy的调度算法分为静态和动态调度算法 有些算法可以根据参数在静态和动态算法中相互转换。
3.2、静态算法
静态算法按照事先定义好的规则轮询公平调度不关心后端服务器的当前负载、连接数和响应速度等且无法实时修改权重(只能为0和1,不支持其它值)只能靠重启HAProxy生效。
3.2.1、static-rr基于权重的轮询调度
不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其它值)不支持端服务器慢启动其后端主机数量没有限制相当于LVS中的 wr
3.2.2、first 根据服务器在列表中的位置自上而下进行调度 其只会当第一台服务器的连接数达到上限新请求才会分配给下一台服务 其会忽略服务器的权重设置 不支持用socat进行动态修改权重,可以设置0和1,可以设置其它值但无效
4、动态算法
基于后端服务器状态进行调度适当调整
新请求将优先调度至当前负载较低的服务器
权重可以在haproxy运行时动态调整无需重启
有两种roundrobin leastconn
4.1.1 roundrobin动态算法
基于权重的轮询动态调度算法
支持权重的运行时调整不同于lvs中的rr轮训模式
HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数)
其每个后端backend中最多支持4095个real server
支持对real server权重动态调整
roundrobin为默认调度算法,此算法使用广泛 4.1.2、一致性哈希哈希圆
1、后端服务器哈希环点keyAhash(后端服务器虚拟ip)%(2^32)
2、客户机哈希环点key1hash(client_ip)%(2^32) 得到的值在[0---4294967295]之间
3、将keyA和key1都放在hash环上将用户请求调度到离key1最近的keyA对应的后端服务器 四、基于cookie会话保持
4.1概念、意义
cookie value为当前server指定cookie值实现基于cookie的会话黏性相对于基于 source 地址hash 调度算法对客户端的粒度更精准但同时也加大了haproxy负载目前此模式使用较少 已经被session 共享服务器代替。
vim etc/haproxy/haproxy.cfg配置 配置选项
cookie name [ rewrite | insert | prefix ][ indirect ] [ nocache ][ postonly ] [
preserve ][ httponly ] [ secure ][ domain ]* [ maxidle idle ][ maxlife ]name
insert
#cookie 的 key名称用于实现持久连接
#插入新的cookie,默认不插入cookieindirect #如果客户端已经有cookie,则不会再发送cookie信息
nocache
#当client和hapoxy之间有缓存服务器如CDN时不允许中间缓存器缓存cookie
#因为这会导致很多经过同一个CDN的请求都发送到同一台后端服务器 五、haproxy的状态页面监控
通过web界面显示当前HAProxy的运行状态
stats enable
stats hide-version
stats refresh delay
stats uri prefix
#基于默认的参数启用stats page#将状态页中haproxy版本隐藏
#设定自动刷新时间间隔默认不自动刷新
#自定义stats page uri默认值/haproxy?stats
stats auth user:passwd #认证时的账号和密码可定义多个用户,每行指定一个用户
#默认no authenticationstats admin { if | unless } cond #启用stats page中的管理功能 使用curl -A “handsomeyang” 172.25.254.100/index.html 测试 六、ACL
6.1概念
访问控制列表ACLAccess Control Lists 是一种基于包过滤的访问控制技术 它可以根据设定的条件对经过服务器传输的数据包进行过滤(条件匹配)即对接收到的报文进行匹配和过 滤基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内 容进行匹配并执行进一步操作比如允许其通过或丢弃 6.2ACL配置选项
#用acl来定义或声明一个aclacl
acl
名称
aclname criterion [flags]
[operator]
匹配规范
匹配模式
[value]
具体操作符 操作对象类型
最后测试
[roothaproxy ~]# curl www.handsomeyang.org
webserver1 - 172.25.254.10
[roothaproxy ~]# curl www.test.com
webserver2 - 172.25.254.20