概述
随着互联网井喷式发展,单节点服务已经不能满足并发需求,通常利用nginx反向代理来实现集群部署以此解决并发需求(nginx负载均衡实现)。此时虽然保证了应用的集群化和高容灾性,但nginx却单节点运行,这极大的为系统宕机埋下伏笔。为此我们必须来采用一主一备或一主N备的方式来保证nginx的运行,高可用(HA- High Availability)的解决方案很多,本文以Keepalived来进行讲解。
关于Keepalived
Keepalived是由C语言编写,目标是基于Linux为应用提供简单而又强大的负载均衡和高可用的服务。负载均衡是依赖于广泛使用的Linux虚拟服务器(IPVS)内核模块提供的第四层负载均衡。而高可用是通过VRRP协议实现。注:本文暂只针对高可用来讲解。
架构说明
安装Keepalived
- #下载keepalived
- wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
- #解压keepalived
- ar zxvf keepalived-1.2.7.tar.gz
- #进入keepalived目录
- cd keepalived-1.2.7
- #配置并检查源码
- ./configure --prefix=/
- #编译
- make
- #安装
- make install
配置Keepalived
配置中的state MASTER决定了节点为主节点
priority决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。
主节点的配置如下:
- #校验脚本
- vrrp_script chk_nginx {
- # script "killall -0 nginx"
- script "/etc/keepalived/check_nginx.sh"
- interval 2
- weight -5
- fall 3
- rise 2
- }
- #添加需要设置的ip
- vrrp_instance VI_1 {
- state MASTER
- interface eth0
- virtual_router_id 51
- #自身机器所在ip
- mcast_src_ip 192.168.155.1
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- #虚拟ip,对外公开
- virtual_ipaddress {
- 192.168.155.12
- }
- #执行校验函数
- track_script {
- chk_nginx
- }
- }
校验脚本如下,意思是判断nginx进程是否存在,如果不存在则尝试启动。如果不能启动将退出keepalived服务,由其他服务器接管。接管的依据依靠priority 的值来决定,哪个节点值最大,则有哪个来接管。
- #!/bin/bash
- counter=$(ps -C nginx --no-heading|wc -l)
- if [ "${counter}" = "0" ]; then
- /opt/nginx/sbin/nginx
- sleep 2
- counter=$(ps -C nginx --no-heading|wc -l)
- if [ "${counter}" = "0" ]; then
- /etc/init.d/keepalived stop
- fi
- fi
配置完成后,将两个文件copy到其他keepalived节点。并将priority设置合理。这样我们的nginx高可用就已经完成啦... ...
2016年10月18日 下午5:36 沙发
学到了