java-nginx理论及搭建使用
一 概述nginx:(实现负载的方式还有lvs,lvs是在传输层,nginx是在应用层,本人对7层网络协议什么的也不是很清楚,这个要自行"脑补"了....)
可以做服务的反向代理,负载均衡,动静分离,为了HA高可用,需要搭建nginx的集群,实现上述的功能需要配置 nginx.conf。
二 名词解释:
1. 何为反向代理?
正向代理:比如vpn,用户知道我要访问哪个服务,但是可能那个服务是内网服务,我是访问不到的,这个时候我需要通过访问代理,获取这个要访问的服务。
反向代理:比如nginx,对于用户而言,nginx就是它要请求的服务地址。(nginx是把请求又发给了代理的服务器,但是用户是不知道的),用户就是知道我请求nginx,然后nginx返回了结果。
2. 何为负载均衡?
比如一个web服务,我们也是一个集群形式,用户发送一个请求给了nginx,nginx根据策略(策略是有不同的,需要配置)来找我这个请求应该交给哪个节点服务来处理。
3. 何为动静分离?
nginx可以提供一台静态资源的服务器(比如vue的页面请求信息),如果客户发送一个请求,只是请求这些静态资源,那么nginx直接拿到资源返回即可;
如果客户发送的是一个动态的资源的请求,那么nginx就正常的转发到具体的服务器就行了。
三 如何搭建(同redis的安装相像)
1. 安装
1.1 解压redis
tar zxvf redis
1.2 一些准备工作
yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
1.3 先进入 nginx 减压后的目录 ,执行“./configure”(编译完成后,这个目录下会多一个“Makefile”文件);
然后执行"make"命令进行编译;
1.4 make PREFIX=/opt/nginx install(将nginx安装到指定目录下),到此安装完成。
注意:关闭防火墙,或者开启端口访问权限
2. 如何配置 nginx.conf 呢?
参考:https://www.cnblogs.com/Joans/p/4386556.html
3. 问题:nginx有单点的问题,需要实现HA。
3.1 解决思路:台机器做主从备份(keepalived+nginx)
何为keepalived?(一般配合负载的服务实现负载服务的高可用)
因为keepalived是基于VRRP协议的,
那么直白的表述一下VRRP协议:就是我们可以搞一个集群,这个集群包含的角色是一台master(主节点)和多台backup(备用节点),
这个集群会有一个vip(虚拟ip),这个ip供外部访问,正常mater掌握这个vip,如果mater挂了,
会重新选举一个mater继续占有这个vip。
3.2 用keepalived+nginx实现HA:
模式:抢占模式与非抢占模式
抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。
具体配置: