龙空技术网

负载均衡管理(2/2)

运维阁 84

前言:

此刻小伙伴们对“url_param均衡算法”可能比较讲究,兄弟们都想要剖析一些“url_param均衡算法”的相关内容。那么小编同时在网上收集了一些关于“url_param均衡算法””的相关知识,希望我们能喜欢,姐妹们快快来了解一下吧!

第4章使用Keepalived进行初始负载均衡器配置

安装Load Balancer软件包后,必须采取一些基本步骤来设置LVS路由器和用于Keepalived的真实服务器。本章详细介绍了这些初始步骤。

4.1。基本的Keepalived配置

在此基本示例中,两个系统配置为负载平衡器。 LB1(活动)和LB2(备份)将路由请求运行httpd的四个Web服务器池,其中真实IP地址编号为192.168.1.20到192.168.1.24,共享虚拟IP地址10.0.0.1。每个负载均衡器都有两个接口(eth0和eth1),一个用于处理外部Internet流量,另一个用于将请求路由到真实服务器。使用的负载均衡算法是Round Robin,路由方法是Network Address Translation。

4.1.1。创建keapalived.conf文件

Keepalived通过配置为负载均衡器的每个系统中的keepalived.conf文件进行配置。要创建负载平衡器拓扑,如第4.1节“基本Keepalived配置”中所示,请使用文本编辑器在活动和备份负载平衡器LB1和LB2中打开keepalived.conf。例如:

vi /etc/keepalived/keepalived.conf

具有第4.1节“基本Keepalived配置”中详述的配置的基本负载平衡系统具有keepalived.conf文件,如以下代码部分所述。 在此示例中,主动路由器和备用路由器上的keepalived.conf文件相同,但VRRP实例除外,如第4.1.1.2节“VRRP实例”中所述

4.1.1.1。 全球定义

keepalived.conf文件的“全局定义”部分允许管理员在发生负载均衡器更改时指定通知详细信息。 请注意,全局定义是可选的,对于Keepalived配置不是必需的。 keepalived.conf文件的这一部分在LB1和LB2上都是相同的。

global_defs { notification_email { admin@example.com } notification_email_from noreply@example.com smtp_server 127.0.0.1 smtp_connect_timeout 60}

notification_email是负载均衡器的管理员,而notification_email_from是发送负载均衡器状态更改的地址。 SMTP特定配置指定从中邮寄通知的邮件服务器。

4.1.1.2。 VRRP实例

以下示例显示了主路由器和备份路由器中keeplalived.conf文件的vrrp_sync_group节。 请注意,两个系统之间的状态和优先级值不同。

以下示例显示LB1(主路由器)中keepalived.conf文件的vrrp_sync_group节。

vrrp_sync_group VG1 { group { RH_EXT RH_INT }}vrrp_instance RH_EXT { state MASTER interface eth0 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass passw123 } virtual_ipaddress { 10.0.0.1 }}vrrp_instance RH_INT { state MASTER interface eth1 virtual_router_id 2 priority 100 advert_int 1 authentication { auth_type PASS auth_pass passw123 } virtual_ipaddress { 192.168.1.1 }}

以下示例显示了LB2(备份路由器)的keepalived.conf文件的vrrp_sync_group节。

vrrp_sync_group VG1 { group { RH_EXT RH_INT }}vrrp_instance RH_EXT { state BACKUP interface eth0 virtual_router_id 50 priority 99 advert_int 1 authentication { auth_type PASS auth_pass passw123 } virtual_ipaddress { 10.0.0.1 }}vrrp_instance RH_INT { state BACKUP interface eth1 virtual_router_id 2 priority 99 advert_int 1 authentication { auth_type PASS auth_pass passw123 } virtual_ipaddress { 192.168.1.1 }}

在这些示例中,vrrp_sync_group节定义了通过任何状态更改(例如故障转移)保持在一起的VRRP组。为外部接口定义了一个与Internet通信的实例(RH_EXT),以及一个用于内部接口(RH_INT)的实例。

vrrp_instance行详细说明了VRRP服务守护程序的虚拟接口配置,该守护程序创建虚拟IP实例。状态MASTER指定活动服务器,状态BACKUP指定备份服务器。

