软件介绍


  1. 什么是负载均衡高可用

nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。

为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。

  1. 什么是keepalived

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

  1. 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. 注意

keepalived需要一个虚拟IP(vip),这个虚拟ip是需要服务器提供商支持的,在安装前要确保服务器是支持该项服务的。

  1. 原理

keepalived是采用vrrp协议来实现的,其实最重要的一点就是虚拟IP的应用。如何理解虚拟IP呢?下面通过举个例子来进行说明:

我们现在有两台服务器:192.168.1.5和192.168.1.6,两台服务器部署了一样的服务对外提供服务。 
如果主服务宕机,需要手动切换到192.168.1.6的备用服务上才能正常。这样做显然是不智能的。不符合迈动互联的智慧企业领导者的形象。

而keepalived就是为了解决这个问题。我们现在有一个虚拟IP:192.168.1.7。keepalived会把这个IP绑定到192.168.1.5上。外网直接访问192.168.1.7即可访问到192.168.1.5。当主服务宕机时,keepalived会把这个虚拟IP绑定到备服务器192.168.1.6上。这一切都是keepalived自动完成的。其实可以这样理解,keepalived是两台服务器的代理,哪个服务gameover,就把它踢出去,让其他的继续提供相同的服务。

安装准备


  1. 安装环境
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
  1. 上传软件
    将keepalived-1.2.15.tar.gz上传到服务器/root/下。

安装步骤(主备服务器都需要执行以下步骤)


  1. 解压并进入解压目录
cd /root
tar -zxvf keepalived-1.2.15.tar.gz
cd keepalived-1.2.15
  1. 执行配置命令
安装在/usr/local

./configure --prefix=/usr/local/keepalived
  1. 编译
make
  1. 安装
make install
  1. 拷贝执行文件
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  1. 将init.d文件拷贝到etc下,加入开机启动项
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
  1. 将keepalived文件拷贝到etc下,加入网卡配置
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  1. 创建keepalived文件夹
mkdir -p /etc/keepalived
  1. 将keepalived配置文件拷贝到etc下
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
  1. 添加可执行权限
chmod +x /etc/init.d/keepalived
  1. 加入开机启动项
chkconfig --add keepalived   添加时必须保证/etc/init.d/keepalived存在

chkconfig --list   添加完可查询系统服务是否存在
  1. 配置日志文件
1.将keepalived日志输出到local0:
    vi /etc/sysconfig/keepalived
    KEEPALIVED_OPTIONS="-D -d -S 0"

2.在/etc/rsyslog.conf里添加:
    local0.*  /var/log/keepalived.log
  1. 启动keepalived和rsyslog日志服务
keepalived

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

rsyslog

    service rsyslog start
    service rsyslog restart
  1. 打开防火墙的通讯地址
iptables -A INPUT -d 224.0.0.18 -j ACCEPT
/etc/rc.d/init.d/iptables save

到此,就算安装完成了,不过还需要配置一下:虚拟IP,和主备服务器。

主备服务器的配置

主服务:192.168.128.128 备服务:192.168.128.129 虚拟IP:192.168.128.130

  1. 主服务器配置
    修改主nginx下/etc/keepalived/keepalived.conf文件
! Configuration File for keepalived

#全局配置
global_defs {
notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
    XXX@XXX.com
}
notification_email_from XXX@XXX.com  #指定发件人
#smtp_server XXX.smtp.com                             #指定smtp服务器地址
#smtp_connect_timeout 30                               #指定smtp连接超时时间
router_id LVS_DEVEL                                    #运行keepalived机器的一个标识
}

vrrp_instance VI_1 {
    state MASTER           #标示状态为MASTER 备份机为BACKUP
    interface eth0         #设置实例绑定的网卡
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
    }
    virtual_ipaddress {    #设置vip
        192.168.128.130       #可以多个虚拟IP,换行即可
    }
}
  1. 备服务器配置
    修改备nginx下/etc/keepalived/keepalived.conf文件

配置备nginx时需要注意:需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致

! Configuration File for keepalived

#全局配置
global_defs {
    notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
        XXX@XXX.com
    }
    notification_email_from XXX@XXX.com                 #指定发件人
    #smtp_server XXX.smtp.com                               #指定smtp服务器地址
    #smtp_connect_timeout 30                               #指定smtp连接超时时间
    router_id LVS_DEVEL                                    #运行keepalived机器的一个标识
}

vrrp_instance VI_1 {
    state BACKUP           #标示状态为MASTER 备份机为BACKUP
    interface eth0         #设置实例绑定的网卡
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 99            #MASTER权重要高于BACKUP 比如BACKUP为99
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
 }
    virtual_ipaddress {    #设置vip
    192.168.128.130       #可以多个虚拟IP,换行即可
}
}

至此,安装完成,开始测试!

完成测试


  1. 主备服务器都启动keepalived和nginx
service keepalived start
./nginx
  1. 初始状态
    查看主服务器上的eth0状态,可以看到虚拟IP已经绑定
/sbin/ip add show eth0

查看备服务器上的eth0状态

/sbin/ip add show eth0

3.主服务器宕机(通过服务器关机来模拟)192.168.128.128

>注意:主nginx恢复时一定要将nginx也启动(通常nginx启动要加在开机启动中),否则即使vip漂移到主nginx也无法访问。

这时候查看备服务器192.168.128.129的eth0,如下图,就会发现虚拟ip自动切换到了备服务器,访问正常。

到此,就一切搞定啦!





