• 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 {    #定义报警邮件接收地址
        test1@ppap.com
        test2@ppap.com
        test3@ppap.com
        }
        notification_email_from  error_from@ppap.com     #定义告警邮件发送邮箱
        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.
  • 相关阅读:
    移动端开发-禁止横屏
    奇葩的对象创建方式(更新中)
    每日积累之8.8
    每日积累 8.6
    折半查找
    linux中的amount的解释
    Redis集群错误
    每日积累 8.6
    Redis中在程序中的应用
    每日积累 8.4
  • 原文地址:https://www.cnblogs.com/zy09/p/10457687.html
Copyright © 2020-2023  润新知