interface参数将物理接口名称分配给此特定虚拟IP实例。

virtual_router_id是虚拟路由器实例的数字标识符。在参与此虚拟路由器的所有LVS路由器系统上必须相同。它用于区分同一网络接口上的多个keepalived运行实例。

优先级指定分配的接口在故障转移中接管的顺序;数字越大,优先级越高。此优先级值必须在0到255的范围内,并且配置为状态MASTER的负载平衡服务器的优先级值应设置为高于配置为状态BACKUP的服务器的优先级值。

身份验证块指定用于对服务器进行身份验证以进行故障转移同步的身份验证类型(auth_type)和密码(auth_pass)。 PASS指定密码验证; Keepalived还支持AH或身份验证标头以实现连接完整性。

最后,virtual_ipaddress选项指定接口虚拟IP地址。

4.1.1.3。虚拟服务器定义

keepalived.conf文件的虚拟服务器定义部分在LB1和LB2上都相同。

virtual_server 10.0.0.1 80 { delay_loop 6 lb_algo rr lb_kind NAT protocol TCP real_server 192.168.1.20 80 { TCP_CHECK { connect_timeout 10 } } real_server 192.168.1.21 80 { TCP_CHECK { connect_timeout 10 } } real_server 192.168.1.22 80 { TCP_CHECK { connect_timeout 10 } } real_server 192.168.1.23 80 { TCP_CHECK { connect_timeout 10 } }}

在此块中,首先使用IP地址配置virtual_server。 然后,delay_loop配置运行状况检查之间的时间量(以秒为单位)。 lb_algo选项指定用于可用性的算法类型(在本例中,rr表示Round-Robin;有关可能的lb_algo值的列表,请参阅表4.1,“虚拟服务器的lv_algo值”)。 lb_kind选项确定路由方法,在这种情况下使用网络地址转换(或nat)。

配置虚拟服务器详细信息后,再次通过首先指定IP地址来配置real_server选项。 TCP_CHECK节使用TCP检查真实服务器的可用性。 connect_timeout配置超时发生前的时间(以秒为单位)。

注意

不支持从负载平衡器或其中一个真实服务器访问虚拟IP。 同样,不支持在与真实服务器相同的计算机上配置负载平衡器。

表4.1。 lv_algo虚拟服务器的值

4.2。 Keepalived直接路由配置

Keepalived的直接路由配置与NAT的配置类似。 在以下示例中,Keepalived配置为在端口80上为一组运行HTTP的真实服务器提供负载平衡。要配置直接路由,请将lb_kind参数更改为DR。 第4.1节“基本Keepalived配置”中讨论了其他配置选项。

以下示例显示使用直接路由的Keepalived配置中活动服务器的keepalived.conf文件。

global_defs { notification_email { admin@example.com } notification_email_from noreply_admin@example.com smtp_server 127.0.0.1 smtp_connect_timeout 60}vrrp_instance RH_1 { state MASTER  interface eth0 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass passw123 } virtual_ipaddress { 172.31.0.1 }}virtual_server 172.31.0.1 80 delay_loop 10 lb_algo rr lb_kind DR persistence_timeout 9600 protocol TCP real_server 192.168.0.1 80 { weight 1 TCP_CHECK { connect_timeout 10 connect_port 80 } } real_server 192.168.0.2 80 { weight 1 TCP_CHECK { connect_timeout 10 connect_port 80 } } real_server 192.168.0.3 80 { weight 1 TCP_CHECK { connect_timeout 10 connect_port 80 } }}

以下示例显示使用直接路由的Keepalived配置中备份服务器的keepalived.conf文件。 请注意,状态和优先级值与活动服务器中的keepalived.conf文件不同。

