keepalived

今天楼主面试就被问到了keepalived高可用,由于之前工作没有接触,方才上了博客看一看

官方介绍:Keepalived 是一个用 C 编写的路由软件。该项目的主要目标是为 Linux 系统和基于 Linux 的基础设施提供简单而强大的负载平衡和高可用性设施。 负载均衡框架依赖于众所周知且广泛使用的Linux 虚拟服务器 (IPVS)内核模块,提供第 4 层负载均衡。Keepalived 实现了一组检查器,以根据其健康状况动态和自适应地维护和管理负载平衡的服务器池。另一方面,高可用性是通过VRRP实现的 协议。VRRP 是路由器故障转移的基础。此外,Keepalived 为 VRRP 有限状态机实现了一组钩子,提供低级和高速协议交互。为了提供最快的网络故障检测,Keepalived 实现了BFD协议。VRRP 状态转换可以考虑 BFD 提示来驱动快速状态转换。Keepalived 框架可以单独使用,也可以一起使用,以提供弹性基础设施。

Keepalived是高可用解决方案软件,高可用是主备意思;

Master --主上浮有资源(vip)            Backup
            发广播探测主服务是否存在  
    <-----------------------------------------
            如果主存活,则主会回应  
     ----------------------------------------->
        后面一直重复这个动作
    <-----------------------------------------
     ----------------------------------------->
    当从服务器发广播时,主服务器没有回应,Backup会去抢主服务器的资源,然后将自己切换为主
    <-----------------------------------------

 当主服务器故障恢复后,主服务会向组id里探测成员是否存在;
      再探测他的状态(他是backup还是master)'
          当backup收到master主服务器的探测后,backup再向master发广播,
          master回应backup,我存活,这时backup会释放资源(由master转换为backup)给master
     ----------------------------------------->

这里采用vrrp协议:专门用来做高可用

keepalived官方网站:www.keepalived.org

keepalived搭建方法:Centos7   yum安装

模拟的环境:

keepalived 浮动的VIP        192.1.1.100

keepalived + lvs  master    192.1.1.199
    
keepalived + lvs  backup    192.1.1.200

Apache01            192.1.1.201                

Apache01            192.1.1.202

一、在lvs的机器操作:

# yum -y install keepalived  ipvsadm

# vi /etc/keepalived/keepalived.conf        --配置keepalived,达到高可用和负载均衡的效果

global_defs {            --通用默认配置,是用于配置keepalived发生故障切换的邮件告警
   notification_email {
     acassen@firewall.loc    --邮件接收人
     failover@firewall.loc    
     sysadmin@firewall.loc
   }

notification_eamil_from  Alexandre.Cassen@firewall.loc  --邮件发送人

smtp_server 192.168.200.1    --邮件发送人的smtp服务器
smtp_connect_timeout 30    --smtp服务器连接超时时间
router_id LVS_DEVEL        --标识主备

vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}

vrrp_instance HA_LVS {        --配置vrrp冗余协议(高可用),HA_LVS为名称,可自定义
    state MASTER        --主服务器配置为:MASTER,备:BACKUP
    interface ens33        --本机的有效网卡名称
    virtual_router_id 20    --主备高可用组ID,主备必须一样,但在网段里必须唯一
    priority 100        --优先级,主的值比备要大,例:主:100,备:99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

 virtual_ipaddress {        --配置虚拟IP,简称:VIP
    192.1.1.100        --VIP地址,必须要和有效网卡在同一网段
    }

}

