配置nginx高可用
首先准备两台机器
192.168.150.129
192.168.150.130
两台机器都安装nginx和keepalived
安装nginx使用前面说过的脚本一键安装
安装keepalived
yum -y install keepalived
#使用下列命令查看keepalived是否安装完成
rpm -qa keepalived
#使用这种方式安装后的keepalived配置文件路径在
/etc/keepalived
修改keepalived的配置文件 这里只贴出主服务器的配置文件,备份服务器的配置文件做相应修改
#全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexander.Cassen@firewall.loc
smtp_servr 192.168.150.129
smtp_connect_timeout 30
router_id LVS_DEVEL #访问到主机 备份服务器配置为LVS_DEVELBACk
}
#检查脚本配置
vrrp_script chk_http_port {
#脚本路径
script "/usr/local/src/nginx_check.sh"
#间隔时间
interval 2
#权重
weight 2
}
#虚拟ip配置
vrrp_instance VI_1 {
state MASTER #备份服务器上将MASTER改为BACKUP
interface ens33 #网卡
virtual_router_id 51 #主、备机的这个值必须相同
priority 100 #主、备机这个值取不同的优先级,主机值大于备份机值
advert_int 1 #心跳检查
#权限校验方式
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #执行nginx监控脚本
}
virtual_ipaddress {
192.168.150.50 #VRRP 虚拟地址
}
}
nginx检查文件
#!/bin/bash
#查看是否有nginx进程
A=`ps -C nginx --no-header | wc -l`
if [ "${A}" = "0" ];then
#尝试启动nginx进程
/usr/local/webserver/nginx/sbin/nginx
sleep 2
if [ "${A}" = "0" ];then
#如果尝试启动nginx失败,则结束keepalivd进程 让虚拟ip切换到备份服务器上
systemctl stop keepalived.service
fi
fi
检查文件需要设置访问权限755
临时关闭selinux
setenforce 0 #这个需要设置 不然keepalived没有权限启动nginx
启动两台机器上的nginx和keepalived
在浏览器输入 http://192.168.150.50/ 可直接访问到主服务器的nginx
这时查看主服务器的ip配置
当主服务器正常运行时,备份服务器上是没有虚拟ip的。
nginx原理分析
-
nginx是多进程的工作方式,有两种进程
- master进程 管理员进程
- worker进程 工作进程
只有一个master进程,可以有多个worker进程。
-
worker进程的工作方式
不是采用master轮询worker的方式,而是多个worker争抢的方式。
客户端发送一个请求过来,被master进程接收到,master通知所以worker进程来争抢。
-
一个master进程和多个worker进程的好处
- nginx的热部署功能 nginx -s reload 的实现。当加载新的配置文件时,可以在不中断任务的情况下,让空闲worker先加载新配置文件,正在工作的worker在处理完任务后再加载新的配置文件。
- 进程独立,不需要加锁,每个worker进程互不影响。一个worker退出,其他worker还可以继续工作。
-
设置多少个worker合适
一般worker数量设置为cpu的核心数比较合适。设置过少,cpu效率发挥不出来;设置过多,cpu会频繁发生上下文切换,影响效率。
worker_processes 1;
-
连接数的说明 worker_connections
events { worker_connections 1024; }
-
一个连接占多少连接数
如果是请求的静态资源,则占两个连接数
如果是请求的动态资料,比如最终是请求的tomcat,则占四个连接数
-
nginx配置为一个master,四个worker,最大并发请求数是多少
这个问题还是要分静态资源请求和动态资源请求
如果是静态资源请求,则 最大并发数=worker_processes*worker_connections/2
如果是动态资源请求,则 最大并发数=worker_processes*worker_connections/4
-