zoukankan      html  css  js  c++  java
  • Keepalived 和 Firewalld

    准备

    MASTER IP 192.168.1.7
    BACKUP IP 192.168.1.8
    VIP 192.168.1.200

    yum install  keepalived 
    systemctl stop firewalld
    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf #开启允许绑定非本机的IP
    sysctl -p
    

    Keepalived

    MASTER

    global_defs {
       notification_email {
           root@localhost
       }
       notification_email_from ka@localhost
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id ka46
       vrrp_mcast_group4 224.0.0.111
       #vrrp_strict 
    }
      
    vrrp_instance Intranet_1 {
        state MASTER
        interface em1
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass starsing
        }
        virtual_ipaddress {
            192.168.1.200/24
        }
    
        #virtual_routes {
        #    default via 192.168.1.1
        #}
    
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"
    }
    

    BACKUP

    注意以下几点
    state 角色为 BACKUP
    interface 为网卡的 ID,要根据机器确认
    virtual_route_id 要与 MASTER 一致,默认为 51
    priority 要比 MASTER 小

    global_defs {
       notification_email {
           root@localhost
       }
       notification_email_from ka@localhost
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id ka46
       vrrp_mcast_group4 224.0.0.111
       #vrrp_strict 
    }
      
    vrrp_instance Intranet_1 {
        state BACKUP
        interface em1
        virtual_router_id 51
        priority 95
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass starsing
        }
        virtual_ipaddress {
            192.168.1.200/24
        }
    
        #virtual_routes {
        #    default via 192.168.1.1
        #}
    
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"
    }
    

    NOTIFY

    #!/bin/bash
    contact="root@localhost"
    contact_xwx="sunday@sundayle.com"
                    
    notify() {
        local mailsubject="$(hostname) to be $1, vip floating"
        local mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
        #echo "$mailbody" | mail -s "$mailsubject" $contact
        echo "$mailbody" | mail -s "$mailsubject" $contact_xwx
    }
                    
    case $1 in
    master)
        notify master   
        ;;
    backup)
        notify backup   
        ;;
    fault)
        notify fault    
        ;;
    *)
        echo "Usage: $(basename $0) {master|backup|fault}"
        exit 1
        ;;
    esac
    

    MASTER和BACKUP 启动keepalived

    systemctl start keepalived
    systemctl enable keepalived
    

    此时防火墙是关闭状态,MASTER获得VIP。BACKUP没有。

    [root@master ]# ip addr | grep 192.168.1.200
        inet 192.168.1.200/24 scope global secondary em1
    

    漂移规则:
    默认 MASTER 会获得 VIP(192.168.1.200)。
    当 MASTER 出问题时,VIP 会漂移到 BACKUP 服务器。
    当 MASTER 重新启动后,VIP 又会漂移回 MASTER 服务器。

    Firewalld

    防火墙添加规则,默认不指定为224.0.0.18,这里修改了为224.0.0.111

    systemctl stop keepalived
    systemctl start firewalld
    

    方式一:宽松

    firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
    firewall-cmd --reload
    firewall-cmd --list-all
    

    方式二:严紧

    firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface em1 --destination 224.0.0.111 --protocol vrrp -j ACCEPT
    firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface em1 --destination 224.0.0.111 --protocol vrrp -j ACCEPT
    firewall-cmd --reload
    

    查看这两条规则

    [root@master ~]# firewall-cmd --direct --get-rules ipv4 filter INPUT
    0 --in-interface em1 --destination 224.0.0.111 --protocol vrrp -j ACCEPT
    [root@master ~]# firewall-cmd --direct --get-rules ipv4 filter OUTPUT
    0 --out-interface em1 --destination 224.0.0.111 --protocol vrrp -j ACCEPT
    
    systemctl start keepalived
    

    此时Master获得VIP,BACKUP没有,则防火墙放行vrrp正常。
    若Master和Backup均获取到VIP,则防火墙配置,注意网卡接口和vrrp组播地址。

    服务测试

    [root@master ~]# yum install tcpdump
    [root@master ~]# tcpdump -i em1 vrrp -n
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on em1, link-type EN10MB (Ethernet), capture size 262144 bytes
    16:17:56.949963 IP 192.168.1.7 > 224.0.0.111: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 36
    16:17:57.950994 IP 192.168.1.7 > 224.0.0.111: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 36
    16:17:58.952063 IP 192.168.1.7 > 224.0.0.111: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 36
    16:17:59.953131 IP 192.168.1.7 > 224.0.0.111: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 36
    16:18:00.954206 IP 192.168.1.7 > 224.0.0.111: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 36
    

    此时VIP在MASTER上。
    如果MASTER停止keepalived,VIP会漂移到BACKUP上

    systemctl stop keepalived
    
    [root@master ~]# tcpdump -i em1 vrrp -n
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on em1, link-type EN10MB (Ethernet), capture size 262144 bytes
    16:25:24.415708 IP 192.168.1.8 > 224.0.0.111: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 36
    16:25:25.416790 IP 192.168.1.8 > 224.0.0.111: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 36
    16:25:26.417831 IP 192.168.1.8 > 224.0.0.111: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 36
    

    此时VIP在BACKUP上。

    配置日志

    非必要

    keepalived 默认将日志输出到系统日志/var/log/messages中,因为系统日志很多,查询问题时相对麻烦。
    我们可以将 keepalived 的日志单独拿出来,这需要修改日志输出路径。

    vim /etc/sysconfig/keepalived
    
    # Options for keepalived. See `keepalived --help' output and keepalived(8) and
    # keepalived.conf(5) man pages for a list of all options. Here are the most
    # common ones :
    #
    # --vrrp               -P    Only run with VRRP subsystem.
    # --check              -C    Only run with Health-checker subsystem.
    # --dont-release-vrrp  -V    Dont remove VRRP VIPs & VROUTEs on daemon stop.
    # --dont-release-ipvs  -I    Dont remove IPVS topology on daemon stop.
    # --dump-conf          -d    Dump the configuration data.
    # --log-detail         -D    Detailed log messages.
    # --log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)
    #
    
    #KEEPALIVED_OPTIONS="-D"
    KEEPALIVED_OPTIONS="-D -d -S 0"
    

    把 KEEPALIVED_OPTIONS=”-D” 修改为 KEEPALIVED_OPTIONS=”-D -d -S 0”,其中 -S 指定 syslog 的 facility

    配置 rsyslog.conf

    vim /etc/rsyslog.conf 
    
    local0.*                                                /var/log/keepalived.log
    
    systemctl restart rsyslog
    systemctl restart keepalived
    

    此时,可以从 /var/log/keepalived.log 查看日志了。

    链接

    CentOS 7 配置 Keepalived 实现双机热备

  • 相关阅读:
    mysql复制那点事
    全排列问题
    56. Merge Interval
    2. Add Two Numbers
    20. Valid Parentheses
    121. Best Time to Buy and Sell Stock
    120. Triangle
    96. Unique Binary Search Trees
    91. Decode Ways
    72. Edit Distance
  • 原文地址:https://www.cnblogs.com/hypj/p/14055956.html
Copyright © 2011-2022 走看看