global_defs { notification_email { admin@example.com } notification_email_from noreply_admin@example.com smtp_server 127.0.0.1 smtp_connect_timeout 60}vrrp_instance RH_1 { state BACKUP interface eth0 virtual_router_id 50 priority 99 advert_int 1 authentication { auth_type PASS auth_pass passw123 } virtual_ipaddress { 172.31.0.1 }}virtual_server 172.31.0.1 80 delay_loop 10 lb_algo rr lb_kind DR persistence_timeout 9600 protocol TCP real_server 192.168.0.1 80 { weight 1 TCP_CHECK { connect_timeout 10 connect_port 80 } } real_server 192.168.0.2 80 { weight 1 TCP_CHECK { connect_timeout 10 connect_port 80 } } real_server 192.168.0.3 80 { weight 1 TCP_CHECK { connect_timeout 10 connect_port 80 } }}
4.3。 启动服务

通过在负载均衡器配置中的服务器上输入以下命令来启动服务:

# systemctl start keepalived.service

要通过重新引导使Keepalived服务保持不变,请在负载均衡器配置中的服务器上输入以下命令:

第5章HAProxy配置

本章介绍了基本设置的配置,该配置突出显示了管理员在为高可用性环境部署HAProxy服务时可能遇到的常见配置选项。

HAProxy有自己的一套用于负载平衡的调度算法。这些算法在第5.1节“HAProxy调度算法”中描述。

通过编辑/etc/haproxy/haproxy.cfg文件来配置HAProxy。

使用HAProxy的Load Balancer配置包含五个配置部分:

第5.2节“全局设置”

代理部分,由4个小节组成:

第5.3节“默认设置”设置

第5.4节“前端设置”设置

第5.5节“后端设置”设置

5.1。 HAProxy调度算法

可以在/etc/haproxy/haproxy.cfg配置文件的后端部分的balance参数中编辑用于负载平衡的HAProxy调度算法。请注意,HAProxy支持具有多个后端的配置,并且每个后端都可以配置调度算法。

Round-Robin(roundrobin)

按顺序在真实服务器池周围分配每个请求。使用此算法,所有真实服务器都被视为等于,而不考虑容量或负载。此调度模型类似于循环DNS,但由于它是基于网络连接而非基于主机的事实,因此更加精细。负载均衡器循环调度也不会受到缓存的DNS查询引起的不平衡的影响。但是,在HAProxy中,由于服务器权重的配置可以使用此调度程序即时完成,因此活动服务器的数量限制为每个后端4095。

静态循环(static-rr)

像Round-Robin一样,围绕真实服务器池顺序分配每个请求,但不允许动态配置服务器权重。但是,由于服务器权重的静态特性,后端的活动服务器数量没有限制。

最小连接(最小连接)

将更多请求分发给具有较少活动连接的真实服务器。具有不同会话或连接长度的动态环境的管理员可能会发现此调度程序更适合其环境。它也是一组服务器具有不同容量的环境的理想选择,因为管理员可以使用此调度程序即时调整权重。

来源(来源)

通过散列请求源IP地址并除以所有正在运行的服务器的权重来分配对服务器的请求,以确定哪个服务器将获得请求。在所有服务器都在运行的情况下,源IP请求将始终由同一个真实服务器提供服务。如果正在运行的服务器的数量或重量发生变化,则会话可能会移动到另一个服务器,因为散列/权重结果已更改。

URI(uri)

通过散列整个URI(或URI的可配置部分)将请求分发给服务器,并除以所有正在运行的服务器的权重,以确定请求的服务器。在所有活动服务器都在运行的情况下,目标IP请求将始终由同一个真实服务器提供服务。可以通过URI的目录部分的开头处的字符长度来进一步配置该调度器,以计算散列结果和URI中的目录深度(由URI中的正斜杠指定)以计算散列结果。

网址参数(url_param)

通过在源URL请求中查找特定参数字符串并执行哈希计算除以所有正在运行的服务器的权重,将请求分发到服务器。如果URL中缺少该参数,则调度程序默认为循环调度。可以基于POST参数以及基于管理员在计算散列结果之前为特定参数的权重分配的最大八位字节的数量来使用修饰符。

标题名称(hdr)

通过检查每个源HTTP请求中的特定标头名称并执行散列计算除以所有正在运行的服务器的权重,将请求分发到服务器。如果标头不存在,则调度程序默认为循环调度。

RDP Cookie(rdp-cookie)

