-
yum安装
yum install -y keepalived
配置文件位置 /etc/keepalived/keepalived.conf
这总方式安装的keepalived版本比较旧,centos7里面默认是1.3.5,是2017年的版本。需要新的版本可以考虑编译安装
查看yum安装默认的版本[root@vm200 ~]# yum info keepalived Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.jlu.edu.cn * extras: mirrors.jlu.edu.cn * updates: mirrors.jlu.edu.cn Available Packages Name : keepalived Arch : x86_64 Version : 1.3.5 Release : 19.el7 Size : 332 k Repo : base/7/x86_64 Summary : Load balancer and high availability service URL : http://www.keepalived.org/ License : GPLv2+ Description : Keepalived provides simple and robust facilities for load balancing : and high availability. The load balancing framework relies on the : well-known and widely used Linux Virtual Server (IPVS) kernel module : providing layer-4 (transport layer) load balancing. Keepalived : implements a set of checkers to dynamically and adaptively maintain : and manage a load balanced server pool according their health. : Keepalived also implements the Virtual Router Redundancy Protocol : (VRRPv2) to achieve high availability with director failover.
-
编译安装
-
安装依赖
yum -y install make gcc openssl-devel libnfnetlink-devel libnl3-devel net-snmp-devel
-
下载离线包
https://www.keepalived.org/software/keepalived-2.2.8.tar.gz -
解压
tar -zxvf keepalived-2.2.8.tar.gz -
配置
#打开keepalived目录 cd keepalived-2.2.8 #配置,使用默认安装路径,如果要制定安装路径 ./configure --prefix=/usr/local/keepalived #默认安装是安装在当前目录下面的 keepalived目录下面的 ./configure
-
编译安装
make && make install
-
复制文件
#复制可执行文件 cp keepalived/etc/init.d/keepalived /etc/init.d #复制配置,里面指定启动的配置文件 # KEEPALIVED_OPTIONS="-D" -f指定配置文件,默认是 /etc/keepalived/keepalived #KEEPALIVED_OPTIONS="-f /etc/keepalived/keepalived.conf.sample -D -d -S 0" cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
-
日志文件位置 /var/log/messages
-
配置文件位置 /etc/keepalived/keepalived
! Configuration File for keepalived global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id vm200 #一般写主机名 } vrrp_instance VI_101.250 { state MASTER #备机写BACKIP interface ens33 #网卡名字 virtual_router_id 166 #备机和主机的虚拟路由ID要一样 priority 100 #优先级备机应该比主低 advert_int 1 #发送arp包间隔 authentication { auth_type PASS #授权账号密码主备相同 auth_pass 123456 } virtual_ipaddress { 192.168.101.250 #指定VIP,可以指定多个,一个一行,可以指定当前能访问的通的任意子网IP } }
-
启动服务
systemctl start keepalived
-
实测 通过 VIP(192.168.101.250)可以访问到 vm200,如果vm200的keepalived停了以后,VIP会飘向vm202。
用ifconfig查不到虚拟IP
需要使用 ip addr 才行[root@vm200 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:c0:31:ff brd ff:ff:ff:ff:ff:ff inet 192.168.100.200/16 brd 192.168.255.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.101.250/32 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::f33f:4ccc:7ab4:1a9c/64 scope link noprefixroute valid_lft forever preferred_lft forever inet6 fe80::a1cd:819c:9969:7130/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever
-
-
VIP 虚拟IP
-
VRRP 虚拟路由冗余协议
-
kill -9 VIP 可能不回收问题
keepalived的 被kill -9 的时候可能会VIP没有回收,据说pkill keepalived 可以避免
-
抢占式和非抢占式
keepalived默认的工作模式是抢占式的,主节点上线以后优先级比较高,会强制抢占主,可以设置为非抢占模式。
使用非抢占式配置
- 所有节点指定nopreempt(最低优先级的可以不指定)
- 所有节点都state都要写成BACKUP
vrrp_instance VI_1 { state MASTER #备机写BACKIP interface ens33 #网卡名字 virtual_router_id 166 #备机和主机的虚拟路由ID要一样 priority 100 #优先级备机应该比主低 advert_int 1 #发送arp包间隔 nopreempt #非抢占模式 #preempt_delay 300 #抢占间隔 authentication { auth_type PASS #授权账号密码主备相同 auth_pass 123456 } virtual_ipaddress { 192.168.100.250 #指定VIP,可以指定多个,一个一行 } }
-
keepalived双活主机
双主单活的情况下两台服务器只有一个VIP,同时只有一台对外可见。
我们可以通2个VIP互为主备,来实现双主双活。DNS上把两个VIP都配置上。
双活必须要是抢占式,如果不是抢占式,那么第一台起来的服务器会获取所有VIP。VIP1:192.168.101.250
VIP2:192.168.101.251主机配置
vrrp_instance VI_101.250 { state MASTER #非抢占模式都是BACKUP interface ens33 #网卡名字 virtual_router_id 166 #备机和主机的虚拟路由ID要一样 priority 100 #优先级备机应该比主低 advert_int 1 #发送arp包间隔 authentication { auth_type PASS #授权账号密码主备相同 auth_pass 123456 } virtual_ipaddress { 192.168.101.250 #指定VIP,可以指定多个,一个一行,可以指定当前能访问的通的任意子网IP } } vrrp_instance VI_101.251 { state BACKUP #非抢占模式都是BACKUP interface ens33 #网卡名字 virtual_router_id 167 #备机和主机的虚拟路由ID要一样 priority 80 #优先级备机应该比主低 advert_int 1 #发送arp包间隔 authentication { auth_type PASS #授权账号密码主备相同 auth_pass 123456 } virtual_ipaddress { 192.168.101.251 #指定VIP,可以指定多个,一个一行,可以指定当前能访问的通的任意子网IP } }
主机B配置
vrrp_instance VI_101.250 { state BACKUP #非抢占模式都是BACKUP interface ens33 #网卡名字 virtual_router_id 166 #备机和主机的虚拟路由ID要一样 priority 80 #优先级备机应该比主低 advert_int 1 #发送arp包间隔 authentication { auth_type PASS #授权账号密码主备相同 auth_pass 123456 } virtual_ipaddress { 192.168.101.250 #指定VIP,可以指定多个,一个一行,可以指定当前能访问的通的任意子网IP } } vrrp_instance VI_101.251 { state MASTER #非抢占模式都是BACKUP interface ens33 #网卡名字 virtual_router_id 167 #备机和主机的虚拟路由ID要一样 priority 100 #优先级备机应该比主低 advert_int 1 #发送arp包间隔 authentication { auth_type PASS #授权账号密码主备相同 auth_pass 123456 } virtual_ipaddress { 192.168.101.251 #指定VIP,可以指定多个,一个一行,可以指定当前能访问的通的任意子网IP } }
-
LVS 也可以解决类似nginx这种不支持高可用的软件的单点故障问题
-
默认配置文件里面 virtual_server 部分是设置 虚拟主机和 真实主机映射的,效果类似LVS(一个IP对应多台真实服务器器)。如果是为了用keepalived给别的程序保活,那么可以把virtual_server相关的都删掉。
-
keepalived用在哪些场景
- keepalived可以给任意软件做保活处理。通过检查脚本查查程序是否活着,如果死了可以直接在脚本中启动指定程序。
- keepalive+VIP 可以解决那些原生不支持高可用,但是又需要高可用的情况,比如nginx