前言
因生产环境需要,现需要搭建一个前端为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内网)
--------------------------------------------------------------------------------------
一、首先配置两台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文件,实现负载均衡/反向代理
需要添加负载均衡的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,并刷新,测试完成。
-------------------------------------------------------------------------------------------------------------------
案例:
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秒
}