通过查找每个TCP请求的RDP cookie并执行哈希计算除以所有正在运行的服务器的权重,将请求分发给服务器。如果标头不存在,则调度程序默认为循环调度。此方法非常适合持久性,因为它可以保持会话完整性。

5.2。 全局设置

全局设置配置适用于运行HAProxy的所有服务器的参数。 典型的全局部分可能如下所示:

 global log 127.0.0.1 local2 maxconn 4000 user haproxy group haproxy daemon

在上面的配置中,管理员已将服务配置为将所有条目记录到本地syslog服务器。 默认情况下,这可能是/ var / log / syslog或某个用户指定的位置。

maxconn参数指定服务的最大并发连接数。 默认情况下,最大值为2000。

user和group参数指定haproxy进程所属的用户名和组名。

最后,守护进程参数指定haproxy作为后台进程运行。

5.3。 默认设置

默认设置配置适用于配置(前端,后端和侦听)中所有代理子部分的参数。 典型的默认部分可能如下所示:

注意

在代理子部分(前端,后端或监听)中配置的任何参数都优先于默认的参数值。

defaults mode http log global option httplog option dontlognull retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m

mode指定HAProxy实例的协议。使用http模式将源请求连接到基于HTTP的真实服务器,非常适合负载平衡Web服务器。对于其他应用程序,请使用tcp模式。

log指定写入日志条目的日志地址和syslog工具。全局值将HAProxy实例引用到全局部分中log参数中指定的任何内容。

option httplog允许记录HTTP会话的各种值,包括HTTP请求,会话状态,连接号,源地址和连接计时器以及其他值。

option dontlognull禁用空连接的日志记录,这意味着HAProxy将不记录其中没有数据传输的连接。建议不要将此类环境用于Internet上的Web应用程序,其中空连接可能表示恶意活动,例如漏洞的开放端口扫描。

retries指定真实服务器在第一次尝试连接失败后重试连接请求的次数。

各种超时值指定给定请求,连接或响应的不活动时间长度。这些值通常以毫秒表示(除非另有明确说明),但可以通过将单位后缀为数值以任何其他单位表示。支持的单位是us(微秒),ms(毫秒),s(秒),m(分钟),h(小时)和d(天)。 http-request 10s等待来自客户端的完整HTTP请求10秒。队列1m设置一分钟作为连接断开和客户端收到503或“服务不可用”错误之前等待的时间。 connect 10s指定等待成功连接到服务器的秒数。 client 1m指定客户端可以保持非活动状态的时间量(以分钟为单位)(它既不接受也不发送数据)。 server 1m指定服务器在超时发生之前接受或发送数据的时间(以分钟为单位)。

5.4。 前端设置

前端设置为客户端连接请求配置服务器的侦听套接字。 前端的典型HAProxy配置可能如下所示:

frontend main  bind 192.168.0.10:80 default_backend app

名为main的前端配置为192.168.0.10 IP地址,并使用bind参数侦听端口80。 连接后,使用后端指定所有会话连接到应用程序后端。

5.5。 后端设置

后端设置指定实际服务器IP地址以及负载平衡器调度算法。 以下示例显示了典型的后端部分:

backend app balance roundrobin server app1 192.168.1.1:80 check server app2 192.168.1.2:80 check server app3 192.168.1.3:80 check inter 2s rise 4 fall 3 server app4 192.168.1.4:80 backup

后端服务器名为app。 balance指定要使用的负载均衡器调度算法,在本例中为Round Robin(roundrobin),但可以是HAProxy支持的任何调度程序。有关在HAProxy中配置调度程序的更多信息,请参见第5.1节“HAProxy调度算法”。

服务器行指定后端可用的服务器。 app1到app4是每个真实服务器内部分配的名称。日志文件将按名称指定服务器消息。地址是分配的IP地址。 IP地址中冒号后面的值是特定服务器上连接发生的端口号。 check选项标记服务器以进行定期运行状况检查,以确保它可用并能够接收和发送数据并获取会话请求。服务器app3还将运行状况检查间隔配置为两秒(间隔2),app3必须通过检查以确定服务器是否正常运行(上升4),以及服务器在检查之前连续未通过检查的次数被认为是失败的(秋季3)。

