一. 采用Keepalived+Nginx解决方案实现高可用的API网关。
2.1 Nginx概述
nginx是一款*的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。这里主要通过反向代理和负载均衡两方面介绍nginx。
2.2反向代理
反向代理应该是Nginx做的最多的一件事了,什么是反向代理,以下是百度百科的说法:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。
2.3负载均衡
负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。Nginx支持的负载均衡调度算法方式如下:
weight轮询(默认,常用):接收到的请求按照权重分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率。
ip_hash(常用):每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少。
url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。
2.4 nginx安装及配置
2.4.1 nginx安装
实验环境:
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@localhost ~]# nginx -v
nginx version: nginx/1.16.0
nginx有两种安装方式,yum安装和编译安装,yum安装比编译安装简单很多,这里使用yum安装的方式(http://nginx.org/en/linux_packages.html#stable),首先安装以下依赖:
[root@localhost ~]# yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
在/etc/yum.repo.d/新建nginx.repo文件,文件内容如下所示:
[root@localhost ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
依次执行yum clean all,yum list.
安装nginx
[root@localhost ~]# yum install -y nginx
安装完成之后,nginx的相关文件位置如下:
[root@localhost ~~]# find / -name nginx
/etc/rc.d/init.d/nginx
/etc/sysconfig/nginx
/etc/logrotate.d/nginx
/etc/nginx #主配置文件
/usr/lib64/nginx
/usr/sbin/nginx #启动文件
/usr/share/nginx #默认的网页存放位置
/var/lib/yum/repos/x86_64/6/nginx
/var/lock/subsys/nginx
/var/log/nginx #日志位置
/var/cache/nginx
/var/cache/yum/x86_64/6/nginx
安装完成之后,可以先启动下,看看能否访问:
[root@localhost ~]# service nginx restart
Stopping nginx: [ OK ]
Starting nginx: [ OK ]
[root@localhost ~]# elinks 192.168.30.130:80 --dump #本机ip,注意这里是两个横线
Welcome to nginx !
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to [1]nginx.org.
Commercial support is available at [2]nginx.com.
Thank you for using nginx.
References
Visible links
1. http://nginx.org/
2. http://nginx.com/
出现这个,证明安装没问题。
.4.3nginx反向代理测试
首先在node上创建一个简单的http服务并启动,端口为4001:
配置nginx.conf中server部分,服务名为localhost,侦听3999端口,代理配置为刚刚node创建的http地址:http://localhost:4001。
反向代理成功。
反向代理成功。