反向代理负载均衡-----nginx

一:集群

1.1:集群的概念
   集群是一组相互独立的、通过高速网络互联的计算机,他们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高高可用和可伸缩性。和传统的高性能计算机技术相比,集群技术可以利用各档次的服务器作为节点,系统造价低,可以实现很高的运算速度,完成大运算量的计算,具有较高的响应能力,能够满足当今日益增长的信息服务的需求。而集群技术是一种通用的技术,其目的是为了解决单机运算能力不足、IO能力的不足,提高服务的可靠性、获得规模可扩展能力,降低整体方案的运维成本(运行、升级、维护成本)。只要在其他技术不能达到以上的目的的,或者虽然能够达到以上目的,但是成本过高的情况下,就可以考虑采用集群技术。
1.2:集群的特点
1) 提高性能
一些计算密集型应用,如:天气预报、核试验模拟等,需要计算机要有很强的运算处理能力,现有的技术,即使普通的大型机器计算也很难胜任。这时,一般都使用计算机集群技术,集中几十台甚至上百台计算机的运算能力来满足要求。提高处理性能一直是集群技术研究的一个重要目标之一。
2) 降低成本
通常一套较好的集群配置,其软硬件开销要超过100000美元。但与价值上百万美元的专用超级计算机相比已属相当便宜。在达到同样性能的条件下,采用计算机集群比采用同等运算能力的大型计算机具有更高的性价比。
3) 提高可扩展性
用户若想扩展系统能力,不得不购买更高性能的服务器,才能获得额外所需的CPU 和存储器。如果采用集群技术,则只需要将新的服务器加入集群中即可,对于客户来看,服务无论从连续性还是性能上都几乎没有变化,好像系统在不知不觉中完成了升级。
4) 增强可靠性
集群技术使系统在故障发生时仍可以继续工作,将系统停运时间减到最小。集群系统在提高系统的可靠性的同时,也大大减小了故障损失。
1.3:集群的类型
1.3.1 负载均衡集群

负载均衡集群为企业需求提供了更实用的系统。负载均衡集群使负载可以在计算机集群中尽可能平均地分摊处理。负载通常包括应用程序处理负载和网络流量负载。这样的系统非常适合向使用同一组应用程序的大量用户提供服务。每个节点都可以承担一定的处理负载,并且可以实现处理负载在节点之间的动态分配,以实现负载均衡。对于网络流量负载,当网络服务程序接受了高入网流量,以致无法迅速处理,这时,网络流量就会发送给在其它节点上运行的网络服务程序。同时,还可以根据每个节点上不同的可用资源或网络的特殊环境来进行优化。与科学计算集群一样,负载均衡集群也在多节点之间分发计算处理负载。它们之间的最大区别在于缺少跨节点运行的单并行程序。大多数情况下,负载均衡集群中的每个节点都是运行单独软件的独立系统。但是,不管是在节点之间进行直接通信,还是通过*负载均衡服务器来控制每个节点的负载,在节点之间都有一种公共关系。通常,使用特定的算法来分发该负载。

1.3.2 高可用性集群

当集群中的一个系统发生故障时,集群软件迅速做出反应,将该系统的任务分配到集群中其它正在工作的系统上执行。考虑到计算机硬件和软件的易错性,高可用性集群的主要目的是为了使集群的整体服务尽可能可用。如果高可用性集群中的主节点发生了故障,那么这段时间内将由次节点代替它。次节点通常是主节点的镜像。当它代替主节点时,它可以完全接管其身份,因此使系统环境对于用户是一致的。
高可用性集群使服务器系统的运行速度和响应速度尽可能快。它们经常利用在多台机器上运行的冗余节点和服务,用来相互跟踪。如果某个节点失败,它的替补者将在几秒钟或更短时间内接管它的职责。因此,对于用户而言,集群永远不会停机。
在实际的使用中,集群的这三种类型相互交融,如高可用性集群也可以在其节点之间均衡用户负载。同样,也可以从要编写应用程序的集群中找到一个并行集群,它可以在节点之间执行负载均衡。从这个意义上讲,这种集群类别的划分是一个相对的概念,不是绝对的。

二:使用nginx实现反向代理负载均衡------实战
2.1、环境准备
两台机器:Linux-node1、linux-node2同时操作
  1. [root@linux-node1 ~]# uname -r -m
  2. 3.10.0-229.20.1.el7.x86_64 x86_64
  3. [root@linux-node1 ~]# cat /etc/hostname
  4. linux-node1.oldboyedu.com
  5. [root@linux-node1 ~]# cat /etc/hosts
  6. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  7. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  8. 192.168.56.11 linux-node1.oldboyedu.com linux-node1
  9. 192.168.56.12 linux-node2.oldboyedu.com linux-node2
2.2、相关软件(两台机器同时操作)
  1. [root@linux-node1 ~]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
  2. [root@linux-node1 ~]# yum install -y gcc glibc gcc-c++ make screen tree lrzsz
2.3、部署应用
在两台机器上部署apache作为RS
  1. [root@linux-node1 ~]# yum install -y httpd
  2. [root@linux-node1 ~]# sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf
  3. [root@linux-node1 ~]# systemctl start httpd
  4. [root@linux-node1 ~]# echo "cgt-test1" > /var/www/html/index.html
  5. [root@linux-node1 ~]# curl http://192.168.56.11:8080/
  6. cgt-test1
在linux-node2上改成cgt-test2,只为好区分。
2.4、在node1上安装nginx,作为反向代理服务器
  1. [root@linux-node1 ~]# useradd -s /sbin/nologin -M www
  2. [root@linux-node1 ~]# yum -y install pcre-devel openssl-devel
  3. [root@linux-node1 ~]# cd /usr/local/src
  4. [root@linux-node1 ~]# wget http://nginx.org/download/nginx-1.9.12.tar.gz
  5. [root@linux-node1 src]# tar zxf nginx-1.9.12.tar.gz
  6. [root@linux-node1 src]# cd nginx-1.9.12
  7. [root@linux-node1 nginx-1.9.12]#./configure --prefix=/usr/local/nginx-1.9.12 \
  8. --user=www --group=www --with-http_ssl_module \
  9. --with-http_stub_status_module --with-file-aio
  10. [root@linux-node1 nginx-1.9.12]# make && make install
  11. [root@linux-node1 nginx-1.9.12]# ln -s /usr/local/nginx-1.9.12/ /usr/local/nginx
  12. [root@linux-node1 nginx-1.9.12]# /usr/local/nginx/sbin/nginx -t
  13. nginx: the configuration file /usr/local/nginx-1.9.12/conf/nginx.conf syntax is ok
  14. nginx: configuration file /usr/local/nginx-1.9.12/conf/nginx.conf test is successful
  15. [root@linux-node1 nginx-1.9.12]# /usr/local/nginx/sbin/nginx
  16. [root@linux-node1 nginx-1.9.12]# lsof -i:80
  17. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  18. nginx 8161 root 6u IPv4 20793 0t0 TCP *:http (LISTEN)
  19. nginx 8162 www 6u IPv4 20793 0t0 TCP *:http (LISTEN)
2.5、修改nginx配置文件并添加proxy.conf









































































上一篇:用python SMTP进行邮件发送


下一篇:客户端通过Feign发起请求 服务端通过request取 json对象