5.6。 开始haproxy

要启动HAProxy服务,请输入以下命令:

# systemctl start haproxy.service

要通过重新引导使HAProxy服务保持不变,请输入以下命令:

# systemctl enable haproxy.service

附录A.示例配置:使用HAProxy和Keepalived负载平衡Ceph对象网关服务器

本附录提供了一个示例,显示了使用Ceph集群配置HAProxy和Keepalived。 Ceph对象网关允许您将对象网关的许多实例分配给单个区域,以便您可以在负载增加时向外扩展。由于每个对象网关实例都有自己的IP地址,因此您可以使用HAProxy和keepalived来平衡Ceph对象网关服务器之间的负载。

在此配置中,HAproxy在Ceph对象网关服务器上执行负载平衡,而Keepalived用于管理Ceph对象网关服务器的虚拟IP地址并监视HAProxy。

HAProxy和keepalived的另一个用例是在HAProxy服务器上终止HTTPS。 Red Hat Ceph存储(RHCS)1.3.x使用Civetweb,RHCS 1.3.x中的实现不支持HTTPS。您可以使用HAProxy服务器在HAProxy服务器上终止HTTPS,并在HAProxy服务器和Civetweb网关实例之间使用HTTP。此示例包括此配置作为过程的一部分。

A.1。先决条件

要使用Ceph对象网关设置HAProxy,您必须具有:

一个正在运行的Ceph集群;

同一区域内至少有两个Ceph对象网关服务器配置为在端口80上运行;

至少有两台服务器用于HAProxy和keepalived。

注意

此过程假定您至少运行了两个Ceph对象网关服务器,并且在通过端口80运行测试脚本时获得了有效响应。

A2。 准备HAProxy节点

以下设置假设两个名为haproxy和haproxy2的HAProxy节点,以及两个名为rgw1和rgw2的Ceph对象网关服务器。 您可以使用您喜欢的任何命名约定。 在两个HAProxy节点上执行以下过程:

1. 安装Red Hat Enterprise Linux 7。

2. 注册节点。

# subscription-manager register

3.启用Red Hat Enterprise Linux 7服务器存储库。

# subscription-manager repos --enable=rhel-7-server-rpms

4.更新服务器

# yum update -y

5.安装管理软件,wget vim等

6. 开启80端口

# firewall-cmd --zone=public --add-port 80/tcp --permanent# firewall-cmd --reload

7.如果是https,开启443端口

# firewall-cmd --zone=public --add-port 443/tcp --permanent# firewall-cmd --reload
A.3。 安装和配置keepalived

在两个HAProxy节点上执行以下过程:

1. 安装keepalived

yum install -y keepalived

2.配置keepalive

# vim /etc/keepalived/keepalived.conf

在以下配置中,有一个用于检查HAProxy进程的脚本。 该实例使用eth0作为网络接口,并将haproxy配置为主服务器,将haproxy2配置为备份服务器。 它还分配一个192.168.0.100的虚拟IP地址。

