什么是负载均衡?
互联网早期,业务流量比较小并且业务逻辑比较简单,单台服务器便可以满足基本的需求;但随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台机器的性能问题以及单点问题凸显了出来,因此需要多台机器来进行性能的水平扩展以及避免单点故障。但是要如何将不同的用户的流量分发到不同的服务器上面呢?
那么通过使用nginx搭建的负载均衡器即可解决该问题
客户端的流量首先会到达负载均衡服务器,由负载均衡服务器通过一定的调度算法将流量分发到不同的应用服务器上面,同时负载均衡服务器也会对应用服务器做周期性的健康检查,当发现故障节点时便动态的将节点从应用服务器集群中剔除,以此来保证应用的高可用。
搭建步骤以及准备条件:
- 搭建三台Linux服务器
- 一台安装Nginx,另外两台各安装Tomcat
- 对Nginx的/etc/nginx/conf.d/default.conf进行配置
- 测试负载均衡
这里我用的是使用Vmware创建三台Linux服务器,其中一台安装Nginx,为其使用dhclient分配ip为:192.168.248.128
另外两台安装jdk+Tomcat.,分别为其分配IP为:192.168.129和129.168.248.130.
结果如下图所示:
详细操作:
1.克隆三台Linux服务器
1.1 以上图为例 dhclient 分配 ip地址
安装tomcat的两台服务器ip分别为192.168.30.128、192.168.30.130
安装的nginx的服务器ip为192.168.30.131
2.安装JDK和Tomcat
在192.168.30.128、192.168.30.130上先安装JDK,在安装tomcat
安装tomcat需要依赖JDK
安装步骤参考之前的文章
3.安装Nginx
在192.168.30.131安装Nginx
4.配置负载均衡
在192.168.30.131安装Nginx的服务器上, 打开/etc/nginx/conf.d/default.conf文件
#新增 upstream aa{ server 192.168.30.128:8080; server 192.168.30.130:8080; } server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; #新增一行 proxy_pass http://aa; } }
5.关闭Nginx上的安全组
使用 vi /etc/selinux/config
编辑config文件,修改SELNUX=disabled
如图所示:
注意:修改过安全组要把系统重启reboot下生效!
重启之后如果不能访问就要禁用掉防火墙:systemctl stop firewalld
并且开启Nginx:stystemctl start nginx
6.测试
通过 http://192.168.30.131:80 访问Nginx,即可看到实际访问了tomcat
负载均衡的策略
- 轮询 (默认)
特点:一个一个挨着访问,tomcat服务器会被依次访问 - 权重
weight=数字越大权重越大,被访问的几率越高
下边的配置上边的机器访问2次,下边的访问1次
3.ip黏着
根据用户的ip,绑定到一台tomcat服务器
根据客户端用户的ip地址计算出一个可以被访问的tomcat服务器
如果客户端用户的ip地址不变,那么访问的tomcat就固定了
原理:把用户的ip进行hash处理(取用户ip的hash值),对tomcat总数量取模,然后根据得到的值,对应找到要访问的Tomcat
反向代理和正向代理的区别
代理如果在服务器端就是反向代理,如果放在客户端就是正向代理
反向代理 和 负载均衡 的关系?
什么是负载均衡? 搭建多个tomcat服务器,在用户访问量大的时候,可以访问不同的tomcat,减少某个tomcat的访问压力
在nginx中如果想实现负载均衡,需要借助反向代理机制