keepalived环境配置及使用(1)
keepalived简介
keepalived起初是为LVS设计的,用来监控集群系统中各个服务节点的状态。一旦检测到故障节点,自动将故障节点剔除,故障节点恢复后自动将此节点重新加入到服务集群中。全部自动完成,无需人工干预。后来又加入了VRRP(Virtual Router Redundancy Protocol 虚拟路由器冗余协议)的功能,避免IP单点故障。
环境配置
使用两台虚拟机做测试环境,ip分别为:192.168.0.101,192.168.0.107
安装并配置操作系统,系统统一为centos7
配置网卡,修改 /etc/sysconfig/network-scripts/ifcfg-xxx 文件xxx为网卡名称。
重启网卡
1 | ifdown xxx |
查看ip配置
1 | ip addr show |
修改hostname
1 | hostnamectl set-hostname xxx |
关闭SELinux,启用ip转发
1 | vi /etc/selinux/config ##将SELINUX=enforcing改为SELINUX=disabled |
1 | echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf |
安装nginx作为测试的真实服务(备用)
1 | sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm |
修改防火墙策略
开放80端口,访问nginx
1 | sudo firewall-cmd --zone=public --add-port=80/tcp --permanent |
开放vrrp组播
1 | firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface xxx --destination 224.0.0.18 --protocol vrrp -j ACCEPT |
- xxx为网卡名称;防火墙不开放vrrp组播会导致脑裂,两个节点都能获取VIP,为了简单可以先关闭防火墙。
同步服务器时间
1 | 安装ntp服务 |
安装keepalived
1 | sudo yum install keepalived |
配置及测试
修改节点1
在节点1,修改文件/etc/keepalived/keepalived.conf,内容如下:
1 | vrrp_instance VI_1 { ##定义一个虚拟路由器 |
启动keepalived
1 | sudo systemctl start keepalived.service |
查看ip信息
ip addr show ens33
1 | 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 |
可以看到192.168.0.120这个vip地址已经出现在ens33网卡上,访问192.168.0.120即可访问到107上的nginx服务
配置节点2
节点2修改配置,保证两个节点 priority 不相同,virtual_router_id 必须相同,启动节点2的keepalived,查看ip信息。
1 | 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 |
101上由于priority值低于107所以节点进入slave模式。
切换验证
107上执行systemctl stop keepalived.service关闭上keepalived服务,分别查看107和101ip信息可以发现ip120自动切换到了101上,重启107的keepalived服务后,又切换回107上,ip地址实现了漂移。
问题
- 此时的配置只能保证在主节点关闭服务后ip漂移,如果nginx服务意外关闭,ip地址并不能切换。
- 主从节点只能一个对外提供服务不能提供负载,浪费资源。
下次主要讲解如果解决这两个问题。