vrrp_script chk_haproxy { script "killall -0 haproxy" # check the haproxy process interval 2 # every 2 seconds weight 2 # add 2 points if OK}vrrp_instance VI_1 { interface eth0 # interface to monitor state MASTER # MASTER on haproxy, BACKUP on haproxy2 virtual_router_id 51 priority 101 # 101 on haproxy, 100 on haproxy2 virtual_ipaddress { 192.168.0.100 # virtual ip address } track_script { chk_haproxy }}

3.enable并且启动keepalived

# systemctl enable keepalived# systemctl start keepalived
A.4。 安装和配置HAProxy

在两个HAProxy节点上执行以下过程:

1.安装haproxy

# yum install haproxy

2.为SELinux和HTTP配置haproxy

# vim /etc/firewalld/services/haproxy-http.xml

添加如下行:

<?xml version="1.0" encoding="utf-8"?><service><short>HAProxy-HTTP</short><description>HAProxy load-balancer</description><port protocol="tcp" port="80"/></service>

以root用户身份,将正确的SELinux上下文和文件权限分配给haproxy-http.xml文件。

# cd /etc/firewalld/services# restorecon haproxy-http.xml# chmod 640 haproxy-http.xml

3.如果您打算使用HTTPS,请为SELinux和HTTPS配置haproxy。

# vim /etc/firewalld/services/haproxy-https.xml

添加如下行:

<?xml version="1.0" encoding="utf-8"?><service><short>HAProxy-HTTPS</short><description>HAProxy load-balancer</description><port protocol="tcp" port="443"/></service>

以root用户身份,将正确的SELinux上下文和文件权限分配给haproxy-https.xml文件。

# cd /etc/firewalld/services# restorecon haproxy-https.xml# chmod 640 haproxy-https.xml

4.如果您打算使用HTTPS,请为SSL生成密钥。 如果您没有证书,则可以使用自签名证书。 有关生成密钥和自签名证书的信息,请参阅“Red Hat Enterprise Linux系统管理员指南”。

最后,将证书和密钥放入PEM文件中。

# cat example.com.crt example.com.key > example.com.pem# cp example.com.pem /etc/ssl/private/

5.配置haproxy

# vim /etc/haproxy/haproxy.cfg

haproxy.cfg的全局和默认部分可能保持不变。 在默认部分之后,您将需要配置前端和后端部分,如以下示例所示:

frontend http_web *:80 mode http default_backend rgwfrontend rgw­-https bind <insert vip ipv4>:443 ssl crt /etc/ssl/private/example.com.pem default_backend rgwbackend rgw balance roundrobin mode http server rgw1 10.0.0.71:80 check server rgw2 10.0.0.80:80 check

6.使能 开启haproxy

# systemctl enable haproxy# systemctl start haproxy
A.5。 测试您的HAProxy配置

在HAProxy节点上,检查以确保显示来自keepalived配置的虚拟IP地址。

$ ip addr show

在您的calamari节点上,查看是否可以通过负载平衡器配置访问网关节点。 例如:

$ wget haproxy

这应该返回相同的结果:

$ wget rgw1

如果它返回带有以下内容的index.html文件,那么您的配置工作正常。

<?xml version="1.0" encoding="UTF-8"?>	<ListAllMyBucketsResult xmlns="">		<Owner>			<ID>anonymous</ID>			<DisplayName></DisplayName>		</Owner>		<Buckets>		</Buckets>	</ListAllMyBucketsResult>
附录B.修订历史

修订记录

修订版3.1-2 2018年10月4日星期四史蒂芬莱文

准备7.6 GA出版物的文件。

修订版2.1-1 2014年3月15日星期四史蒂芬莱文

准备7.5 GA出版物的文件。

修订版2.1-0 2017年12月14日星期四史蒂芬莱文

为7.5 Beta发布准备文档。

修订版0.6-5 2017年11月22日星期三史蒂芬莱文

7.4的更新版本。

修订版0.6-3 2017年7月27日星期二Steven Levine

7.4 GA出版物的文件版本。

修订版0.6-1 2017年5月10日星期三Steven Levine

为7.4 Beta发布准备文档。

修订版0.5-9 2016年12月5日星期一Steven Levine

7.3的更新版本。

修订版0.5-7 2016年10月17日星期一Steven Levine

7.3 GA出版物的版本。

修订版0.5-6 2016年8月18日星期四Steven Levine

准备7.3 Beta发布的文档。

修订版0.3-2 2015年11月9日星期一Steven Levine

准备7.2 GA出版物的文件。

版本0.3-0 2015年8月19日星期三Steven Levine

准备7.2 Beta发布的文档。

修订版0.2-6 2015年2月16日星期一Steven Levine

7.1 GA版本的版本

修订版0.2-5 2014年12月11日星期四史蒂芬莱文

7.1 Beta版的版本

修订版0.2-4 2014年12月4日星期四史蒂芬莱文

7.1 Beta版的版本

修订日期:01-12 Tue Jun 03 2014 John Ha

适用于7.0 GA版本的版本

修订版0.1-6 2013年6月13日星期一John Ha

为Red Hat Enterprise Linux 7构建测试版

修订版0.1-1 2013年1月16日星期三John Ha

分支自本文档的Red Hat Enterprise Linux 6版本

标签: #url_param均衡算法