前言

因生产环境需要,现需要搭建一个前端为Nginx的HA双向互备、后端为Nginx代理的loadbalance负载均衡集群。
nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能。
在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,
从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都由主进程发出,
Slave(worker)进程所有的超时任务都会被Master中止,属于非阻塞式任务模型。
Keepalived是Linux下面实现VRRP 备份路由的高可靠性运行件。
基于Keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接。


此架构需考虑的问题

1)Master没挂,则Master占有vip且nginx运行在Master上

2)Master挂了,则backup抢占vip且在backup上运行nginx服务

3)如果master服务器上的nginx服务挂了,则vip资源转移到backup服务器上

4)检测后端服务器的健康状态 为了节约公网ip,本案例用1个公网做vip漂移,
其它服务器用内网互联。

环境需求:2台nginx,2台web,1台交换机(用linux系统代替)

ip_规划 :2台nginx 176.16.1.10(eth1公网),192.168.1.254(eth0内网)

                    2台web分别是: 192.168.1.100/200(eth0内网)

Nginx+Keepalived_第1张图片


--------------------------------------------------------------------------------------


一、首先配置两台Nngix网络信息

1、Ningxi+keepalived的网络配置(eth0内网, eth1外网)
[root@Nginx_master ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:74:C2:B2
TYPE=Ethernet
UUID=8308dd10-28a8-468f-80e4-5a9771fdf9a0
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
DNS1=202.103.24.68

[root@Nginx_master ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
HWADDR=00:0C:29:74:C2:BC
TYPE=Ethernet
UUID=48322db4-8feb-4e5b-a1e0-4e01f64345a3
ONBOOT=yes
NM_CONTROLLED=no
USERCTL=no

备用配置和主服务配置相同,这里不再讲述

-------------------------------------------------------------------------------------------------------------------


2、配置keepalived.conf

[root@Nginx_master ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {br/>[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id Nginx_master
}

vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
176.16.1.10/26 dev eth1 //指定公网ip
}
virtual_routes {
default via 176.16.1.1 scope global //指定网关
}
}


备用配置和主服务配置大致相同,这里不再讲述

[root@Nginx_master ~]# services networkd restart //重启服务
[root@Nginx_master ~]# services keepalived restart //重启服务

-------------------------------------------------------------------------------------------------------------------


3查看路由/ip信息,将会看到外网路由信息跳转到eth1网卡上来。

Nginx+Keepalived_第2张图片


-------------------------------------------------------------------------------------------------------------------


二、配置Nginx文件,实现负载均衡/反向代理

需要添加负载均衡的http upstream 模块

[root@Nginx_master ~]# cat /usr/local/nginx/conf/nginx.conf
......
......
http {
include mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/extra/wang.conf; //只添加此行,用于调后台web内容

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#'$status $body_bytes_sent "$http_referer" '
#'"$http_user_agent" "$http_x_forwarded_for"';

......



[root@Nginx_master ~]# mkdir -p /etc/nginx/conf.d/extra //首先一个创建目录

[root@Nginx_master ~]# cat /etc/nginx/conf.d/extra/wang.conf //创建一个配置文件

upstream wang.com { //定义源服务器组
server 192.168.1.100 weight=1; //定义后台web服务器,并设置权重
server 192.168.1.200 weight=1; //定义后台web服务器,并设置权重
}

        server {                    //自己在定义个server
    listen 80;          //监听端口默认80
    server_name www.wang.com;   //定义主机名,默认是localhost
    location / {
    root html;                 //定义网页根路径
    index web.html index.html;     //定义网页名称
    proxy_pass http://wang.com;   //调用服务器组
    proxy_redirect default;

}
}


[root@Nginx_master ~]# /usr/local/nginx/sbin/nginx -s reload //重新加载配置文件

[root@Nginx_master ~]# /usr/local/nginx/sbin/nginx //重启服务

备用配置和主服务配置相同,这里不再讲述


-------------------------------------------------------------------------------------------------------------------


三、讲完了配置现在接下来安装nginx/keepalived/httpd

#useradd -s /sbin/ -M nginx //创建无法登陆系统且没有家目录的用户
#yum install gcc gcc-c++ pcre-devel openssl-devel zlib-devel popt-devel kernel-devel //安装依赖软件包
#./configure --prefix=/usr/local/nginx \

--user=nginx --group=nginx --with-http_ssl_module
#make && make install //编译并安装
#yum keepaliced httpd //安装keepalived和apache
#echo this is web1 > /var/www/html/a.html //在两台web服务上编写测试文件
#echo this is web2 > /var/www/html/b.html
#services httpd restart

最后通过客户端访问http://176.16.1.10,并刷新,测试完成。


-------------------------------------------------------------------------------------------------------------------

Nginx+Keepalived_第3张图片


案例:

upstream sergrp {
#ip_hash; //给用户分配固定服务器
#server 192.168.8.5:80 weight=2; //设置权重2
server 192.168.8.5:80 down; //宕机服务器
server 192.168.8.4:80;
server 192.168.8.6:80 backup; //备用服务器
server 192.168.8.3:80 max_fails=2 fail_timeout=30; //连续2次连接失败,则宕机30秒
}