nginx
1.下载安装包http://nginx.org/en/download.html
yum install -y java-1.8.0-openjdk.x86_64
2.解压安装包tar -zxvf nginx-1.16.1.tar.gz -C /usr/local
3.到安装完成的目录 cd /usr/local/ngonx-1.16.1/
4. .configure 检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。
./configure --prefix=/usr/local/nginx
5.yum -y install gcc pcre-devel zlib-devel openssl openssl-devel 在安装nginx前首先要确认系统中安装了gcc、pcre-devel、zlib-devel、openssl-devel。
下载依赖库 第三方的开发包
PCRE 是一个Perl库,包括 perl 兼容的正则表达式库。
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
6.make && make install 编译并安装
目录
conf 配置文件目录
html 网页
logs 日志
sbin 命令
常用命令:在sbin里
./nginx 启动
./nginx -s reload 重启
./nginx -s stop 停止
lsof -i:80 查看80端口是否被占用
ps -ef|grep nginx 查看ngin是否启动
firewall-cmd --state查看防火墙是否关闭
server {
listen 80; #端口号
server_name localhost; #域名
location / {
index.html #静态页面
}
}
基于端口和域名都可以区分
反向代理
server {
listen 80; #端口号
server_name localhost; #域名
location / {
proxy_pass http://192.168.66.66:8080 ; #反向代理的ip地址
}
}
集群的目的:减轻单台服务器的压力
缺点:
分布式session不一致的问题,登录问题
分布式定时任务调度幂等性
负载均衡
作用:解决高并发,将所有请求转发到负载均衡器,采用负载均衡算法分配到不同服务器,减去单台服务器压力
算法:轮询,ip绑定,权重,fail, url绑定
轮询(轮流访问,服务器配置一样的时候用)
权重(使用weight 配置比例等分)
ip绑定(nginx获取ip地址通过hash运算固定分配到某个服务器,可以解决session共享问题)
fail(第三方,根据页面大小和加载时间长短分配,需要安装upstream fair)
url绑定(第三方,按访问的url的哈希结果来分配请求,使每个url定向到一台后端服务器。需安装nginx的hash软件包)
服 务 器 集 群 ( 分 布 式 中 常 见 问題 )
1 . 分 布 式Session— 致 性 问 题
2 - 分 布 式Job幂 等 性 问 題
3 . 分 布 式 生 成 全 局ID
4 . 分 布 式 锁 解 决 方 案
5 .分 布 式 配 置 中 心
6 . 分 布 式 日 志 收 集 系 统
nginx负载均衡内置功能:故障转移,(重试机制,心跳检测)一般不用
http{
upstream backServer{ #在http{}中配置需要被代理的真实服务器,默认轮询
server 192.168.43.26:8080;
server 192.168.43.27:8080;
server 192.168.43.28:8080;
}
server {
listen 80; #端口号
server_name localhost; #域名
location / {
#指定上游负载均衡服务器
proxy_pass http://backServer;
}
}
}
根据域名相同拦截不同项目
server {
listen 80; #端口号
server_name www.abc.com; #域名
#匹配项目名称为8080的开头
location /tomcat_8080/ {
proxy_pass http://192.168.66.66:8080 ; #反向代理的ip地址
}
#匹配项目名称为8081的开头
location /tomcat_8081/ {
proxy_pass http://192.168.66.66:8081 ; #反向代理的ip地址
}
}
访问
www.abc.com/tomcat_8080/ 和 www.abc.com/tomcat_8081/ 跳到不同的项目
动态负载均衡(动态配置,不停止运行nginx,修改配置)
实现方式:
1.Consul+Consul-template每次更改配置需要重启nginx
2.Consul+OpenResty 不用重启nginx
3.Consul+upsync+Nginx也不用重启
实现:nginx(1.9版本以上)+consul(注册中心)+upsync(异步)
1.搭建consul server专门存放负载均衡的注册配置信息
2.nginx 每间隔一段时间(upsync)到consul动态获取最新的注册中心配置信息
一共用两台服务器,一台放consul,一台放nginx和upsync
注 册 中 心
对动态负载均衡配置实现注册,安装好consul后就能注册了
谷歌,go语言编写,实现分布式服务与注册功能
Consul — 款 开 源 的 分 布 式 服 务 注 册 与 发 现 系 统 。 可 以 通 过 http api 把 服 务 注 册 服 务 变 的 非 常 简 单 。
服 务 注 册 : 服 务 实 现 我 们 可 以 使 用 http api 将 服 务 注 册 到 consul;
服 务 发 现 : 可 以 通 过 http api从consul中 获 取 服 务 的 ip 和 端 口
故 障 检 测 : 支 持tcp http等 方 式 健 康 检 测 机 制 。 如 果 出 现 问 题 自 动 摘 除 某 个 服 务 。
k/v存 储 : 使 用k/v存 储 实 现 动 态 配 置 中 心 。 使 用http长 轮 询 实 现 变 更 触 发 和 配 置 修 改 。
多 数 据 中 心 : 支 持 多 个 数 据 中 心 。
配置consul:
1.下载consul,并rz到 /opt
2.解压 unzip consul_0.7.5_linux_amd64.zip 报错的话yum -y install unzip 添加unzip插件
3.启动consul ./consul agent -dev -ui -node=consul-dev -client=192.168.66.30(注册中心ip)
4.页面访问192.168.66.30:8500 就能看到可视化consul注册中心管理平台
可以使用postman注册http服务
Datacenter指 定 数 据 中 心 ,Address指 定 服 务IP, Service. Id指 定 服 务 唯 一 标 识 ,Service. Service指定服 务 分 组.Service, tags
指 定 服 务 标 签 ( 如 測 试 环 境 、 预 发 环 境 等 ) ,Service. Port指 定 服 务 端 口。
nginx_upsync_module
动态获取最新的upstream
upsync是新浪开源的基于nginx实现动态配置的第三方模块,功能是拉取consulserver列表并动态更新nginx的路由信息
1.上传nginx-upsync-module-master.zip
2.解压unzip nginx-upsync-module-master.zip
3.cd /usr/local/nginx-1.16.1/
4../configure --add-module=/opt/nginx-upsync-module-master 安装第三方模块
5.make && make install 编译并安装
6.改nginx配置
upstream backServer{ #在http{}中配置需要被代理的服务器,默认轮询
upsync 指令指定从哪个consul的什么路径拉取上游服务器(配置信息)
upsync_timeout 配置从consul拉取上游服务器配置的超时时间
upsync_interval 配置从consul中拉取上游服务器配置间隔时间
upsync_type指定注册中心配置服务器
strong——dependency配置nginx在启动时是否强制依赖配置服务器
upsync_dump_path 从指定consul拉取上游服务器的配置信息持久化的位置(这个目录要提前创建好)
upsync 192.168.66.35:8500/v1/kv/upstreams/itmayiedu
upsync_timeout=6m
upsync_interval=500ms
upsync_type=consul strong_dependency=off;
upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf
}
给注册中心添加配置:
curl -X PUT http://192.168.66.35:8500/v1/kv/upstreams/itmayiedu/192.168.66.39:8080 把39这台服务配到注册中心35,
key是 /v1/kv/upstreams/itmayiedu/
value是 192.168.66.39:8080
或者用注册中心管理平台consul可视化界面添加
location ~* /js/.*/\.js 正则
- 已
=
开头表示精确匹配
如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。 ^~
开头表示uri以某个常规字符串开头,不是正则匹配- ~ 开头表示区分大小写的正则匹配;
- ~* 开头表示不区分大小写的正则匹配
- / 通用匹配, 如果没有其它匹配,任何请求都会匹配到
四层负载均衡:,基于传输层,也叫做基于TCP协议实现,LVS(软负载)、F5硬件负载, nginx1.9版本前不支持四层负载均衡
七层负载均衡:基于应用层,也叫做基于HTTP协议实现负载均衡,Web服务实现负载均衡
LVS+KeepAlived+Nginx
Nginx+Keeplived搭建双机主从热备实现7*24小时运行
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。linux自带LVS
- 使用集群技术和Linux操作系统实现一个高性能、高可用的服务器.
- 很好的可伸缩性(Scalability)
- 很好的可靠性(Reliability)
- 很好的可管理性(Manageability)
LVS作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,
当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
LVS是一个开源的软件,可以实现传输层四层负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。目
前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR);八种调度算法(rr.wr..Ic.wLc..blc.lblcr,dh.sh).
LVS可以实现负载均衡,但是不能够进行健康检查,比如一个rs出现故障,LVS仍然会把请求转发给故障的rs服务器,这样就
会导致请求的无效性。keepalive软件可以进行健康检查,而且能同时实现LVS的高可用性,解决LVS单点故障的问题,其实keepalive就是为LVS而生的。
Nginx与LVS区别什么
Nginx是七层负载均衡主要针对于应用层负载均衡(Http),在1.9之后开始支持
对四层负载均衡支持。
LVS 是四层负载均衡,主要针对传输层负载均衡。
LVS应用场景比Nginx负载均衡应用场景更加广泛,而且LVS支持所有服务负载
均衡业务功能。
Keepalived是在LVS基础之上实现心跳检测、监控服务器实现故障转移,如果服务
器发生宕机的时候,可以尝试自动重试脚本。如果多次重试还是失败状
态,会发送邮件给运维人员。实现高可用。
环境配置
两台nginx服务器
nginx主服务器192.168.26.11
nginx主服务器192.168.26.12
LVS虚拟VIP 192.168.26.88
·环境搭建,装keeplived,lvs自带
安装keepalived
1.下载keepalived
wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gZ*
2.解压安装:
tar.-zxxfkeepalived-1.2.18.tar.gz -C/usr/local/.
3.下载插件openssl
yum install -y..openssl...penssl.dexel(需要安装一个软件包)。
4.开始编译keepalived.
cd keepalived-1.2.18/&&./configureyprefix=/usr/local/keepalived
报错;eepalived.执行./configure --prefix=/usr/local/keepalived时报错: configure; error:Popt libraries is required
出现此错误的原因:
未安装popt的开发包
解决方法:
yum install popt-develu
安装好popt的开发包。重新./configure即可。
5.make一下
make && make install
把 keepalived 安装成linux系统服务
因为没有使用keenalived.的默认安装路径(默认路径:/usr/local),安装完成之后,需要做一些修改工作
首先创建文件夹,将keepalived配置文件进行复制:
mkdir/etc/keepalived
cp/usr/local/keepal.ixed/eta/keepalived/keepalived..conf./ete/keepalived/
然后复制keepalived脚本文件:
cp/usr/local/keepaLixed/etc/rc.d/ init.d/keepalixed/etc/init.d/
cp/usr/local/keepalixed/etc/sysconfig/keepalived/etc/sysconfig/
In -s /usr/local/sbin/keepalived/usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived/sbin/.
可以设置开机启动:chkconfigkeepalived on,到此我们安装完毕!
service keepalived start
service keepalixed stop
启动报错Starting keepalived(via systematl): Job for keepalived.service failed. See 'systemctlstatus
keepalived..serxice’ and 'journalctl-xn' for details.o
解决办法。
[root@edu-proxy-01 sbin]# cd /src/sbin
Lroot@edu-proxy-01 sbin]# rm-f keepalived
Lroot@edu-proxy-01sbin] cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
!Configuration File for keepalived
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"#运行脚本,脚本就是起到一个nginx宕机以后,自动开启服务
interval 2 #检测时间间隔
weight -20 #如果条件成立的话,则权重-20
}
#定义虚拟路由,VI_1为虚拟路由的标示符,自己定义名称
vrrp_instance vI_1{
state MASTER #来决定主从 BACKUP是从
interface ens33 #绑定虚拟I的网络接口,根据自己的机器填写,通过ip a查网卡
virtual_ router_id 121 #虚拟路由的ID号,两个节点设置必须一样
mcast_src_ip 192.168.26.11 #填写本机ip
priority 100 #节点优先级,主要比从节点优先级高
nopreempt #优先级高的设置nopreempt解决异常恢复后再次抢占的问题
advert_int 1 #组播信息发送间隔,两个节点设置必须一样,默认1s
authentication {
auth_type PASS
auth_ pass 1111
}
#将track script块加入instance配置块
track_script {
chk_nginx #执行Nginx监控的服务
}
virtual_ipaddress {
192.168.26.88 #虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
}
主nginx搭建完毕
1.如果要实现一主一备用虚拟VIP只能在一台服务器存放。
2如果要实现多主多备的虚拟VIP可以在多台服务器存放。
克隆一台作从机,改了mcast_src_ip 和state BACKUP代表从机
项目在生产环境上的服务器发生当机的情况?怎么处理?
1.故障转移
2心跳检测
3.负载均衡
4.自动重启
keeplived 经常会ping一下nginx,如果心跳检测不到,keeplived 会 自动实现重启脚本
脚本nginx_check.sh
这个脚本配置在keeplived的配置文件里,作用是检测nginx是否启动,如果没启动,他就会帮你启动
把这个脚本放到/etc/keepalived/文件夹下,然后授权一下 chmod 777 nginx_check.sh
有了这个脚本,不用手动启动nginx,只要启动keeplived,他就会执行脚本,启动nginx
如果,nginx宕机,也会自动重启。如果重启多次还是失败,就在keeplived里配置发送邮件给运维人员