keepalived + lvs

Keepalived原理

Keepalived原理
keepalived也是模块化设计,不同模块复杂不同的功能,下面是keepalived的组件
core check vrrp libipfwc libipvs-2.4 libipvs-2.6

core:是keepalived的核心,复杂主进程的启动和维护,全局配置文件的加载解析等
check:负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析
vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的
libipfwc:iptables(ipchains)库,配置LVS会用到
libipvs*:配置LVS会用到
注意,keepalived和LVS完全是两码事,只不过他们各负其责相互配合而已

 

keepalived启动后会有三个进程
父进程:内存管理,子进程管理等等
子进程:VRRP子进程
子进程:healthchecker子进程

有图可知,两个子进程都被系统WatchDog看管,两个子进程各自复杂自己的事,healthchecker子进程复杂检查各自服务器的健康程度,例如HTTP,LVS等等,如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的兄弟VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态
genhash 用法:
[root@localhost bin]# ./genhash -s 192.168.100.101 -p 80 -u /       #genhash http 页面探测时检查hash 值,首先要获取hash 值
MD5SUM = 47f174a067d193f370407ec4aa882ab0

[root@localhost bin]# 

配置文件详解:本次测试着重点在keepalived 中使用LVS 功能

[root@localhost keepalived]# cat keepalived.conf
! Cconfiguration File for keepalived

global_defs {     #全局配置段
    notification_email {    #定义报警邮件接收地址
    [email protected]
    [email protected]
    [email protected]
    }
    notification_email_from  [email protected]     #定义告警邮件发送邮箱
    smtp_server   114.114.114.114      #定义邮箱服务器
    smtp_connect_timeout 30            #定义邮件发送超时时间
    router_id  lvs_1               #定义路由标识信息,相同局域网唯一
}  

vrrp_instance VI_1 {     #定义vrrp 实例,实例可以定义多个,在主+主,主+主+备 分别在不通服务器调用
    state MASTER         #状态参数,标识在当前主机上,实列状态,有master/backup
    interface ens33      #指定绑定虚IP的网卡设备
    virtual_router_id 51  #路由 id 标识,用于区分不同vrrp 实例,相同实例id 必须一致:[0-255]  
    priority  100        #定义当前实例的优先级,优先级大小决定主备
    advert_int 1         #主备通讯时间间隔
 
    authentication {
    auth_type  PASS   #定义实例认证类型
    auth_pass  1111   #定义认证密码
    }
    virtual_ipaddress {   #定义vrrp 需要发布的虚拟ip ,可以绑定网卡
     192.168.100.201/24
     192.168.100.202/24
     192.168.100.203/24  dev eth2 label eth2:1     指定网卡和名称
    }

    nopreempt             #开启不抢占功能,默认抢占
}

virtual_server 192.168.100.201 80 {        #定义虚拟服务地址端口

    delay_loop 10         #查询后端real_server 状态间隔时间
    lvs_sched  wlc        #定义lvs 负载算法 
    lvs_method DR         #定义lvs 模式
    persistence_timeout  300   #定义会话保持时间 
    protocol    TCP           #定义负载协议为tcp    
    
    real_server 192.168.100.101 80 {   #定义real_server
    weight  1         #设置权重为1 ,默认为1
    uthreshold  10000   #最大连接阈值
    TCP_CHECK {       
        connect_timeout 5   #定义探测超时时间默认为5 s
        retry           3   #尝试三次

    }
    }
   real_server 192.168.100.103 80 {
    weight 1           # 设置权重为1,默认1
    uthreshold 5000    # 设置连接最大阈值
    HTTP_GET {
        url {
        path /
        digest c32410fe653866bfc3e85c896a4abc94
        status_code 200   #正常应该是 200 状态码
        
        }
        connect_timeout 5    #定义探测超时时间,默认5s
        retry 3    #     尝试 3  次
    }
    }    

    
}

测试结果:

[root@localhost keepalived]# 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:50:56:2d:b8:9a brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.100/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.100.201/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet 192.168.100.202/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::18a9:d1fe:4955:8559/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@localhost keepalived]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.201:80 wlc persistent 300
  -> 192.168.100.101:80           Route   1      0          4         
  -> 192.168.100.103:80           Route   1      0          0         

 停止其中一个节点服务:  重启节点只能重新加载keepalived 配置

[root@localhost /]# systemctl stop httpd
[root@localhost /]# 
Mar  1 04:30:12 localhost Keepalived_healthcheckers[2966]: Error connecting server [192.168.100.103]:80.

Mar  1 04:30:15 localhost Keepalived_healthcheckers[2966]: Error connecting server [192.168.100.103]:80.
Mar  1 04:30:15 localhost Keepalived_healthcheckers[2966]: Check on service [192.168.100.103]:80 failed after 1 retry.
Mar  1 04:30:15 localhost Keepalived_healthcheckers[2966]: Removing service [192.168.100.103]:80 from VS [192.168.100.201]:80
Mar  1 04:30:15 localhost Keepalived_healthcheckers[2966]: Remote SMTP server [114.114.114.114]:25 connected.

猜你喜欢

转载自www.cnblogs.com/zy09/p/10457687.html