软件介绍


  1. 什么是负载均衡高可用

nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。

为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。

  1. 什么是keepalived

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

  1. 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. 注意

keepalived需要一个虚拟IP(vip),这个虚拟ip是需要服务器提供商支持的,在安装前要确保服务器是支持该项服务的。

  1. 原理

keepalived是采用vrrp协议来实现的,其实最重要的一点就是虚拟IP的应用。如何理解虚拟IP呢?下面通过举个例子来进行说明:

我们现在有两台服务器:192.168.1.5和192.168.1.6,两台服务器部署了一样的服务对外提供服务。 
如果主服务宕机,需要手动切换到192.168.1.6的备用服务上才能正常。这样做显然是不智能的。不符合迈动互联的智慧企业领导者的形象。

而keepalived就是为了解决这个问题。我们现在有一个虚拟IP:192.168.1.7。keepalived会把这个IP绑定到192.168.1.5上。外网直接访问192.168.1.7即可访问到192.168.1.5。当主服务宕机时,keepalived会把这个虚拟IP绑定到备服务器192.168.1.6上。这一切都是keepalived自动完成的。其实可以这样理解,keepalived是两台服务器的代理,哪个服务gameover,就把它踢出去,让其他的继续提供相同的服务。

安装准备


  1. 安装环境
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
  1. 上传软件
    将keepalived-1.2.15.tar.gz上传到服务器/root/下。

安装步骤(主备服务器都需要执行以下步骤)


  1. 解压并进入解压目录
cd /root
tar -zxvf keepalived-1.2.15.tar.gz
cd keepalived-1.2.15
  1. 执行配置命令
安装在/usr/local

./configure --prefix=/usr/local/keepalived
  1. 编译
make
  1. 安装
make install
  1. 拷贝执行文件
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  1. 将init.d文件拷贝到etc下,加入开机启动项
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
  1. 将keepalived文件拷贝到etc下,加入网卡配置
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  1. 创建keepalived文件夹
mkdir -p /etc/keepalived
  1. 将keepalived配置文件拷贝到etc下
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
  1. 添加可执行权限
chmod +x /etc/init.d/keepalived
  1. 加入开机启动项
chkconfig --add keepalived   添加时必须保证/etc/init.d/keepalived存在

chkconfig --list   添加完可查询系统服务是否存在
  1. 配置日志文件
1.将keepalived日志输出到local0:
    vi /etc/sysconfig/keepalived
    KEEPALIVED_OPTIONS="-D -d -S 0"

2.在/etc/rsyslog.conf里添加:
    local0.*  /var/log/keepalived.log
  1. 启动keepalived和rsyslog日志服务
keepalived

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

rsyslog

    service rsyslog start
    service rsyslog restart
  1. 打开防火墙的通讯地址
iptables -A INPUT -d 224.0.0.18 -j ACCEPT
/etc/rc.d/init.d/iptables save

到此,就算安装完成了,不过还需要配置一下:虚拟IP,和主备服务器。

主备服务器的配置

主服务:192.168.128.128 备服务:192.168.128.129 虚拟IP:192.168.128.130

  1. 主服务器配置
    修改主nginx下/etc/keepalived/keepalived.conf文件
! Configuration File for keepalived

#全局配置
global_defs {
notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
    XXX@XXX.com
}
notification_email_from XXX@XXX.com  #指定发件人
#smtp_server XXX.smtp.com                             #指定smtp服务器地址
#smtp_connect_timeout 30                               #指定smtp连接超时时间
router_id LVS_DEVEL                                    #运行keepalived机器的一个标识
}

vrrp_instance VI_1 {
    state MASTER           #标示状态为MASTER 备份机为BACKUP
    interface eth0         #设置实例绑定的网卡
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
    }
    virtual_ipaddress {    #设置vip
        192.168.128.130       #可以多个虚拟IP,换行即可
    }
}
  1. 备服务器配置
    修改备nginx下/etc/keepalived/keepalived.conf文件

配置备nginx时需要注意:需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致

! Configuration File for keepalived

#全局配置
global_defs {
    notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
        XXX@XXX.com
    }
    notification_email_from XXX@XXX.com                 #指定发件人
    #smtp_server XXX.smtp.com                               #指定smtp服务器地址
    #smtp_connect_timeout 30                               #指定smtp连接超时时间
    router_id LVS_DEVEL                                    #运行keepalived机器的一个标识
}

vrrp_instance VI_1 {
    state BACKUP           #标示状态为MASTER 备份机为BACKUP
    interface eth0         #设置实例绑定的网卡
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 99            #MASTER权重要高于BACKUP 比如BACKUP为99
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
 }
    virtual_ipaddress {    #设置vip
    192.168.128.130       #可以多个虚拟IP,换行即可
}
}

至此,安装完成,开始测试!

完成测试


  1. 主备服务器都启动keepalived和nginx
service keepalived start
./nginx
  1. 初始状态
    查看主服务器上的eth0状态,可以看到虚拟IP已经绑定
/sbin/ip add show eth0

查看备服务器上的eth0状态

/sbin/ip add show eth0

3.主服务器宕机(通过服务器关机来模拟)192.168.128.128

>注意:主nginx恢复时一定要将nginx也启动(通常nginx启动要加在开机启动中),否则即使vip漂移到主nginx也无法访问。

这时候查看备服务器192.168.128.129的eth0,如下图,就会发现虚拟ip自动切换到了备服务器,访问正常。

到此,就一切搞定啦!