nginx负载均衡调度算法
包括最常用的轮询(Round Robin)、IP Hash、Least Connections等
轮询(Round Robin)算法
轮询算法是最基础的负载均衡算法之一,它会按照顺序逐个将请求分发给后端服务器。假设有3台后端服务器A、B、C,当有一个请求到达负载均衡器时,第1个请求会被转发至服务器A,第2个请求会被转发至服务器B,第3个请求会被转发至服务器C,以此类推。
轮询算法简单易懂,但有一个明显的缺点,即无法考虑到不同服务器的实际负载情况。如果其中一台服务器的负载过高,它仍然会被分配到请求,可能会导致该服务器的崩溃或性能下降。
IP Hash算法
IP Hash算法基于客户端的IP地址,将不同的请求分配给不同的后端服务器。这意味着相同的客户端IP地址将始终被分配到同一台后端服务器。
假设有3台后端服务器A、B、C,当有一个请求到达负载均衡器时,根据客户端IP地址的Hash值,决定该请求应该被转发至哪台服务器。这样,同一客户端的所有请求都将发送到相同的服务器。
Least Connections算法
Least Connections算法会将新的请求分配给当前连接数最少的后端服务器。它考虑了实际负载情况,能够避免某些服务器负载过高而导致性能下降的问题。
假设有3台后端服务器A、B、C,当前连接数分别为2、3、4,当有一个新请求到达负载均衡器时,该请求将被分配给服务器A,因为它的连接数最少。
Weighted Round Robin算法
Weighted Round Robin算法是基于轮询算法的改进版本,它可以设置每台服务器的权重,并按照权重比例分配请求。例如,如果服务器A的权重是2,服务器B的权重是1,那么在分配请求时,服务器A将获得2次请求,服务器B将获得1次请求。
负载均衡https的访问,如何实现?
要实现负载均衡HTTPS的访问,需要涉及到SSL证书的处理、负载均衡算法的配置以及反向代理服务器的设置等多个方面。下面是大致的步骤:
获取SSL证书
首先需要获取SSL证书,并将其安装在所有后端服务器上。可以从证书颁发机构(CA)或自建CA获得SSL证书。
配置upstream
与HTTP负载均衡类似,需要将所有后端服务器的IP地址和监听HTTPS的端口号添加到Nginx配置文件中的upstream段中。例如:
upstream backend {
server 192.168.0.101:443;
server 192.168.0.102:443;
server 192.168.0.103:443;
}
配置负载均衡算法
也与HTTP负载均衡类似,需要为upstream指定一种负载均衡算法。例如,要使用轮询算法,可以不需要特别配置,因为默认就是轮询算法。如果要使用其他算法,则需要进行相应的配置。
配置反向代理
要配置反向代理服务器,需要指定HTTPS请求的监听端口,并将请求转发给upstream。此外,还需要配置TLS协议和SSL证书。例如:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass https://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
其中,listen指定了服务器监听HTTPS请求的端口号;ssl_certificate和ssl_certificate_key分别指定了SSL证书和私钥文件的路径;proxy_pass指定了请求转发给哪个upstream。其他配置与HTTP负载均衡类似。
注意,在这个例子中我们使用了https,所以需要在Nginx安装时加入ssl支持.在Ubuntu系统上,可以通过以下命令安装:
sudo apt-get update
sudo apt-get install nginx-full
测试负载均衡器
完成以上配置后,保存Nginx配置文件并重启Nginx服务。然后可以使用curl或浏览器等工具测试负载均衡器是否正常工作。例如,访问https://example.com,多次刷新页面,可以看到请求被轮流转发给不同的后端服务器。
搭载了负载均衡的后端web服务器日志是记录谁的
LB的呢?还是User的呢?
录所有请求访问它的客户端IP地址、访问时间、请求方法、请求URL、响应状态码等信息。这些日志记录的是发起请求的客户端的信息。因此,可以说这些日志记录的是User(用户)的信息。
PEM格式
通常来说,PEM格式是一种用于存储和传输加密证书、公钥、私钥等信息的编码格式。PEM编码的数据通常包含BEGIN/END标记以及Base64编码的数据。
在使用PEM格式时,PEM文件可以包含公钥或私钥,也可以同时包含公钥和私钥。其中,公钥和私钥都是非对称加密算法中的概念,公钥用于加密数据,私钥用于解密数据。
所以我们可以将PEM文件看做是存储了公钥或私钥的容器,根据实际情况可以存储公钥或私钥。一般来说,PEM文件中的.pem后缀名并不能确定其中存储的是公钥还是私钥,需要根据文件内容来确定其具体类型。因此,不能简单地将.pem文件视为公钥或私钥。
ab 压力测试
ab -c 1000 -n 20000 http://192.168.227.144/
“-c 1000"表示并发连接数为1000,”-n 20000"表示总请求数为20000。因此,这个请求数量不包括连接数。在这个命令中,ab工具将会创建1000个并发连接,并发送总共20000个请求以测试被测应用程序的性能
如果您将总请求数20000除以并发连接数1000,得到的结果是每个连接需要发送20个请求。
在实际测试中,并发连接数和请求分配并不完全均匀,所以每个连接最终发送的请求数可能会有所不同。
dns与keepalive结合(vip)的应用
DNS负载均衡和Keepalived是两个不同的技术,可以结合使用以实现高可用性和负载均衡。
在这种情况下,您需要将VIP(虚拟IP)配置在Keepalived上,并将其设置为Master/Backup模式。然后,在DNS负载均衡器中,您可以将多个真实服务器(Real Server)的IP地址添加到IP池中,并将其与VIP关联。这样,当Keepalived检测到主服务器故障时,它将自动切换到备份服务器,并将VIP转移到其上。
将多个真实服务器(Real Server)的IP地址添加到IP池中,并将其与VIP关联。如何做????
要将多个真实服务器(Real Server)的IP地址添加到IP池中,并将其与VIP关联,您需要执行以下步骤:
在DNS负载均衡服务器上安装并配置相应的软件,例如BIND、PowerDNS等。
在配置文件中添加一个新的zone,如下所示:
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
allow-transfer { IP_Address_of_Slave_DNS_Server; };
also-notify { IP_Address_of_Slave_DNS_Server; };
notify yes;
};
这里,“example.com”是您要管理的域名,/etc/bind/db.example.com是存储有关该域名的详细信息的文件的位置。
编辑db.example.com文件,添加一条包含VIP和多个真实服务器IP地址的记录,如下所示:
$TTL 86400
@ IN SOA ns1.example.com. root.example.com. (
2012030801 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
ns1 IN A IP_Address_of_Nameserver_1
ns2 IN A IP_Address_of_Nameserver_2
www IN A VIP_Address
@ IN A RealServer1_IP
@ IN A RealServer2_IP
@ IN A RealServer3_IP
这里,“www”是您要负载均衡的主机名,“VIP_Address”是虚拟IP地址,“RealServer1_IP”、“RealServer2_IP”和“RealServer3_IP”是要用于实际负载均衡的真实服务器的IP地址。
保存并退出文件,重启DNS服务以使更改生效。
完成上述步骤后,您已成功将多个真实服务器的IP地址添加到IP池中,并将其与VIP关联。现在,当客户端请求访问您的网站时,DNS负载均衡器将自动将请求转发到可用的真实服务器,从而实现负载均衡和高可用性。