keepalived + nginx组建高可用负载平衡Web server集群

1 nginx负载均衡高可用 1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。
为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。



1.2 keepalived+nginx实现主备 1.2.1 什么是keepalived
keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

1.2.2 keepalived工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(VIP = Virtual IP Address,虚拟IP地址,该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和VRRP。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。VRRP模块是来实现VRRP协议的。



1.1.1 keepalived+nginx实现主备过程


1.1.1.1 初始状态 keepalived + nginx组建高可用负载平衡Web server集群
文章图片




1.1.1.2 主机宕机
【keepalived + nginx组建高可用负载平衡Web server集群】 keepalived + nginx组建高可用负载平衡Web server集群
文章图片

1.1.1.3 主机恢复
keepalived + nginx组建高可用负载平衡Web server集群
文章图片

1.1.2 高可用环境
两台nginx,一主一备:192.168.100.205和192.168.100.206
两台tomcat服务器:192.168.100.208、192.168.100.209





1.1.1 安装keepalived
1. 安装环境su - root
yum -y install kernel-devel*
yum -y install openssl-*
yum -y install popt-devel
yum -y install lrzsz
yum -y install openssh-clients
yum -y install libnl libnl-devel popt
2. 安装keepalived 2.1. 安装keepalived 将keepalived-1.2.15.tar.gz上传到服务器/usr/local/下。

cd /usr/local
tar -zxvf keepalived-1.2.15.tar.gz
cd keepalived-1.2.15

执行配置命令
./configure --prefix=/usr/local/keepalived

3、编译
make
4、安装
make install

至此安装成功

5、拷贝执行文件
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
6、将init.d文件拷贝到etc下,加入开机启动项
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
7、将keepalived文件拷贝到etc下,加入网卡配置
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
8、创建keepalived文件夹
mkdir -p /etc/keepalived
9、将keepalived配置文件拷贝到etc下
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
10、添加可执行权限
chmod +x /etc/init.d/keepalived
2.2. 加入开机启动: chkconfig --add keepalived #添加时必须保证/etc/init.d/keepalived存在
chkconfig keepalived on

添加完可查询系统服务是否存在:chkconfig --list

2.3. 启动keepalived 启动:service keepalived start
停止:service keepalived stop
重启:service keepalived restart

3. 配置日志文件 1.将keepalived日志输出到local0:
vi /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -d -S 0"

2.在/etc/rsyslog.conf里添加:
local0.*/var/log/keepalived.log

3.重新启动keepalived和rsyslog服务:
service rsyslog restart
service keepalived restart
4. 打开防火墙的通讯地址 iptables -A INPUT -d 224.0.0.18 -j ACCEPT
/etc/rc.d/init.d/iptables save
1.1.1 配置keepalived
主nginx上的keepalived配置文件 global_defs {##全局配置部分
#notification_email {##下面几行均为全局通知配置,可以实现出现问题后报警,但功能有限,因此注释掉,并采用Nagios监视lvs运行情况
#admin@toxingwang.com
#}
#notification_email_from master@toxingwang.com
#smtp_server smtp.exmail.qq.com
#smtp_connect_timeout 30
router_id LVS_DEVEL##设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {##设置vrrp组,唯一且同一LVS服务器组要相同
state MASTER##备份LVS服务器设置为BACKUP
interface eth0# #设置对外服务的接口
virtual_router_id 51##设置虚拟路由标识
priority 100#设置优先级,数值越大,优先级越高,backup设置为99,这样就能实现当master宕机后自动将backup变为master,而当原master恢复正常时,则现在的master再次变为backup。
advert_int 1##设置同步时间间隔
authentication {##设置验证类型和密码,master和buckup一定要设置一样
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {##设置VIP,可以多个,每个占一行
192.168.100.16
}

}
virtual_server 192.168.100.16 80 {
delay_loop 6##健康检查时间间隔,单位s
lb_algo wrr##负载均衡调度算法设置为加权轮叫
lb_kind DR##负载均衡转发规则
nat_mask 255.255.255.0##网络掩码,DR模式要保障真实服务器和lvs在同一网段
persistence_timeout 50##会话保持时间,单位s
protocol TCP##协议
real_server 192.168.100.205 80 {##真实服务器配置,80表示端口
weight 3##权重
TCP_CHECK {##服务器检测方式设置 keepalived的健康检查方式 有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
connect_timeout 5##连接超时时间
nb_get_retry 3 ##失败重试次数
delay_before_retry 3 ##失败重试的间隔时间
connect_port 80##连接的后端端口
}
}
}

备nginx上的keepalived配置文件


global_defs {##全局配置部分
#notification_email {##下面几行均为全局通知配置,可以实现出现问题后报警,但功能有限,因此注释掉,并采用Nagios监视lvs运行情况
#admin@toxingwang.com
#}
#notification_email_from master@toxingwang.com
#smtp_server smtp.exmail.qq.com
#smtp_connect_timeout 30
router_id LVS_DEVEL##设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {##设置vrrp组,唯一且同一LVS服务器组要相同
state backup##备份LVS服务器设置为BACKUP
interface eth0# #设置对外服务的接口
virtual_router_id 51##设置虚拟路由标识
priority 50#设置优先级,数值越大,优先级越高,backup设置为99,这样就能实现当master宕机后自动将backup变为master,而当原master恢复正常时,则现在的master再次变为backup。
advert_int 1##设置同步时间间隔
authentication {##设置验证类型和密码,master和buckup一定要设置一样
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {##设置VIP,可以多个,每个占一行
192.168.100.16
}

}
virtual_server 192.168.100.16 80 {
delay_loop 6##健康检查时间间隔,单位s
lb_algo wrr##负载均衡调度算法设置为加权轮叫
lb_kind DR##负载均衡转发规则
nat_mask 255.255.255.0##网络掩码,DR模式要保障真实服务器和lvs在同一网段
persistence_timeout 50##会话保持时间,单位s
protocol TCP##协议
real_server 192.168.100.206 80 {##真实服务器配置,80表示端口
weight 3##权重
TCP_CHECK {##服务器检测方式设置 keepalived的健康检查方式 有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
connect_timeout 5##连接超时时间
nb_get_retry 3 ##失败重试次数
delay_before_retry 3 ##失败重试的间隔时间
connect_port 80##连接的后端端口
}
}
}




1. nginx介绍 1.1. 什么是nginx Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。
1.2. Nginx的应用场景 1、http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
2、虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

2. nginx安装 2.1. 下载
进入http://nginx.org/en/download.html 下载nginx1.8.0版本(当前最新稳定版本)。


1.1. 安装 i. nginx安装环境
nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境。
n gcc
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++
n PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
yum install -y pcre pcre-devel
注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
n zlib
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
yum install -y zlib zlib-devel

n openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum install -y openssl openssl-devel

ii. 编译安装
将nginx-1.8.0.tar.gz拷贝至linux服务器。

解压:
tar -zxvf nginx-1.8.0.tar.gz
cd nginx-1.8.0

1、 configure
./configure --help查询详细参数(参考本教程附录部分:nginx编译参数)

参数设置如下:
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

注意:上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录


2、 编译安装
make
makeinstall

安装成功查看安装目录 :
keepalived + nginx组建高可用负载平衡Web server集群
文章图片


1.1. 启动nginx cd /usr/local/nginx/sbin/
./nginx

查询nginx进程:

keepalived + nginx组建高可用负载平衡Web server集群
文章图片


注意:执行./nginx启动nginx,这里可以-c指定加载的nginx配置文件,如下:
./nginx -c /usr/local/nginx/conf/nginx.conf
如果不指定-c,nginx在启动时默认加载conf/nginx.conf文件,此文件的地址也可以在编译安装nginx时指定./configure的参数(--conf-path= 指向配置文件(nginx.conf))

1.1. 停止nginx 方式1,快速停止:
cd /usr/local/nginx/sbin
./nginx -s stop
此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。

方式2,完整停止(建议使用):
cd /usr/local/nginx/sbin
./nginx -s quit
此方式停止步骤是待nginx进程处理任务完毕进行停止。


1.2. 重启nginx 方式1,先停止再启动(建议使用):
对nginx进行重启相当于先停止nginx再启动nginx,即先执行停止命令再执行启动命令。
如下:
./nginx -s quit
./nginx

方式2,重新加载配置文件:
当nginx的配置文件nginx.conf修改后,要想让配置生效需要重启nginx,使用-s reload不用先停止nginx再启动nginx即可将配置信息在nginx中生效,如下:
./nginx -s reload

1.3. 安装测试 nginx安装成功,启动nginx,即可访问虚拟机上的nginx:
Welcome to nginx!-192.168.100.206 If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.
Thank you for using nginx.


到这说明nginx基本上安装成功。










    推荐阅读