keepalived实现ubuntu22服务器高可用
零、keepalived架构和原理1、什么是keepalivedKeepalived 是一款基于VRRPVirtual Router Redundancy Protocol虚拟路由冗余协议 实现的高可用HA, High Availability解决方案。它最初是为 LVSLinux Virtual Server负载均衡软件设计的用来监控集群中各个服务节点的状态但因为其轻量、稳定现在常用于Nginx、HAProxy等服务的双机热备高可用。Keepalived 的核心工作可以总结为两件事健康检查Health Checking和故障转移Failover。核心协议VRRP 的运作机制VRRP 协议是为了解决静态路由单点故障而设计的。Keepalived 完美的实现了这个协议2、keepalived技术原理虚拟 IPVIP在对外提供服务时多台 Keepalived 服务器会虚拟出一个共同的 IP即 VIP。客户端所有的请求都直接访问这个 VIP。2.1、主备竞选Master/Backup集群中的节点通过配置的优先级Priority来决定身份。优先级最高的节点成为 Master主节点其余为 Backup备节点。2.2、心跳机制Master 节点会定期默认每秒向局域网内发送 VRRP 组播报文组播地址通常为 224.0.0.18通告自己还活着。2.3、故障接管ARP 欺骗当 Backup 节点在连续 3 个周期内没有收到 Master 的心跳包就会认为 Master 宕机。此时优先级最高的 Backup 会自动升级为 Master并向局域网发送 免费 ARP 报文Gratuitous ARP通知交换机更新 MAC 地址映射将流向 VIP 的流量瞬间引向自己。整个切换过程通常在数秒内完成对客户端几乎透明。一、virtualbox环境准备主机名IP地址系统类型网卡名称网卡类型混杂模式keepalived-master172.16.10.11VIP:172.16.10.10Ubuntu 22.04.5 LTSenp0s9内部网络(intnet2)拒绝keepalived-backup172.16.10.12 VIP:172.16.10.10Ubuntu 22.04.5 LTSenp0s9内部网络(intnet2)拒绝client172.16.10.1Ubuntu 22.04.5 LTSenp0s9内部网络(intnet2)拒绝二、安装配置keepalived1、安装keepalivedsudoapt-getinstallkeepalived#在keepalived-master、keeepalived-backup两个节点执行安装命令修改配置文件/etc/keepalived/keepalived.conf 若没有则可以直接创建2、在keepalived-master节点配置为主节点sudonano/etc/keepalived/keepalived.conf vrrp_instance VI_1{state MASTER# 角色主节点interface enp0s9# 替换为你的网卡名virtual_router_id1# 虚拟路由ID主备必须一致 (1-255)priority100# 优先级主节点要高于备节点advert_int1# 心跳检测间隔秒authentication{auth_type PASS auth_pass123456# 认证密码主备必须一致}virtual_ipaddress{172.16.10.10/24# 虚拟IPVIP替换为你的VIP}}3、在keepalived-backup节点配置为主节点sudonano/etc/keepalived/keepalived.conf vrrp_instance VI_1{state MASTER# 角色备节点interface enp0s9# 替换为你的网卡名virtual_router_id1# 虚拟路由ID主备必须一致 (1-255)priority90# 优先级主节点要高于备节点advert_int1# 心跳检测间隔秒authentication{auth_type PASS auth_pass123456# 认证密码主备必须一致}virtual_ipaddress{172.16.10.10/24# 虚拟IPVIP替换为你的VIP}}三、keepalived主备ping测试1、keepalived-master主节点生效在keepalived-master主节点查看虚拟地址是否生效可以看到在主节点现有网卡的配置下生成了新的virtual IP:172.16.10.10/24。ips s|grepenp0s9#主备节点同时查看网卡地址在172.16.140.1上ping 172.16.10.10然后在keepalived-master和keepalived-backup上面使用tcpdump抓取icmp数据包可以看到在主节点抓到了icmp的数据包备节点没有抓到。ping-c5172.16.10.10#client主机执行此命令sudotcpdump-ienp0s9 icmp-nv# 主备节点enp0s9网卡下抓取icmp数据包2、keepalived-backup备节点生效keepalived-master节点故障后VIP:172.16.10.10漂移到keepalived-backup节点继续使用tcpdump抓包观察现在是备节点在响应主机client发出的请求。ips s|grepenp0s9#主备节点同时查看网卡地址ping-c5172.16.10.10#client主机执行此命令sudotcpdump-ienp0s9 icmp-nv# 主备节点enp0s9网卡下抓取icmp数据包四、在keepalived节点之前添加一台防火墙进行测试场景若在两个keepalived节点之前加一台防火墙此时要配置访问白名单策略要如何配置呢 是填写真实目标IP地址、还是VIP、还是真实IP和VIP都添加呢1、virtualbox环境准备主机名IP地址系统类型网卡名称网卡类型混杂模式keepalived-master172.16.10.11VIP172.16.10.10Ubuntu 22.04.5 LTSenp0s9内部网络(intnet2)拒绝keepalived-backup172.16.10.12VIP172.16.10.10Ubuntu 22.04.5 LTSenp0s9内部网络(intnet2)拒绝client172.16.10.1Ubuntu 22.04.5 LTSenp0s9内部网络(intnet1)拒绝iptables透明网桥无需配置IP地址Ubuntu 22.04.5 LTSenp0s9、enp0s10内部网络(intnet2)、内部网络(intnet2)全部允许2、主机iptables配置二层透明网桥2.1、安装网桥管理工具和iptables持久化工具sudoaptinstallbridge-utils iptables iptables-persistent#bridge-utils 提供网桥管理工具iptables-persistent 用于持久化防火墙规则2.2、创建网桥# 1. 创建网桥sudobrctl addbr br0# 2. 将两块网卡如enp0s8和enp0s9加入网桥# 请将下面的接口名替换为你系统实际的名称sudobrctl addif br0 enp0s8sudobrctl addif br0 enp0s9# 3. 启用网桥和网卡sudoiplinksetbr0 upsudoiplinksetenp0s8 upsudoiplinksetenp0s9 up# 4、将网卡、网桥配置持久化sudonano/etc/netplan/00-network.yaml network: version:2renderer: networkd ethernets: enp0s9: dhcp4: no enp0s10: dhcp4: no bridges: br0: interfaces:[enp0s9,enp0s10]dhcp4: no parameters: stp:false2.3、启用桥接流量防火墙过滤1、# 手动加载内核模块 br_netfiltersudomodprobe br_netfilter#此命令是临时生效系统重启后需要重新执行此命令2、# 启用iptables对桥接流量的处理sudosysctlnet.bridge.bridge-nf-call-iptables1# 为了让规则永久生效可以将以下配置写入 /etc/sysctl.conf#值 0默认网桥二层转发流量跳过 iptables防火墙不拦截、不记录#值 1所有经过网桥转发的二层数据包强制送入 iptables 过滤链FORWARD防火墙规则才能拦截 / 放行 ICMP、TCP、UDP 流量。3、#实时加载sysctl-p3、ping测试3.1、iptables节点配置防火墙规则#修改FORWARD链的默认处置动作为DROPsudoiptables-PFORWARD DROP#添加client访问keepalived-master和keepalived-backup的策略sudoiptables-AFORWARD-s172.16.10.10-d172.16.10.1-picmp-jACCEPTsudoiptables-AFORWARD-s172.16.10.1-d172.16.10.10-picmp-jACCEPT#规则持久化sudonetfilter-persistent save#查看防火墙规则sudoiptables-nvL-tfilter3.2、ping VIP测试#client节点上执行ping172.16.10.10#keepalived-master、keepalived-backup节点执行抓包sudotcpdump-ienp0s9 icmp-nv#iptables 网桥br0下抓包sudotcpdump-ibr0 icmp-nv结果主机是否抓到数据包clientN/Aiptables是keepalived-master是keepalived-backup否3.3、ping 真实IP测试#client节点上执行ping172.16.10.11#keepalived-master、keepalived-backup节点执行抓取icmp但是不抓取vrrp协议sudotcpdump-ienp0s9 icmp and not vrrp-nv#iptables 网桥br0下抓包sudotcpdump-ibr0 icmp-nv结果主机是否抓到数据包clientN/Aiptables是keepalived-master否keepalived-backup否3.4、结论根据iptables策略和tcpdump抓包结果来看二层透明防火墙只需要开通针对VIP的白名单策略即可。参考1、virtualbox 网卡“内部网络”的三种模式内部网络内部网络无法与主机和互联网通信。拒绝网卡只接收目标 MAC 为本网卡 MAC的单播、本机广播其他 MAC 报文直接丢弃。。允许虚拟电脑虚拟机内操作系统只能接收发给自身的单播、广播同广播域其他主机的单播报文不会递交给虚拟机内核。全部允许网卡把链路上所有二层报文所有单播、组播、广播全部转发给虚拟机操作系统内核。