提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
keepalived高可用
环境
环境:两台nginx需要通过keepalived做高可用
主:
192.168.6.48
备:
192.168.6.49
VIP:
192.168.6.58
一、keepalived是什么?
简介:
Keepalived 是一个用 C 语言编写的路由软件。这个项目的主要目标是为 Linux 系统和基于 Linux 的基础设施提供简单而强大的负载平衡和高可用性设施。负载平衡框架依赖于众所周知且广泛使用的Linux 虚拟服务器 (IPVS) 内核模块,提供第 4 层负载平衡。Keepalived 实现了一组检查器,以根据其健康状况动态和自适应地维护和管理负载平衡的服务器池。另一方面,高可用性是通过 VRRP实现的协议。VRRP 是路由器故障转移的基础。此外,Keepalived 实现了一组到 VRRP 有限状态机的钩子,提供低级和高速协议交互。为了提供最快的网络故障检测,Keepalived 实现了BFD协议。VRRP 状态转换可以考虑 BFD 提示来驱动快速状态转换。Keepalived 框架可以单独使用,也可以一起使用,以提供弹性基础架构。
二、安装并配置
1.源码包下载
二进制源码包下载地址: keepalived官方download地址
2.安装
将包上传至/data/software
#安装依赖
[root@mankel ~] yum install -y libnfnetlink-devel
[root@mankel ~] cd /data/software
[root@mankel software] tar -xvf keepalived-2.2.7.tar.gz
[root@mankel software] cd keepalived-2.2.7
#选择安装目录(可自定义)
[root@mankel keepalived-2.2.7] ./configure --prefix=/data/keepalived
[root@mankel keepalived-2.2.7] make && make install
3.编写配置文件(主)
#192.168.6.48
[root@mankel ~] mkdir /etc/keepalived
[root@mankel ~] cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@mankel ~] vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id nginx_master
}
vrrp_script check {
script "/data/script/chk_nginx.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 120
priority 100
advert_int 3
mcast_src_ip 192.168.6.48
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.6.58 dev ens160 label ens160:1
}
track_script {
check
}
}
#启动
[root@mankel ~] /data/keepalived/sbin/keepalived -f /etc/keepalived/keepalived.conf
#查看是否有VIP
[root@mankel ~] ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.6.48 netmask 255.255.255.0 broadcast 192.168.6.255
inet6 fe80::5bf5:f08c:e9fe:68a0 prefixlen 64 scopeid 0x20<link>
inet6 fe80::f9b4:e2ff:1bcd:1649 prefixlen 64 scopeid 0x20<link>
inet6 fe80::6a1d:12e0:bbff:1d43 prefixlen 64 scopeid 0x20<link>
ether 00:50:56:9b:5b:80 txqueuelen 1000 (Ethernet)
RX packets 7988711 bytes 645561335 (615.6 MiB)
RX errors 0 dropped 93 overruns 0 frame 0
TX packets 2179554 bytes 1056218418 (1007.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens160:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.6.58 netmask 255.255.255.255 broadcast 0.0.0.0
ether 00:50:56:9b:5b:80 txqueuelen 1000 (Ethernet)
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 12 bytes 8579 (8.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12 bytes 8579 (8.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4.编写配置文件(备)
#192.168.6.49
[root@mankel ~] mkdir /etc/keepalived
[root@mankel ~] cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@mankel ~] vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id nginx_master
}
vrrp_script check {
script "/data/script/chk_nginx.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 120
priority 80
advert_int 3
mcast_src_ip 192.168.6.49
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.6.58 dev ens160 label ens160:1
}
track_script {
check
}
}
#启动
[root@mankel ~] /data/keepalived/sbin/keepalived -f /etc/keepalived/keepalived.conf
#查看是否有VIP
[root@mankel ~] ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.6.49 netmask 255.255.255.0 broadcast 192.168.6.255
inet6 fe80::5bf5:f08c:e9fe:68a0 prefixlen 64 scopeid 0x20<link>
inet6 fe80::f9b4:e2ff:1bcd:1649 prefixlen 64 scopeid 0x20<link>
inet6 fe80::6a1d:12e0:bbff:1d43 prefixlen 64 scopeid 0x20<link>
ether 00:50:56:9b:61:6f txqueuelen 1000 (Ethernet)
RX packets 6240842 bytes 529353225 (504.8 MiB)
RX errors 0 dropped 305 overruns 0 frame 0
TX packets 727106 bytes 919279619 (876.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 54 bytes 21494 (20.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 54 bytes 21494 (20.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
5.检查脚本
#当发现nginx挂了之后,停止keepalived服务,使VIP漂移至可用nginx上
[root@mankel ~] vim /data/script/chk_nginx.sh
#!/bin/bash
A=`ps -Cnginx --no-header|wc -l`
if [ $A -eq 0 ]; then
killall -9 keepalived
fi
问题
1.缺少依赖
#漏了这一步
[root@mankel ~] yum install -y libnfnetlink-devel
2.keepalived关闭后VIP未释放
最简单的方法:
关闭keepalived服务,手动将主上的VIP给去掉,然后重启
[root@mankel ~] ip addr del 192.168.6.58 dev ens160:1