- 前提须知:nginx使用,keepalived与其搭配使用非常牛逼
- Keepalived和nginx放在同一个服务器,会有一个公用的虚拟ip,挂掉一个nginx则另一个nginx服务器继续撑着,还是用那个公用的虚拟ip
介绍
Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要防止服务器单点故障的问题,可以通过其与Nginx的配合实现web服务器端的高可用.
Keepalived以VRRP协议为实现基础,使用VRRP协议来实现高可用性(HA).VRRP(Virtual Router Redundacy Protocol)协议用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成一个设备,向外提供虚拟路由IP(一个或多个),如下图所示:
安装
第一步:安装keepalived依赖的包
yum install -y gcc
yum install -y openssl-devel
yum install -y libnl3-devel
yum install -y popt-devel
yum install -y iptables-devel
yum install -y libnfnetlink-devel
yum install -y psmisc
第二步:编译安装keepalived
- 将keepalived的安装包 上传到/usr/local/soft 目录下
cd /usr/local/soft
tar -zxvf keepalived-1.2.19.tar.gz -C /usr/local
cd /usr/local/keepalived-1.2.19
./configure --prefix=/usr/local/keepalived
make && make install
第三步:将 keepalived 安装成 Linux 系统服务
安装完成之后, 需要做一些工作复制默认配置文件到 默认路径
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cd /usr/local/keepalived-1.2.19
cp ./keepalived/etc/init.d/keepalived.init /etc/init.d/
chmod 755 /etc/init.d/keepalived.init
第四步:编写nginx检测脚本:
vi /etc/keepalived/nginx_check.sh
内容如下:
- 删干净后 编辑模式下 直接copy
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
赋予执行权限
chmod +x /etc/keepalived/nginx_check.sh
配置主从库
- 修改keepalived的Master配置文件:
vi /etc/keepalived/keepalived.conf
- 删干净后 编辑模式下 直接copy
- 四个地方需要改(细节)
- 1.
interface ens33
这里要通过ipaddr
查看,也有可能是ens32
,则要改回来 - 2.
unicast_src_ip 192.168.8.12
这里要改成当前服务器的ip(每个人不同) - 3.
priority 100
nginx主库才是100,其他nginx从库要把值给成低于100 - 4.
192.168.8.110 #虚拟ip配置完之后就用它访问
,这里的网段和其主从库的nginx服务器一样,最后一位随你配 ,这个为公用的虚拟ip(通过这个来访问)
! Configuration File for keepalived
global_defs {
router_id edt ##路由器标志
}
# 集群资源监控,组合track_script进行
vrrp_script check_haproxy {
script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径
interval 2 #检测时间间隔
weight -20 #条件成立 权重减20
}
vrrp_instance PROXY {
# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
state MASTER
# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
interface ens33
# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
virtual_router_id 80
# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
# 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
# 主节点时,内容为:
unicast_src_ip 192.168.8.12
# 设置优先级,确保主节点的优先级高过备用节点
priority 100
# 用于设定主备节点间同步检查时间间隔
advert_int 2
# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
authentication {
auth_type PASS
auth_pass edt
}
# 集群资源监控,组合vrrp_script进行
track_script {
check_haproxy
}
# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
# 当状态切换到BACKUP时,此IP会自动从系统中删除
# 可以通过命令ip add查看切换后的状态
virtual_ipaddress {
192.168.8.110 #虚拟ip配置完之后就用它访问
}
}
开启keepalived
- 随意地方输入以下命令即可
keepalived