应用篇
[Nginx基础]-应用篇
1.静态资源部署
【1】部署步骤说明
部署步骤(linux环境)
进入nginx官网,下载指定版本的.tar.gz文件
将下载好的nginx安装包上传到虚拟机并配置依赖环境
解压、编译安装、启动nginx服务器,测试nginx是否可以正常访问
将静态资源上传到指定的目录,并配置nginx.conf文件,随后重启服务器访问资源文件
【2】参考配置
进入nginx官网,下载指定版本的.tar.gz文件
将下载好的nginx安装包上传到虚拟机指定路径,通过ls -l查看文件属性
# 也可通过wget获取安装包
wget http://nginx.org/download/nginx-1.15.3.tar.gz
安装依赖环境
#安装Nginx依赖环境,‐y表示所有提示默认选择y
yum -y install pcre pcre-devel
yum ‐y install zlib zlib‐devel
yum ‐y install openssl openssl‐devel
解压和编译安装、启动nginx服务器
# 1.将nginx解压至指定目录(此处解压到/usr/local/software/)并重命名
tar -zxvf nginx-1.17.5.tar.gz -C /usr/local/software/
mv nginx-1.17.5 nginx
# 2.进入nginx目录,编译并安装【确保有gcc编译环境】
# 编译和测试
cd nginx
./configure
# 安装
make
make install
# 3.安装成功之后,在/usr/local下生成了nginx目录,进入nginx/sbin目录
cd /usr/local/nginx/sbin
# 在sbin目录下控制nignx服务(启动、停止、重写加载)
./nginx # 启动
./nginx ‐s stop # 停止
./nginx ‐s reload # 重写加载
# 启动成功后查看是否有nginx的线程是否存在
ps ‐ef | grep nginx
上传静态资源文件到指定目录,配置nginx.conf文件
server {
listen 80;
server_name localhost ;
location / {
root /home/test;
index index.html index.htm;
}
}
# 将静态资源文件上传至/home/test目录
# 启动nginx服务,通过虚拟机ip:80访问首页(参考启动指令,启动nginx时指定配置文件)
/usr/local/nginx/sbin/nginx -c /usr/local/software/nginx/conf/nginx.conf
2.Nginx+Keepalived
【1】基本概念
Nginx+keepalived实现高可用
KeepAlived是一个高性能的服务器高可用或者热备解决方案,Keepalived主要是防止服务器单点故障的发生问题,可以通过与Nginx配置实现服务端高可用
KeepAlived是以VRRP协议为实现基础,用VRRP协议可以实现高可用,VRRP协议是用于实现路由器冗余的协议,VRRP协议是把两台或者多台路由器设备虚拟成一个设备,然后堆土提供虚拟的路由ip
【2】参考配置
🔖Keepalived安装、配置
(1)通过wget获取Keepalived安装包
参考步骤
wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
# 配置步骤参考如下
[root@root /]# cd /usr/local/software/soft
[root@root soft]# wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
[root@root software]# tar -zxvf keepalived-2.0.7.tar.gz -C /usr/local/software/
[root@root software]# mv keepalived-2.0.7 keepalived
[root@root software]# cd keepalived
[root@root keepalived]# yum -y install openssl openssl-devel
[root@root keepalived]# ./configure --prefix=/usr/local/software/keepalived
[root@root keepalived]# make
[root@root keepalived]# make install
可能存在的问题
# 安装过程错误提示
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
# 如果安装过程中出现问题,需要根据提示完成相关依赖的安装即可
yum -y install libnl libnl-devel libnfnetlink-devel
# 依赖安装完成之后再次执行
./configure --prefix=/usr/local/software/keepalived
# 数据正常则依次执行make、make install指令完成安装
(2)将Keepalived添加到启动服务
[root@root ~]# mkdir /etc/keepalived
[root@root ~]# cp /usr/local/software/keepalived/etc/keepalived/keepalived.conf /etc/keepalived
[root@root ~]# cp /usr/local/software/keepalived/etc/sysconfig/keepalived /etc/sysconfig
将keepalived添加到开机启动中
[root@root ~]# chkconfig keepalived on
启动keepalived、检查服务状态
# start启动服务 stop停止服务
service keepalived start
# 查看当前状态
ps -ef | grep keepalived
# 查看当前服务的状态
systemctl status keepalived
🔖Nginx+keepalived双机热备(主从模式)
(1)场景介绍
由于业务扩展,网站的访问量不断加大,负载越来越高。现需要在web前端放置nginx负载均衡,同时结合keepalived对前端nginx实现HA高可用。
1)nginx进程基于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能。在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由主进程发出,Slave(worker)进程所有的超时任务都会被Master中止,属于非阻塞式任务模型。
2)Keepalived是Linux下面实现VRRP备份路由的高可靠性运行件。基于Keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接。二者结合,可以构架出比较稳定的软件LB方案。
Keepalived介绍
Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。
VRRP协议
VRRP全称 Virtual Router Redundancy Protocol,即 虚拟路由冗余协议。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(Router Group),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(vip,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。
在VRRP协议实现里,虚拟路由器使用 00-00-5E-00-01-XX 作为虚拟MAC地址,XX就是唯一的 VRID (Virtual Router IDentifier),这个地址同一时间只有一个物理路由器占用。在虚拟路由器里面的物理路由器组里面通过多播IP地址 224.0.0.18 来定时发送通告消息。每个Router都有一个 1-255 之间的优先级别,级别最高的(highest priority)将成为主控(master)路由器。通过降低master的优先权可以让处于backup状态的路由器抢占(pro-empt)主路由器的状态,两个backup优先级相同的IP地址较大者为master,接管虚拟IP。
双机高可用
双机高可用一般是通过虚拟IP(飘移IP)方法来实现的,基于Linux/Unix的IP别名技术。
双机高可用方法目前分为两种
1)双机主从模式:即前端使用两台服务器,一台主服务器和一台热备服务器。正常情况下,主服务器绑定一个公网虚拟IP,提供负载均衡服务,热备服务器处于空闲状态;当主服务器发生故障时,热备服务器接管主服务器的公网虚拟IP,提供负载均衡服务;但是热备服务器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。
2)双机主主模式:即前端使用两台负载均衡服务器,互为主备,且都处于活动状态,同时各自绑定一个公网虚拟IP,提供负载均衡服务;当其中一台发生故障时,另一台接管发生故障服务器的公网虚拟IP(这时由非故障机器一台负担所有的请求)。这种方案,相对经济实惠
keepalived模块介绍
keepalived可以认为是VRRP协议在Linux上的实现,主要有三个模块,分别是core、check和vrrp
core:keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析
check:负责健康检查,包括常见的各种检查方式
vrrp:用来实现VRRP协议的
(2)环境搭建
环境搭建步骤说明
- 安装、配置nginx环境(nginx基本配置、负载均衡配置)
- Keepalived环境安装、配置
- 监听文件配置
环境说明
Centos7 64位
Master机器 master-node 192.168.8.113
Slave 机器 (slave-node) 192.168.8.114、192.168.8.115
本地机器ip 192.168.43.99(无线热点连接)
公用的虚拟IP(VIP) 192.168.118.88 192.168.118.99(负载均衡器上配置的域名,都解析到这个虚拟的VIP上)
Tomcat服务器 : 三台机器上都装有tomcat服务器 ,默认端口号都是8080
1)nginx安装配置
参考nginx安装配置、负载均衡配置的内容,修改配置文件(在三台服务器上安装nginx并完成相同配置)
2)Keepalived安装配置
在三台服务器上安装Keepalived(安装过程不作赘述,参考上述内容即可)并配置
配置主节点服务:192.168.8.113
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {#指定keepalived事件发送通知的邮箱
meagn1@163.com
}
notification_email_from sns-lvs@gmail.com
smtp_server 192.168.8.113
smtp_connect_timeout 30
router_id 192.168.8.113
vrrp_skip_check_adv_addr
vrrp_gna_interval 0
}
vrrp_script chk_http_port { ## 检测Nginx服务是否在运行
script "/etc/keepalived/nginx_check.sh"
global_defs {
}
smtp_server 192.168.8.113
smtp_connect_timeout 30
router_id 192.168.8.113
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_port { ## 检测Nginx服务是否在运行
script "/etc/keepalived/nginx_check.sh"
interval 2 ##检测时间
weight -20 ## 如果条件成绩则权重减20
}
vrrp_instance VI_1 {
state MASTER
interface ens33 #注意 必须配置当前的网卡(通过ifconfig指令查看)
virtual_router_id 88 # 虚拟路由编号 主从要一致
priority 100 # 优先级 数值越大获取请求的优先级越高
advert_int 1 # 检查间隔
authentication {
auth_type PASS
auth_pass noob #设置vrrp验证密码,在同一个vrrp下密码一致才能通信
}
track_script{
chk_http_port # 检查脚本
}
# 定义虚拟ip(要求网段一致:192.168.8.xx)
virtual_ipaddress {
192.168.8.88
192.168.8.99
}
}
配置从节点服务:192.168.8.114
global_defs {
notification_email {
meagn1@163.com
}
notification_email_from sns-lvs@gmail.com
smtp_server 192.168.8.114
smtp_connect_timeout 30
router_id 192.168.8.114
}
vrrp_script chk_http_port { ## 检测Nginx服务是否在运行
script "/etc/keepalived/nginx_check.sh"
interval 2 ##检测时间
weight -20 ## 如果条件成绩则权重减20
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 88
mcast_src_ip 192.168.8.114
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass noob
}
track_script{
chk_http_port
}
virtual_ipaddress {
192.168.8.88
192.168.8.99
}
}
配置从节点服务:92.168.8.115
global_defs {
notification_email {
meagn1@163.com
}
notification_email_from sns-lvs@gmail.com
smtp_server 192.168.8.115
smtp_connect_timeout 30
router_id 192.168.8.115
}
vrrp_script chk_http_port { ## 检测Nginx服务是否在运行
script "/etc/keepalived/nginx_check.sh"
interval 2 ##检测时间
weight -20 ## 如果条件成绩则权重减20
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 88
mcast_src_ip 192.168.8.115
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass noob
}
track_script{
chk_http_port
}
virtual_ipaddress {
192.168.8.88
192.168.8.99
}
}
配置监听文件nginx_check.sh(对应keepalived配置)
vim /etc/keepalived/nginx_check.sh
如果nginx停止了,会尝试重新启动nginx,如果启动失败,会将keepalived进程杀死,将vip漂移到备份机器上
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
/usr/local/software/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
killall keepalived
fi
fi
nginx_check.sh配置完成需赋予执行
chmod +777 /etc/keepalived/nginx_check.sh
3)测试验证
在主服务器上通过指令测试
# 启动nginx、Keepalived
sbin/nginx
service keepalived start
# 查看进程
ps -ef | grep nginx
ps -ef | grep keepalived
配置完成,通过指令ip a查看数据
- 113
- 114
在网页上依次通过网址访问数据,查看结果并分析:结果显示可以在虚拟ip上访问数据,也可以通过真实ip访问数据,访问服务器的方式为轮询访问
192.168.8.88:8081/test.jsp
192.168.8.99:8081/test.jsp
192.168.8.113:8081/test.jsp
192.168.8.114:8081/test.jsp
192.168.8.115:8081/test.jsp
4)常见问题
VIP绑定失败
原因可能有:
- iptables开启后,没有开放允许VRRP协议通信的策略(也有可能导致脑裂);可以选择关闭iptables
- keepalived.conf文件配置有误导致,比如interface绑定的设备错误
VIP绑定后,外部ping不通
原因可能有:
- 网络故障,可以检查下网关是否正常;
- 网关的arp缓存导致,可以进行arp更新,命令是"arping -I 网卡名 -c 5 -s VIP 网关"
-c 表示要发多少个广播包
-U 非请求模式,更新同网段设备上的arp缓存
-I 通过哪个接口发送数据包,这个会使用到这个网卡的mac的地址
VIP无法访问,内部外部都无法ping通
原因可能有:
- 查看配置文件是否有vrrp_strict 注释掉即可 测试能否内部Ping通