nginx作为http服务器,在集群中 用于接受客户单发送过来的请求,并且根据配置的策略将请求 转发给具体的哪台服务器
- 如果在nginx服务器使用轮询策略处理客户端的请求,出现了tomcat 宕机的情况下,例如:有两个请求,第一个请求轮询给了tomcat1,按照轮询的策略,当在来一个请求的时候,这条请求 将交个
tomcat2处理,此时 如果tomcat2 由于不知名的原因,宕机了,那这条请求 被分配到tomcat2,那这条请求 则会一直得不到响应,用户也不知道怎么回事。
nginx提供了宕机容错机制,当tomcat2宕机以后,nginx可以通过配置超时,超过超时时间以后,则跳过当前服务器,轮询下一台服务器
在nginx.conf文件中 配置 proxy_connect_timeout 1 连接超过1s 则跳过当前轮询 - nginx作为http服务器,接受来自客户端的请求,然后根据负载均衡策略,反向代理到集群中的服务器。在集群的过程中,服务器是不会暴露真实的ip地址,集群服务器和nginx服务器是在同一个给局域网,对外暴露也只是nginx服务器的公网ip
- 在上面说了,如果是集群中的服务器宕机了,例如tomcat集群中有一台宕机了,nginx的宕机容错机制会跳过需要轮询的tomcat,直接轮询到下一台服务器。如果是nginx服务器宕机以后,又该如何解决,所有的请求都是经过nginx服务器 将请求发送给tomat,tomcat不会暴露真实的ip地址,所以此时的客户端请求根本无法访问到tomcat,此时所有的服务器都不能访问
- 在nginx作为http服务器的时候,tomcat宕机了,nginx提供宕机容错机制,如果nginx服务器自己宕机了,则需要依靠一些重启脚本的工具,帮助监听nginx的活动状态,来保证nginx最大可能的处于正常运行的状态,使用keepalived的可以监听重启 nginx 保证nginx的高可用
为了预防高并发,所以我们可以对tomcat集群,可以减轻单台服务器的压力。为了预防nginx宕机,导致外网无法访问tomcat,所以我们可以对nginx进行类似集群的操作,可以是一主一备,也可以是多主多备,根据实际用户情况,考虑成本的情况,采用了一主一备。当nginx主机宕机以后,keepalived会监控nginx 发现nginx宕机了,则会自动切换到备机nginx,reids的主从复制中哨兵机制会检测监控主reids是否宕机,如果宕机了,则从从redis选择一台来作为master,当原来的主机启动以后,主机不会切换,但是keepalived+nginx则不会,如果检测到主nginx启动以后,则继续用主nginx如何
5 .什么是keepalived
Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。
使用keepalived+nginx实现nginx的高可用,宕机从启
1.需要两台或者两台以上的服务器
ip:192.168.31.144 (主nginx)
ip:192.168.31.179 (从nginx)
2.两台服务器都需要安装nginx和keepalived
Linux安装nginx可查看:
Linux安装keepalived
1. http://www.keepalived.org/download.html 下载keepalived安装包
2 将下载好的keepalived安装包 放到linux /usr/local目录下
3 tar -zxvf keepalived-1.2.18
.
yum -y install openssl-deve 安装所需要的软件包
5 cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
6 make&& make install
为了方便统一管理,将解压编译好的keepalived 配置文件进行地方修改
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
设置开机启动:chkconfig keepalived on
nginx 重启脚本:
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
keepalived最主要的是掌握它的配置文件 主配置文件
! 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 #来决定主从
interface eno16777736 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样
mcast_src_ip 192.168.31.144 #填写本机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.31.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
}
}
从配置文件
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
interval 2 #检测时间间隔
weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state BACKUP #来决定主从
interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
virtual_router_id 122 # 虚拟路由的 ID 号, 两个节点设置必须一样
mcast_src_ip 192.168.31.197 #填写本机ip
priority 90 # 节点优先级,主要比从节点优先级高
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.31.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
}
}
两台服务器启动好以后,可以通过ip addr 查看到当前 主机的ip地址中包含了 虚拟的ip地址 如果主机宕机,则该虚拟ip会自动跑到备机
直接访问 虚拟ip地址:192.168.31.110
关闭主nginx以后以后:
会自动切换到备nginx上面去
以上 则完成了keepalived+nginx实现 高可用,nginx宕机以后 keepalived完成nginx的自动重启