实验:实践单主组 KeeAlived 和IPVS(LVS--DR模式)的双集群、高可用、健康性检查、FWM标签

一、前期规则设置
CIP:192.168.10.50 gateway:192.168.10.2
Route: 192.168.10.60 192.168.80.60 启用IP_forward的功能,不能有网关。
KA1:DIP:192.168.80.100 gateway:192.168.80.60 配置文件绑定VIP
KA2: RIP:192.168.80.110 gateway:192.168.80.60 配置文件绑定VIP
RS1: RIP:192.168.80.120 gateway:192.168.80.60 VIP: 192.168.80.222/32 VIP绑定在lo
RS2: RIP:192.168.80.130 gateway:192.168.80.60 VIP: 192.168.80.222/32 VIP绑定在lo

KA 其它配置准备:
  (1) 各节点时间必须同步 ntp, chrony
  (2) 确保iptables及selinux不会成为阻碍
  (3) 各节点之间可通过主机名互相通信(对KA并非必须)建议使用/etc/hosts文件实现
  (4) 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信(对KA并非必须)
  (5)两台KA服务器文件对密钥对考(非必须) ssh-keygen ssh-copy-id KA_IP
  (6)vim /etc/hosts (非必须) 192.168.80.100 KA1 192.168.80.110 KA2

  

二、KA服务器软件安装
	yum install keepalived   ipvsadm  
	yum install  httpd	    #用于sorry server
	测试页:
	echo sorry_server ka1 > /var/www/html/index.html 
	echo sorry_server ka2 > /var/www/html/index.html
	


三、RS的服务器DR模式设置方法一:(手动)
	echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
	echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
	echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
	echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
	
	RS服务器安装软件
	yum install  httpd
	两台RS设置VIP地址
	ip addr add 192.168.80.222/32 dev lo:1
	测试页:
	echo 192.168.80.120_index.html RS1 > /var/www/html/index.html 
	echo 192.168.80.130_index.html RS2 > /var/www/html/index.html

三、RS的服务器DR模式设置方法二 :(脚本)
cat lvs_dr_rs.sh
#!/bin/bash
#Author:wangxiaochun
#Date:2017-08-13
vip=192.168.80.222
mask='255.255.255.255'
dev=lo:1
rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null
service httpd start &> /dev/null && echo "The httpd Server is Ready!"
echo "<h1>hostname</h1>" > /var/www/html/index.html

case 1 in
start)
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    ifconfig $dev $vip netmask $mask #broadcast $vip up
    #route add -host $vip dev $dev
    echo "The RS Server is Ready!"
    ;;
stop)
    ifconfigdev down
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "The RS Server is Canceled!"
    ;;
*) 
    echo "Usage: $(basename $0) start|stop"
    exit 1
    ;;
esac

三、测试下访问两台RS是否能访问,IP绑定情况
curl 192.168.80.120
	192.168.80.120_index.html RS1
curl 192.168.80.130
	192.168.80.130_index.html RS2
四、KA服务器文件配置单主机模式的lvs集群
1.vim /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     root@localhost   
   }
   notification_email_from 6m1@localhost  
   smtp_server 127.0.0.1  
   smtp_connect_timeout 30
   router_id ka1
   vrrp_mcast_group4 224.100.100.43 
}
vrrp_instance zzhz {
    state MASTER
    interface eth0
    virtual_router_id 51 
    priority 95        
    advert_int 2         
    authentication {
        auth_type PASS
        auth_pass centos 
    }
    virtual_ipaddress {
        192.168.80.222/24 dev eth0 label eth0:1    #这里的IP跟virtual_server同一个。
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
virtual_server 192.168.80.222  80 {     ##这里的IP跟virtual_ipaddress 同一个。
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP
    sorry_server 127.0.0.1 80
	
    real_server 192.168.80.120 80 {
        weight 1
	HTTP_GET {       #应用层检测  访问日志有日志
	    url {
		path /
		status_code 200
	    }
	connect_timeout 3
	nb_get_retry 3
	delay_before_retry 3
	}
    }
    real_server 192.168.80.130 80 {
	weight 1
	TCP_CHECK {    #另一台主机使用TCP检测  tcpdump -i eth0 -nn host 192.168.80.100 
	connect_ip 192.168.80.130
        connect_port 80
        bindto 192.168.80.100
        bind_port 7777
	connect_timeout 3
	nb_get_retry 3
	delay_before_retry 3
	}
    }
}

五:另一台 KA2服务器文件配置单主机模式的lvs集群

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka2
   vrrp_mcast_group4 224.100.100.43
}
vrrp_instance zzhz {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 85
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass centos
    }
    virtual_ipaddress {
        192.168.80.222/24 dev eth0 label eth0:1
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}
virtual_server 192.168.80.222  80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP
    sorry_server 127.0.0.1 80

    real_server 192.168.80.120 80 {
        weight 1
        HTTP_GET {
            url {
                path /
                status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.80.130 80 {
        weight 1
        TCP__CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_ip 192.168.80.130
            connect_port 80
            bindto 192.168.80.100
            bind_port 7777
        }
    }
}

  

六、测试: RS故障 
  # while true ; do curl http://192.168.80.222 ;sleep 1; done
192.168.80.130_index.html RS2
192.168.80.120_index.html RS1       #正常
curl: (7) couldn't connect to host  #130使用TCP_CHECK方法的,这里的断网测试, #TCP检测,使用systemctl stop httpd,ipvsadm -Ln的列表是不删除的,还是会调用。

192.168.80.120_index.html RS1
192.168.80.120_index.html RS1
curl: (7) couldn't connect to host  #120 使用HTTP_CHECK方法,systemctl stop httpd
curl: (7) couldn't connect to host  
sorry_server ka1
sorry_server ka1 

[root@localhost7A ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.80.222:80 rr
  -> 127.0.0.1:80                 Route   1      0          5 


六、测试:KA故障       
systemctl status keepalived.service
tcpdump -i eth0 -nn host 224.100.100.43

  

 virtual_server fwmark int #ipvs的防火墙打标,实现基于防火墙的负载均衡集群,(FWM标签)

virtual_server fwmark 6 {    #指定FWM为6 
        delay_loop 6
        lb_algo rr
        lb_kind DR
        protocol TCP
        sorry_server 127.0.0.1 80
        real_server 192.168.80.120 80 {
               省略部分
        }
        real_server 192.168.80.130 80 {
	      省略部分
        }		
}
#防火墙中两个节点都执行以下操作
[root@ka1]#iptables -t mangle -A PREROUTING -d 192.168.80.222  -p tcp --dport 80 -j MARK --set-mark 6
[root@ka2]#iptables -t mangle -A PREROUTING -d 192.168.80.222  -p tcp --dport 80 -j MARK --set-mark 6

  

 

posted @ 2022-08-04 11:27  yuanbangchen  阅读(116)  评论(0编辑  收藏  举报