nginx+keepalived高可用方案
什么是keepalived
Keepalived一个基于VRRP 协议来实现的 LVS
服务高可用方案,可以利用其来解决单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,
备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
keepalived 原理
Keepalived 是以 VRRP 协议为实现基础的,VRRP全称Virtual Router Redundancy
Protocol,即虚拟路由冗余协议。虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master 和多个
backup,master 上面有一个对外提供服务的 VIP(Virtual IP
Address)(该路由器所在局域网内其他机器的默认路由为该 vip),master 会发组播,当 backup 收不到 vrrp
包时就认为 master 宕掉了,这时就需要根据 VRRP 的优先级来选举一个 backup 当
master。这样的话就可以保证路由器的高可用了。keepalived 主要有三个模块,分别是core、check 和 vrrp。core
模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check
负责健康检查,包括常见的各种检查方式。vrrp 模块是来实现 VRRP 协议的。
示例:
nginx Master : 172.16.5.155
nginx Backup: 172.16.5.156
1、下载nginx安装包
nginx的官方网站
(1) 找到对应的安装包,右击复制链接地址
wget http://nginx.org/download/nginx-1.12.2.tar.gz
2、解压此安装包
tar -zxvf nginx-1.12.2.tar.gz -C /usr/local/
3、切换到nginx的目录下进行配置
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-pcre --with-stream
4、编译及安装
make && make install
注意:以上配置nginx Master 与 nginx Backup需要配置相同
5、配置环境变量
cat /etc/profile
内容如下:
export PATH=$PATH:/usr/local/nginx/sbin ## 在文件的最下方进行添加此内容
变量生效
source /etc/profile
安装keepalived
yum -y install keepalived
查看及配置keepalived的主配置文件
cat /etc/keepalived/keepalived.conf
内容如下:
! Configuration File for keepalived
global_defs {
notification_email {
admin@qq.com # 这个设置自己的邮箱地址
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 172.16.5.156
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state Master
interface ens192
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.33/24
}
}
注意:以上安装keepalived的配置主机和备机配置需相同,但/etc/keepalived/keepalived.conf的内容小作改动;
如下是nginx Backup高可用文件的内容
! Configuration File for keepalived
global_defs {
notification_email {
admin@qq.com # 这个设置自己的邮箱地址
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 172.16.5.155
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state Backup
interface ens192
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.33/24
}
}