keepalived+lvs-dr模式搭建

前面讲了怎么搭建nat模式和dr模式,但是负载均衡器如果只有一个的话,那么负载均衡器就成了瓶颈,当这一个负载均衡器挂掉以后,那整个网络就瘫痪了,所以要保持lvs的高可用,需要搭配keepalived来实现lvs的高可用,也就是主备负载均衡器,当两个负载均衡器都正常的时候那么主负载均衡器工作,而当主负载均衡器挂掉以后那么就从负载均衡器工作。当再把主负载均衡器开启以后那么,在回归主负载均衡器工作。下面是搭建步骤,由于前面讲了通过命令配置负载均衡器,那样太麻放了,现在讲解怎么把命令写成服务让后直接通过一句命令去部署完成。

一、两台real Server的部署脚本

1、首先需要在/etc/init.d  下新建一个目录  realServer  文件,里面的内容如下

#!/bin/bash
#chkconfig: 2345 30 90
#description: myservice testd...
#test initd
SNS_VIP=192.168.30.98
/etc/rc.d/init.d/functions
case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_VIP dev lo:0
       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
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       ifconfig lo:0 down
       route del $SNS_VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
exit 0

注意:这个地方   #chkconfig: 2345 30 90  这一句还必须要有,不然的话通过 systemctl   enable   realServer  ,会报错,

2、修改这个文件的权限为 755 可以执行

chmod   755   realServer

3、通过systemctl   enable  realServer  命令启用该服务

  然后通过systemctl   start   realServer  启动服务

4、通过  more  /proc/sys/net/ipv4/conf/lo/arp_ignore   查看文件是否已经修改为了1  , 如果是1说明服务起作用了

二、两台Lvs的部署脚本

1、首先安装  keepalive,这里需要联网安装

yum  install keepalived   -y

2、安装完以后去到 /etc/keepalived   目录下,然后将keepalived.conf  文件改名位 keepalived.conf.bak

  cd   /etc/keepalived

mv    keepalived.conf  keepalived.conf.bak

3、然后再新建 keepalived.conf 文件,将下面的配置加入进去,这一台服务器是主lvs服务器。

global_defs {
   notification_email {
         [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.30.1
   smtp_connection_timeout 30
   router_id LVS_DEVEL  # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {
    state MASTER   #指定Keepalived的角色,MASTER为主,BACKUP为备
    interface ens37  #指定接口
    virtual_router_id 51  #虚拟路由编号,主备要一致
    priority 100  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
    advert_int 1  #检查间隔,默认为1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.30.98  #定义虚拟IP(VIP)为192.168.80.200,可多设,每行一个
    }
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.30.98 80 {
    delay_loop 6 # 设置健康检查时间,单位是秒
    lb_algo wrr # 设置负载调度的算法为wlc
    lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 192.168.30.100 80 {  # 指定real server1的IP地址
        weight 1   # 配置节点权值,数字越大权重越高
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.30.101 80 {  # 指定real server2的IP地址
        weight 1  # 配置节点权值,数字越大权重越高
        TCP_CHECK {   2
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

4、从lvs服务器配置文件一样,但是需要修改两处

(1)将state由MASTER改为BACKUP

(2)将priority由100改为99

global_defs {
   notification_email {
         [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.30.1
   smtp_connection_timeout 30
   router_id LVS_DEVEL  # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {
    state BACKUP   #指定Keepalived的角色,MASTER为主,BACKUP为备
    interface ens37  #指定接口
    virtual_router_id 51  #虚拟路由编号,主备要一致
    priority 99  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
    advert_int 1  #检查间隔,默认为1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.30.98  #定义虚拟IP(VIP)为192.168.80.200,可多设,每行一个
    }
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.30.98 80 {
    delay_loop 6 # 设置健康检查时间,单位是秒
    lb_algo wrr # 设置负载调度的算法为wlc
    lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 192.168.30.100 80 {  # 指定real server1的IP地址
        weight 1   # 配置节点权值,数字越大权重越高
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.30.101 80 {  # 指定real server2的IP地址
        weight 1  # 配置节点权值,数字越大权重越高
        TCP_CHECK {   2
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

注意:如果在centos7中开启了防火墙,那么需要加下面的几条语句

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens37 --destination 192.168.30.98 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface ens37 --destination 192.168.30.98 --protocol vrrp -j ACCEPT
firewall-cmd --zone=public --add-port=36160/tcp --permanent
firewall-cmd --reload

后端服务器的虚拟IP必须绑定到lo:0上,同时指定子网掩码是255.255.255.255,否则ARP禁用会出现异常。

然后  通过  systemctl   start   keepalived.service   启动服务。

抓包命令

tcpdump -i ens37 -nn tcp port 443 -vv -XX 

最后测试是否好使,

你可能感兴趣的:(运维搭建)