keepalived配置(lvs+NAT+直连+TUN隧道+服务切换企业微信&邮件告警)

keepalived相关说明

Keepalived是基于vrrp协议的一款高可用软件。Keepailived有一台主服务器和多台备份服务器,在主服务器和备份服务器上面部署相同的服务配置,使用一个虚拟IP地址对外提供服务,当主服务器出现故障时,虚拟IP地址会自动漂移到备份服务器。

VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议),VRRP是为了解决静态路由的高可用。VRRP的基本架构
虚拟路由器由多个路由器组成,每个路由器都有各自的IP和共同的VRID(0-255),其中一个VRRP路由器通过竞选成为MASTER,占有VIP,对外提供路由服务,其他成为BACKUP,MASTER以IP组播(组播地址:224.0.0.18)形式发送VRRP协议包,与BACKUP保持心跳连接,若MASTER不可用(或BACKUP接收不到VRRP协议包),则BACKUP通过竞选产生新的MASTER并继续对外提供路由服务,从而实现高可用。

vrrp协议的相关术语:

    虚拟路由器:Virtual Router 
    虚拟路由器标识:VRID(0-255)
    物理路由器:
        master  :主设备
        backup  :备用设备
        priority:优先级
    VIP:Virtual IP 
    VMAC:Virutal MAC (00-00-5e-00-01-VRID)
    GraciousARP

安全认证:

简单字符认证、HMAC机制,只对信息做认证
MD5(leepalived不支持)

工作模式:

主/备:单虚拟路径器;
主/主:主/备(虚拟路径器),备/主(虚拟路径器)

工作类型:

抢占式:当出现比现有主服务器优先级高的服务器时,会发送通告抢占角色成为主服务器
非抢占式:

keepalived

核心组件

        vrrp stack:vrrp协议的实现
        ipvs wrapper:为集群内的所有节点生成IPVS规则
        checkers:对IPVS集群的各RS做健康状态检测
        控制组件:配置文件分析器,用来实现配置文件的分析和加载
        IO复用器
        内存管理组件,用来管理keepalived高可用是的内存管理

注意:

  1. 各节点时间必须同步
  2. 确保各节点的用于集群服务的接口支持MULTICAST通信(组播)

实验部分

实验任务
1、使用keepalived实现NAT模式的负载均衡集群的部署
2、使用keepalived实现DR模式的负载均衡集群的部署
3、使用keepalived实现TUN模式的负载均衡集群的部署
4、优化keepalived集群部署,实现keepalived无法连接到真实服务时,失去VIP占有能力
5、优化keepalived配置,实现VRRP状态变化时,通过邮件通知系统管理员
6、 优化keepalived配置,实现真实服务器状态变化时,通过微信消息通知系统管理员

环境准备

组网

主机 内网ip mac 外网ip mac
lvs1 ens34:172.16.0.100/24 mac:00:0c:29:52:6e:9f ens33:10.0.0.100/24 mac:00:0c:29:52:6e:8b
lvs2 ens34:172.16.0.101/24 mac:00:0c:29:ad:07:71 ens33:10.0.0.101/24 mac:00:0c:29:ad:07:5d
real_server1 ens34:172.16.0.102/24 mac:00:0c:29:60:f9:ef ens33:10.0.0.102/24 mac:00:0c:29:60:f9:db
real_server2 ens34:172.16.0.103/24 mac:00:0c:29:a7:98:f0 ens33:10.0.0.103/24 mac:00:0c:29:a7:98:dc
客户端 10.0.0.1/24 mac:00:50:56:c0:00:08
#关闭防火墙
[root@lvs1 ~]# systemctl stop firewalld
#设置selinux模式为permissive
[root@lvs1 ~]# setenforce 0
#其余主机做同样操作

ipvsadm用法

