负载均衡是在系统访问量过大时,避免单一服务器受压过大而导致宕机,提高系统的高可用性。
环境准备
三台装了centOS操作系统的服务器并且都装了nginx,可以参考另外一篇博客linux操作系统安装Nginx
我这里装了三台,ip分别是:
A. 192.168.202.130
B. 192.168.202.131
C. 192.168.202.133
其中A服务器作为主服务器,B,C作为负载均衡服务器
将nginx安装目录下的html文件夹下的index.html修改成不一样的,防止测试的时候看不出来访问的哪台服务器
测试环境
本地修改hosts ,目录C:\Windows\System32\drivers\etc
添加如下:
192.168.202.130 mazh.com
修改nginx配置文件
修改A
打开nginx.conf,文件位置在nginx安装目录的conf目录下
在http段加入以下代码
upstream mazh.com {
server 192.168.202.131:80 weight=2;
server 192.168.202.133:80;
}
server{
listen 80;
server_name mazh.com;
location / {
proxy_pass http://mazh.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
保存重新载入配置文件 命令:
/usr/local/webserver/nginx/sbin/nginx -s reload
- weight 默认为1.weight越大,负载的权重就越大,如上所配置的,每接收到三个请求2个请求都会走B服务器
- down 表示单前的server暂时不参与负载
- max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
- fail_timeout:max_fails 次失败后,暂停的时间。
- backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
测试的时候把某一个值加大,来看是否负载
上面server的值也可以修改为tomcat部署的服务,对应的ip和端口
修改B,C
B、C服务器nginx.conf设置
打开nginx.confi,在http段加入以下代码
server{
listen 80;
server_name mazh.com;
index index.html;
root /data0/htdocs/www;
}
保存重新载入配置文件 命令:
/usr/local/webserver/nginx/sbin/nginx -s reload
这样测试的时候,在浏览器输入http://mazh.com
就可以根据权重值,访问到想要访问的服务器效果了。
上面只采用了一种权重的负载均衡方案,还有三种:
- 轮询
- 根据上面的配置把 weight去掉就是了
- IP地址哈希
- 根据就是相同的IP请求负载到同一个机器上,保证session的一致性,加上ip_hash就好了如下
upstream mazh.com {
ip_hash;
server 192.168.202.131:80 weight=2;
server 192.168.202.133:80;
}
- 最少连接
- Web请求会被转发到连接数最少的服务器上。把ip_hash换成 least_conn就好了
upstream mazh.com {
least_conn;
server 192.168.202.131:80 weight=2;
server 192.168.202.133:80;
}
其中权重和IP地址哈希的可以同时使用
session共享还可以有其他的实现方式,比如缓存等,只要能多台服务器共享就可以,
有的问题也不能在一棵树上吊死,你说是不是。
根据以上的操作可以实现负载均衡,那高可用呢,如果主服务器挂了怎么办?
稍后会再写一篇博客介绍nginx的高可用。