目录
二、Nginx02
2.1 keepalived和heartbeat介绍
2.1.1 两者的介绍
2.1.2 keepalived简介
2.1.3 VRRP协议与工作原理
2.1.4 Keepalvied的工作原理
2.2 安装环境及keepalived
2.3 启动与验证keepalived
2.4 keepalived测试
2.4.1 环境准备
2.4.2 配置keepalived
2.4.3 项目其余配置
2.4.4 测试抢占模式
2.5 nginx的工作原理
二、Nginx02
2.1 keepalived和heartbeat介绍
2.1.1 两者的介绍
Keepalived是Linux下一个轻量级别的高可用解决方案。它与HeartBeat RoseHA 实现相同类似的功能,都可以实现服务或者网络的高可用,但是又有差别。
高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是指主机的冗余和接管。
HeartBeat是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦。
Keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成。
2.1.2 keepalived简介
Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。
后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA cluster功能,下面介绍一下VRRP协议实现的过程。
2.1.3 VRRP协议与工作原理
在现实的网络环境中。主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。
熟悉网络的学员对VRRP协议应该不陌生,它是一种主备模式的协议,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信,这其中涉及到两个概念:物理路由器和虚拟路由器。
VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由,这个虚拟路由器通过虚拟IP(一个或者多个)对外提供服务,而在虚拟路由器内部十多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由设备被成为:主路由器(Master角色),一般情况下Master是由选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如:ARP请求,ICMP 数据转发等,而且其它的物理路由器不拥有对外的虚拟IP,也不提供对外网络功能,仅仅接收MASTER的VRRP状态通告信息,这些路由器被统称为“BACKUP的角色”,当主路由器失败时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色,继续提供对外服务,整个切换对用户来说是完全透明的。
每个虚拟路由器都有一个唯一的标识号,称为VRID,一个VRID与一组IP地址构成一个虚拟路由器,在VRRP协议中,所有的报文都是通过IP多播方式发送的,而在一个虚拟路由器中,只有处于Master角色的路由器会一直发送VRRP数据包,处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息,用来监控Master运行状态,一一般不会发生BACKUP抢占的情况,除非它的优先级更高,而当MASTER不可用时,BACKUP也就无法收到Master发过来的信息,于是就认定Master出现故障,接着多台BAKCUP就会进行选举,优先级最高的BACKUP将称为新的MASTER,这种选举角色切换非常之快,因而保证了服务的持续可用性。
2.1.4 Keepalvied的工作原理
网络的七层协议:
7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;
高层(7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端,点到点的数据流。
上面我们介绍了Keepalived通过VRRP实现高可用性的工作原理,而Keepalived作为一个高性能集群软件,它还能实现对集群中服务器运行状态的监控以及故障隔离,下面我们介绍一下Keepalived对服务器运行状态和故障隔离的工作原理。
Keepalived工作在TCP/IP (五层模型)参考模型的 三层、四层、五层,也就是分别为:网络层,传输层和应用层,根据TCP、IP参数模型隔层所能实现的功能,Keepalived运行机制如下:
在网络层:我们知道运行这4个重要的协议,互联网络IP协议,互联网络可控制报文协议ICMP、地址转换协议ARP、反向地址转换协议RARP,在网络层Keepalived在网络层采用最常见的工作方式是通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包(有点类似与Ping的功能),如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点。
在传输层:提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP,传输控制协议TCP可以提供可靠的数据输出服务、IP地址和端口,代表TCP的一个连接端,要获得TCP服务,需要在发送机的一个端口和接收机的一个端口上建立连接,而Keepalived在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉。
在应用层:可以运行FTP,TELNET,SMTP,DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived工作方式,例如:可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户的设定参数检测各种程序或者服务是否允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器
为什么使用集群?
1. 防止单点故障;
2. 负载均衡;
3. 高并发;
4. 高可靠;
2.2 安装环境及keepalived
1、逐步操作
1、在 /usr/lwl/soft下面创建keepalived文件夹
2、联网下载安装包
wget https://www.keepalived.org/software/keepalived-2.0.10.tar.gz
3、解压安装包
tar -zxvf keepalived-2.0.10.tar.gz
4、安装依赖的环境
yum -y install popt-devel libnl libnl-devel libnfnetlink-devel net-tools
5、检测是否适合安装
[root@localhost ~]# cd keepalived-2.0.10
./configure --prefix=/usr/java/keepalived
6、编译并安装
make && make install
7、配置keepalived
[root@os004 keepalived-2.0.10]# cp /usr/java/keepalived/keepalived-2.0.10/keepalived/etc/init.d/keepalived /etc/init.d/
[root@os004 keepalived-2.0.10]# mkdir /etc/keepalived
[root@os004 keepalived-2.0.10]# cp /usr/java/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@os004 keepalived-2.0.10]# cp /usr/java/keepalived/keepalived-2.0.10/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@os004 keepalived-2.0.10]# cp /usr/java/keepalived/sbin/keepalived /usr/sbin/
2、联合操作
1、安装环境:
yum -y install popt-devel libnl libnl-devel libnfnetlink-devel net-tools
#安装成功提示
Installed:
libnfnetlink-devel.x86_64 0:1.0.1-4.el7 libnl.x86_64 0:1.1.4-3.el7 libnl-devel.x86_64 0:1.1.4-3.el7 popt-devel.x86_64 0:1.13-16.el7
Complete!
#如果想安装指定版本,可以查看一下都有什么版本可以安装
yum list|grep keepalived
2、安装keepalived
yum install -y keepalived
#安装成功提示
Dependency Updated:
ipset.x86_64 0:7.1-1.el7 ipset-libs.x86_64 0:7.1-1.el7
Complete!
3、安装位置
[root@localhost keepalived]# pwd
/etc/keepalived
[root@localhost keepalived]# ls
keepalived.conf
2.3 启动与验证keepalived
[root@os004 keepalived-2.0.10]# systemctl start keepalived
[root@os004 keepalived-2.0.10]# systemctl status keepalived
#查看正在运行的keepalived进程
[root@os004 keepalived-2.0.10]# ps -aux|grep keepalived
2.4 keepalived测试
2.4.1 环境准备
配置两台虚拟机:使用centos7
虚拟ip:192.168.221.127
192.168.221.128
Keppalived1:主机 127 Nginx
主机上有两个项目(127:Tomcat 8080,127:Tomcat 8081)
Keppalived2:从机 128 Nginx
2.4.2 配置keepalived
主服务器修改192.168.111.127的配置文件/etc/keepalived/keepalived.conf
global_defs {
notification_email {
123@qq.com #设置报警邮件地址,可以设置多个,可以不设置
}
notification_email_from master@qq.com #发送通知邮件时邮件源地址
smtp_server 127.0.0.1 # 发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现
smtp_connection_timeout 30 #连接smtp连接超时时间
router_id 192.168.111.127 #############定义路由标识信息,相同局域网唯一
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh" ##########最后手动执行下此脚本,以确保此脚本能够正常执行
interval 2 #(检测脚本执行的间隔,单位是秒)
weight -2 #当检查失败后,将vrrp_instance的priority减小2
fall 3 #连续监测失败3次,才认为真的健康检查失败。并调整优先级
rise 2 #连续监测2次成功,就认为成功。但不调整优先级
}
# 虚拟ip配置 vrrp
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备,大写
interface ens33 ############ 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
mcast_src_ip 192.168.111.127 ###########发送心跳包的源IP,可使用绑定的网卡IP
virtual_router_id 180 # 虚拟路由编号,主从要一直0-255
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
192.168.111.100 ################### 定义虚拟ip(VIP),可多设,每行一个
}
}
备用服务器修改192.168.111.128的配置文件/etc/keepalived/keepalived.conf
global_defs {
notification_email {
123@qq.com #设置报警邮件地址,可以设置多个,可以不设置
}
notification_email_from master@qq.com #发送通知邮件时邮件源地址
smtp_server 127.0.0.1 # 发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现
smtp_connection_timeout 30 #连接smtp连接超时时间
router_id 192.168.111.128 #定义路由标识信息,相同局域网唯一
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行
interval 2 #(检测脚本执行的间隔,单位是秒)
weight -2 #当检查失败后,将vrrp_instance的priority减小5
fall 3 #连续监测失败3次,才认为真的健康检查失败。并调整优先级
rise 2 #连续监测2次成功,就认为成功。但不调整优先级
}
# 虚拟ip配置 vrrp
vrrp_instance VI_1 {
state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备,大写
interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
mcast_src_ip 192.168.111.128 #发送心跳包的源IP,可使用绑定的网卡IP
virtual_router_id 180 # 虚拟路由编号,主从要一直
priority 98 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
192.168.111.100 # 定义虚拟ip(VIP),可多设,每行一个
}
}
2.4.3 项目其余配置
1、以下是针对nginx状态进行检测的脚本,第一次nginx服务死掉时,会重新启动,如果Nginx服务无法正常启动,则杀掉keepalived进程
vim /usr/local/src/check_nginx_pid.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
2、配置用户执行权限
#给所有用户执行权限
chmod a+x /usr/local/src/check_nginx_pid.sh
3、修改nginx.conf文件
vi /usr/local/nginx/conf/nginx.conf
location / {
root /usr/lwl/files/static/dist; #vue项目在系统中的位置
index index.html index.htm; #最初过来访问的页面
}
4、开启nginx和keepalived进行测试
systemctl start nginx
systemctl start keepalived
然后再浏览器使用虚拟路由进行访问 192.168.111.100
也可以使用真正的路由进行访问 192.168.111.127 或者是 192.168.111.128
出现vue图标即是成功
5、查看连接的哪台主机
可以使用Xshell新建一个连接,连接IP地址为 192.168.111.100
输入 ip addr 出现的ip地址就是正在连接的服务器ip地址
如果关闭当前正在连接的主机,那么另外一台备用机就会连接
访问[http://192.168.111.100/ 一切正常],无论是tomcat机器还是nginx都避免了单点故障。
2.4.4 测试抢占模式
现在192.168.111.127 是主机,192.168.111.128是备用机,
如果修改128里面配置文件 /etc/keepalived/keepalived.conf
state MASTER #将128也修改为主机
这时分配的服务器就是随机的。
2.5 nginx的工作原理
Nginx默认采用多进程工作方式,Nginx启动后,会运行一个master进程和多个worker进程。其中master充当整个进程组与用户的交互接口,同时对进程进行监护,管理worker进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。worker用来处理基本的网络事件,worker之间是平等的,他们共同竞争来处理来自客户端的请求。
worker工作图:
1、一个master多个worker的好处
每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的, 继续进行争抢,实现请求过程,不会造成服务中断
2、设置多少个 woker 合适
worker 数和服务器的 cpu 数相等是最为适宜的
有关 连接数 worker_connection
3、第一个:发送请求,占用了 woker 的几个连接数?
答案:2 或者 4 个
4、第二个:nginx 有一个 master,有四个 woker,每个woker支持最大的连接数1024,支持的最大并发数是多少?
①普通的静态访问最大并发数是: worker_connections * worker_processes /2,
②而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4