语法格式:ipvsadm [参数]
-A/--add-service	添加一条新的虚拟服务
-E/--edit-service	编辑虚拟服务
-D/--delete-service	删除虚拟服务
-C/--clear	清除所有的虚拟服务规则
-R/--restore	恢复虚拟服务规则
-S/--save	保存虚拟服务器规则
-a/--add-server	在一个虚拟服务中添加一个新的真实服务器
-e/--edit-server	编辑某个真实服务器
-d/--delete-server	删除某个真实服务器
-L/-l/--list	显示内核中的虚拟服务规则
-Z/--zero	将转发消息的统计清零
--set tcp/tcpfin/udp	配置三个超时时间(tcp/tcpfin/udp)
--start-daemon	启动同步守护进程。
--stop-daemon	停止同步守护进程 
-h/--help	显示帮助信息
-t/--tcp-service service-address	TCP协议的虚拟服务
-u/--udp-service service-address	UDP协议的虚拟服务
-f/--fwmark-service fwmark	说明是经过iptables 标记过的服务类型。
-s/--scheduler scheduler	使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.
-p/--persistent [timeout]	持久稳固的服务。
-M/--netmask	指定客户地址的子网掩码
-r/--real-serverserver-address	真实的服务器
-g/--gatewaying	指定LVS 的工作模式为直接路由模式
-i/--ipip	指定LVS 的工作模式为隧道模式 
-m/--masquerading	指定LVS 的工作模式为NAT 模式 
-w/--weightweight	真实服务器的权值 
--mcast-interface interface	指定组播的同步接口 
-c/--connection	显示ipvs中目前存在的连接
-6:	如果fwmark用的是ipv6地址需要指定此选项。

tcpdump用法

tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ]
        [ -s snaplen ] [ -w file ] [ expression ]

抓包选项:
-c:指定要抓取的包数量。注意,是最终要获取这么多个包。例如,指定"-c 10"将获取10个包,但可能已经处理了100个包,只不过只有10个包是满足条件的包。
-i interface:指定tcpdump需要监听的接口。若未指定该选项,将从系统接口列表中搜寻编号最小的已配置好的接口(不包括loopback接口,要抓取loopback接口使用tcpdump -i lo),
            :一旦找到第一个符合条件的接口,搜寻马上结束。可以使用'any'关键字表示所有网络接口。
-n:对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。
-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名。
-N:不打印出host的域名部分。例如tcpdump将会打印'nic'而不是'nic.ddn.mil'。
-P:指定要抓取的包是流入还是流出的包。可以给定的值为"in""out""inout",默认为"inout"。
-s len:设置tcpdump的数据包抓取长度为len,如果不设置默认将会是65535字节。对于要抓取的数据包较大时,长度设置不够可能会产生包截断,若出现包截断,
      :输出行中会出现"[|proto]"的标志(proto实际会显示为协议名)。但是抓取len越长,包的处理时间越长,并且会减少tcpdump可缓存的数据包的数量,
      :从而会导致数据包的丢失,所以在能抓取我们想要的包的前提下,抓取长度越小越好。

输出选项:
-e:输出的每行中都将包括数据链路层头部信息,例如源MAC和目标MAC。
-q:快速打印输出。即打印很少的协议相关信息,从而输出行都比较简短。
-X:输出包的头部数据,会以16进制和ASCII两种方式同时输出。
-XX:输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细。
-v:当分析和打印的时候,产生详细的输出。
-vv:产生比-v更详细的输出。
-vvv:产生比-vv更详细的输出。

其他功能性选项:
-D:列出可用于抓包的接口。将会列出接口的数值编号和接口名,它们都可以用于"-i"后。
-F:从文件中读取抓包的表达式。若使用该选项,则命令行中给定的其他表达式都将失效。
-w:将抓包数据输出到文件中而不是标准输出。可以同时配合"-G time"选项使得输出文件每time秒就自动切换到另一个文件。可通过"-r"选项载入这些文件以进行分析和打印。
-r:从给定的数据包文件中读取数据。使用"-"表示从标准输入中读取。

安装软件:

