一, 高可用原理图: 就是配置多个 nginx, 防止其中某个 nginx 宕机, 有备无患. keepalived 用来防止单点故障, 后面主要通过修改 keepalived 的配置文件来完成高可用.
二, 配置
1. 在两个服务器 (192.168.17.129,192.168.17.131) 上安装两台 Nginx, 参考前面 Nginx 安装章节
2. 在两个服务器上分别安装 keepalived
1 yum install leepalived -y
安装之后, 在 etc 里面生成目录 keepalived, 有配置文件 keepalived.conf
三, 完成高可用配置(主从配置)
1. 修改 / etc/keepalived/keepalived.conf
- global_defs {
- notification_email {
- [email protected]
- [email protected]
- [email protected]
- }
- notification_email_from [email protected]
- smtp_server 192.168.17.129
- smtp_connect_timeout 30
- router_id LVS_DEVEL
- }
- vrrp_script chk_http_port {
- script "/usr/local/src/nginx_check.sh"
- interval 2 #(检测脚本执行的间隔)
- weight 2
- }
- vrrp_instance VI_1 {
- state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
- interface ens33 // 网卡
- virtual_router_id 51 # 主, 备机的 virtual_router_id 必须相同
- priority 100 # 主, 备机取不同的优先级, 主机值较大, 备份机值较小
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 192.168.17.50 // VRRP H 虚拟地址
- }
- }
2. 在 / usr/local/src 添加检测脚本
- #!/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
3. 启动 Nginx,keepalived
- ./nginx
- systemctl start keepalived.service
四, 测试
1. 在访问虚拟 ip 地址 192.168.17.50
2. 把主服务器上的 nginx 和 keepalived 停止, 再次输入 192.168.17.50
五, Nginx 原理
1. master 和 worker
master 进行管理 worker,worker 实际处理请求.
查看 nginx 进程
框架
2. worker 如何工作
3. 一个 master 和多个 worker 好处
(1)可以使用 nginx-s reload 热部署, 利用 nginx 进行热部署操作
(2)每个 woker 是独立的进程, 如果有其中的一个 woker 出现问题, 其他 woker 独立的, 继续进行争抢, 实现请求过程, 不会造成服务中断
4. worker 数量设置为多少合适
worker 数和服务器的 CPU 数相等是最为适宜的
5. 连接数 worker_connection
第一个: 发送请求, 占用了 woker 的几个连接数?
答案: 2 或者 4 个(不与后台交互就是 2 个, 一来一回. 如果和后台交互就是 4 个, 客户端 = nginx=tomcat)
第二个: nginx 有一个 master, 有四个 woker, 每个 woker 支持最大的连接数 1024, 支持的最大并发数是多少?
普通的静态访问最大并发数是: worker_connections * worker_processes /2,
而如果是 HTTP 作为反向代理来说, 最大并发数量应该是 worker_connections *worker_processes/4.
来源: http://www.bubuko.com/infodetail-3359282.html