心血来潮,研究一下linux服务器负载均衡的知识点。本来以为很简单的一个事情,不想还是研究了大半天的时间,想想还是记录下来,以防万一后面再遇到类似的坑。
先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。那么负载均衡的前提就是要有多台服务器才能实现,也就是两台以上即可。
由于没有自己用的测试服务器,所以就装了一个虚拟机(VMware),然后在虚拟机中装了两台centos7。
测试用例A:192.168.0.150
测试用例B:192.168.0.151
对了,linux查看本机IP命令:ifconfig
思路:将A作为主服务器,本地hosts文件中定义一个域名,我这里用的域名是151net.com。(这个自己随意在本地定义就好)
在A服务器中打开nginx.conf文件,在http块内,server块外面添加
upstream 151net {
server 192.168.0.151:80;
server 192.168.0.150:8088;
}
server{
listen 80;
server_name 151net;
location / {
proxy_pass http://151net/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
保存nginx.conf后重启nginx服务。
注:A服务器的80端口是用来绑定监听访问域名的端口,所以在 upstream中我们使用了8088端口,如果你想吧A服务器也用来做负载的一个服务器的话,下面还得加一个server块。
server {
listen 8088;
server_name 151net.com;
location / {
root /www/tp5/public;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /www/tp5/public;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
上面代码就是表明你将A服务的端口8088绑定到了www目录下的tp5项目中去了。到了A服务器到这里就结束了。
然后在B服务器正常对nginx.conf进行配置就好了。
B服务器的nginx.conf
server{
listen 80;
server_name 151net.com;
root /www/tp5/public
index index.php index.html;
}
ok,现在重启一个B服务器的nginx服务,然后在本地服务器打开151net.com,多刷新两次,看看效果。大功告成。
除了上面这些简单的配置之外,顺便记录一下关于nginx负载均衡策略:
哈希法:根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。
实际配置:ip_hash
将ip_hash添加到upstream块的第一行即可。
轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
就是开始默认的方式。
加权随机法:与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。
实际配置:weight=2
将weight=2放在ip地址之后(server 192.168.0.151:80 weight=2;)
weight后面的数值代表权重,数值越大,表示权重越高。
好了。今天的分享就是这样子了,后面我会找时间再写一下负载均衡时候关于session的相关问题。
如果你遇到问题的话,可以给我留言哈,能解决的肯定不会推辞的!哈哈哈