#lvs1软件安装          keepalived是一个管理工具,通过操作ipvsadm对linux内核进行相应操作
[root@lvs1 ~]# yum -y install ipvsadm
[root@lvs1 ~]# yum install -y gcc.x86_64
[root@lvs1 ~]# yum install -y openssl-devel.x86_64
[root@lvs1 ~]# yum install -y wget
[root@lvs1 ~]# yum install -y tcpdump
[root@lvs1 ~]# wget https://www.keepalived.org/software/keepalived-2.0.18.tar.gz      #下载源码包
[root@lvs1 ~]# tar -zxvf  keepalived-2.0.18.tar.gz        #解压源码包
[root@lvs1 ~]# cd keepalived-2.0.18/
[root@lvs1 keepalived-2.0.18]# ls
aclocal.m4  AUTHOR       build_setup  compile    configure.ac  COPYING  doc      INSTALL     keepalived          lib          Makefile.in  README.md  TODO
ar-lib      bin_install  ChangeLog    configure  CONTRIBUTORS  depcomp  genhash  install-sh  keepalived.spec.in  Makefile.am  missing      snap
[root@lvs1 keepalived-2.0.18]# ./configure --prefix=/    --datarootdir=/usr/local --pdfdir=/usr/local/share/keepalived --with-systemdsystemunitdir=/usr/lib/systemd/system
[root@lvs1 keepalived-2.0.18]# make install

  
#lvs2操作相同  

real_server1和real_server2安装httpd和抓包软件
[root@real_server1 ~]# yum -y install httpd
[root@real_server1 ~]# yum -y install tcpdump
[root@real_server2 ~]# yum -y install httpd
[root@real_server2   ~]# yum -y install tcpdump


NAT模式创建

nat模式说明

NAT 工作模式
(a)当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c). IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
(d). POSTROUTING链通过选路,将数据包发送给Real Server
(e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
(f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP(a)当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c). IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
(d). POSTROUTING链通过选路,将数据包发送给Real Server
(e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
(f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

配置环节

配置lvs中的keepalived配置文件:

[root@lvs1 ~]# cat /etc/keepalived/keepalived.conf
! 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 LV1     #不能相同
   vrrp_skip_check_adv_addr
   #vrrp_strict                 #将严格遵守vrrp协议这一项关闭,否则会自动创建防火墙规则
   vrrp_iptables     #加入这条配置,不添加任何iptables规则
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
   
    state MASTER        #设置成主节点
    interface ens33     #指定vip的绑定网卡
    virtual_router_id 51    #设置虚拟路由id,lvs1和lvs2必须相同
    priority 100      #设置vrrp的优先级为100
    advert_int 1     #组播包发送间隔
    authentication {
   
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
   
        10.0.0.150        #指定vip
    }
}

virtual_server 10.0.0.150 80 {
       #创建虚拟服务器ip与真实服务器的映射关系
    delay_loop 6
    lb_algo rr
    lb_kind NAT             #设置模式为nat模式
    persistence_timeout 50
    protocol TCP

    real_server 172.16.0.102 80 {
   
        weight 1
        HTTP_GET {
          #设置检测模式为http,检测真实服务器的web的根路径,如果返回码为200则为正常
            url {
   
              path /
              state_code 200
            }
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    real_server 172.16.0.103 80 {
   
        weight 1
        HTTP_GET {
   
            url {
   
              path /
              state_code 200
            }
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
}

[root@lvs2 ~]# cat /etc/keepalived/keepalived.conf 
! 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 LVS2
   vrrp_skip_check_adv_addr
   #vrrp_strict                 #将严格遵守vrrp协议这一项关闭,否则会自动创建防火墙规则
   vrrp_iptables     #加入这条配置,不添加任何iptables规则
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
   
    state BACKUP      #设置成备节点
    interface ens33     #指定vip的绑定网卡
    virtual_router_id 51    #设置虚拟路由id,lvs1和lvs2必须相同
    priority 90      #设置vrrp的优先级为90
    advert_int 1    #组播包发送间隔
    authentication {
   
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
   
        10.0.0.150        #指定vip
    }
}

virtual_server 10.0.0.150 80 {
       #创建虚拟服务器ip与真实服务器的映射关系
    delay_loop 6
    lb_algo rr
    lb_kind NAT             #设置模式为nat模式
    persistence_timeout 50
    protocol TCP

    real_server 172.16.0.102 80 {
   
        weight 1
        HTTP_GET {
          #设置检测模式为http,检测真实服务器的web的根路径,如果返回码为200则为正常
            url {
   
              path /
              state_code 200
            }
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    real_server 172.16.0.103 80 {
   
        weight 1
        HTTP_GET {
   
            url {
   
              path /
              state_code 200
            }
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值