virtual_server 192.1.1.100 80 {    --配置虚拟服务(LVS集群),如果只是做单纯的高可用,则这里以下都删除。
    delay_loop 6
    lb_algo rr            --配置lvs算法
    lb_kind DR            --配置lvs模式
    persistence_timeout 50    --配置连接超时间
    protocol TCP        --配置虚拟服务走TCP协议,如果UPD,则这里改成UDP
 real_server 192.1.1.201 80 {    --配置虚拟服务里真实的服务器
 weight 1            --权值
 HTTP_GET {            --验证服务器是否健康,有3个方式:SSL_GET,TCP_CHECK,HTTP_GET             connect_timeout 3        --验证服务器健康时,如果超过3秒没连接上,算超时有问题
            nb_get_retry 3        --如果连接超时,则最多连接3次
            delay_before_retry 3    --如果连接超时,则等3秒,再次连接
        }
    }

real_server 192.1.1.202 80 {
        weight 1
        HTTP_GET {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

安装完成后,启动keepalived

窗口:systemctl start keepalived

日志窗口:tail tail -f /var/log/messages

备:
主服务器的日志里要有明确的以下内容,代表启动成功
Nov  8 15:05:25 lvs-master Keepalived_vrrp[2247]: VRRP_Instance(HA_LVS) forcing a new MASTER election
Nov  8 15:05:26 lvs-master Keepalived_vrrp[2247]: VRRP_Instance(HA_LVS) Transition to MASTER STATE
Nov  8 15:05:27 lvs-master Keepalived_vrrp[2247]: VRRP_Instance(HA_LVS) Entering MASTER STATE            --看到此行,代表主服务器,已识别自己为主
Nov  8 15:05:27 lvs-master Keepalived_vrrp[2247]: VRRP_Instance(HA_LVS) setting protocol iptable drop rule
Nov  8 15:05:27 lvs-master Keepalived_vrrp[2247]: VRRP_Instance(HA_LVS) setting protocol VIPs.
Nov  8 15:05:27 lvs-master Keepalived_vrrp[2247]: Sending gratuitous ARP on ens33 for 192.1.1.100    
Nov  8 15:05:27 lvs-master Keepalived_vrrp[2247]: VRRP_Instance(HA_LVS) Sending/queueing gratuitous ARPs on ens33 for 192.1.1.100    --代表vrrp浮动在ens33网卡上,vip为192.1.1.100
Nov  8 15:05:27 lvs-master Keepalived_vrrp[2247]: Sending gratuitous ARP on ens33 for 192.1.1.100
Nov  8 15:05:27 lvs-master Keepalived_vrrp[2247]: Sending gratuitous ARP on ens33 for 192.1.1.100
Nov  8 15:05:27 lvs-master Keepalived_vrrp[2247]: Sending gratuitous ARP on ens33 for 192.1.1.100
Nov  8 15:05:27 lvs-master Keepalived_vrrp[2247]: Sending gratuitous ARP on ens33 for 192.1.1.100
Nov  8 15:05:32 lvs-master Keepalived_vrrp[2247]: Sending gratuitous ARP on ens33 for 192.1.1.100
Nov  8 15:05:32 lvs-master Keepalived_vrrp[2247]: VRRP_Instance(HA_LVS) Sending/queueing gratuitous ARPs on ens33 for 192.1.1.100
Nov  8 15:05:32 lvs-master Keepalived_vrrp[2247]: Sending gratuitous ARP on ens33 for 192.1.1.100
Nov  8 15:05:32 lvs-master Keepalived_vrrp[2247]: Sending gratuitous ARP on ens33 for 192.1.1.100
Nov  8 15:05:32 lvs-master Keepalived_vrrp[2247]: Sending gratuitous ARP on ens33 for 192.1.1.100
Nov  8 15:05:32 lvs-master Keepalived_vrrp[2247]: Sending gratuitous ARP on ens33 for 192.1.1.100

备服务器的日志里要有明确的以下内容,代表正常
Nov  8 15:05:15 lvs-backup Keepalived_vrrp[2178]: VRRP_Instance(HA_LVS) Entering BACKUP STATE             --看到此行,代表备服务器,已识别自己为备
Nov  8 15:05:15 lvs-backup Keepalived_vrrp[2178]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]

在主服务器上查看lvs集群配置是否添加成功
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.1.1.100:80 rr persistent 50                    --lvs集群服务,也就是对外的访问入口
  -> 192.1.1.201:80               Route   1      0          0             --代表lvs集群服务里的,真实服务器
  -> 192.1.1.202:80               Route   1      0          0

二、来到Apache服务器上,安装httpd服务,用于测试,并打开arp欺骗
两台Apache服务器都要打开ARP欺骗 :

写一个ARP脚本

# cat lvs-dr 
#!/bin/bash

case $1 in
start)

echo "conf localhost lo:0 ip ing........"
ifup lo
/sbin/ifconfig lo:0 192.1.1.100 netmask 255.255.255.255 broadcast 192.1.1.100
/sbin/route add -host 192.1.1.100 dev lo:0
echo
echo "success"
echo
echo "conf arp"
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo
echo "arp success"
echo "started"
;;

启动脚本
# sh lvs-dr start

查看本机的arp欺骗是否有绑定lvs的集群服务ip

# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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
    inet 192.1.1.100/32 brd 192.1.1.100 scope global lo:0        --看到已经绑定成功
       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 qlen 1000
    link/ether 00:0c:29:27:59:9f brd ff:ff:ff:ff:ff:ff
    inet 192.1.1.202/24 brd 192.1.1.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::4db7:1ae0:3cd8:c289/64 scope link 
       valid_lft forever preferred_lft forever
    inet6 fe80::f44:eada:b878:ba75/64 scope link tentative dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::ce4d:d2db:f685:3fe3/64 scope link tentative dadfailed 
       valid_lft forever preferred_lft forever

安装httpd服务,用于测试lvs集群服务

# yum -y install httpd

 --启动httpd服务

# systemctl restart httpd   

--查看httpd服务监听的80端口,是否启用

# netstat -anlp|grep :80

--如果有此输出,则代表httpd启动成功

tcp6     0      0 :::80       :::*         LISTEN      1784/httpd 


接下来,往httpd服务的数据家目录,写一个index.html文件,写点内容,用于测试识别

Apache01上操作:
# vi /var/www/html/index.html
Test lvs localhost ip :192.1.1.201:80
 

Apache02上操作:
# vi /var/www/html/index.html
Test lvs localhost ip :192.1.1.202:80

三、来到宿主机上访问192.1.1.100集群服务,看能否看到Apache上写的内容

浏览器访问:http://192.1.1.100

访问过后,再到lvs服务器上查看是否有连接访问本机集群服务
在lvs主服务器上执行以下命令:
# ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:46  FIN_WAIT    192.1.1.1:51030    192.1.1.100:80     192.1.1.202:80    
TCP 01:46  FIN_WAIT    192.1.1.1:51029    192.1.1.100:80     192.1.1.202:80
TCP 00:25  SYN_RECV    192.1.1.1:51028    192.1.1.100:80     192.1.1.202:80
TCP 00:27  NONE        192.1.1.1:0        192.1.1.100:80     192.1.1.202:80

备:
--这里的source代表正在访问集群服务的ip主机,virtual代表是集群服务,destination代表的是目标真实服务器
--当看到destination转到192.1.1.202服务器时,这里我们再来到192.1.1.202服务器,执行netstat -anlp|grep :80 查看lvs集群服务有没有转到本服务器


在192.1.1.200服务器执行:
# netstat -anlp|grep :80
tcp6       0      0 :::80                   :::*                    LISTEN      1784/httpd          
tcp6       0      0 192.1.1.100:80          192.1.1.1:51029         TIME_WAIT   -           

备:
--192.1.1.100:80代表的本机处理请求的ip地址,192.1.1.1代表的是处理请求过后的结果接收服务器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值