LVS+Keepalived群集

LVS+Keepalived群集
在企业应用中,单台服务器承担应用存在单点故障的危险,在企业应用集群中,存在了至少两处单点故障危险,单点故障一旦发生,企业服务将发生中断,造成极大的危害
Keepalived工具介绍
专为LVS和HA设计的一款健康检查工具
支持故障自动切换(Failover)
支持节点健康状态检查(Health Checking)
官方网站:http://www.keepalived.org/
Keepalived实现原理剖析
Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
VRRP ,虚拟路由冗余协议,是针对路由器的一种备份解决方案
由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态
若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
Keepalived可实现多机热备,每个热备组可有多台服务器,最常用的就是双机热备
双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器

环境检查 关闭selinux,单网卡NAT
lb@1 192.168.11.11
lb@2 192.168.11.12
rs@1 192.168.11.13
rs@2 192.168.11.14

rs@3/@4
yum install -y httpd
rm -rf /etc/httpd/conf.d/welcome.conf
sed -i ‘/#ServerN/s/#//g’ /etc/httpd/conf/httpd.conf
echo “33” > /var/www/html/index.html
echo “444” > /var/www/html/index.html
systemctl restart httpd
systemctl enable httpd
#firewall-cmd --add-port=80/tcp
#firewall-cmd --add-port=80/tcp --permanent

#配置arp抑制
echo "net.ipv4.conf.lo.arp_ignore = 1 只响应目的IP地址为接收网卡上的本地地址的arp请求。
net.ipv4.conf.lo.arp_announce = 2 忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
net.ipv4.conf.all.arp_ignore = 1  
net.ipv4.conf.all.arp_announce = 2 " >> /etc/sysctl.conf  
#sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。
#使之生效
sysctl -p

注:arp_ignore和arp_announce参数都和ARP协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作。这两个参数很重要,特别是在LVS的DR场景下,它们的配置直接影响到DR转发是否正常。

#临时添加虚拟ip和路由
ifconfig lo:0 192.168.11.200 netmask 255.255.255.255 broadcast 192.168.11.200 up
route add -host 192.168.11.200 dev lo:0

#永久添加虚拟ip和路由 / 可选
cd /etc/sysconfig/network-scripts/

echo “NAME=lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=193.168.11.200
NETMASK=255.255.255.255” > ifcfg-lo:0

echo “192.168.11.200 dev lo:0” > route-lo:0
systemctl restart network

ip a
route -n

lb@1/@2

yum -y install ipvsadm keepalived

cp /etc/keepalived/keepalived.conf{,.bak}
vim /etc/keepalived/keepalived.conf
#####################
! Configuration File for keepalived

global_defs {
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.11.200
}
}

virtual_server 192.168.11.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP

real_server 192.168.11.13 80 {
    weight 1
    TCP_CHECK {
        connect_port 80
        connect_timeout 1
        nb_get_retry 1
    }
}
real_server 192.168.11.14 80 {
    weight 1
    TCP_CHECK {
        connect_port 80
        connect_timeout 1
        nb_get_retry 1
    }
}

}
###################################
systemctl restart keepalived
systemctl enable keepalived
#添加防火墙规则
#firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --protocol vrrp -j ACCEPT
#firewall-cmd --add-port=80/tcp --permanent
#firewall-cmd --reload
ip a 注意:ifconfig命令不能查看VIP

ipvsadm -ln

The output of ipsvadm lists connections, either as

ActiveConn - in ESTABLISHED state
InActConn - any other state

测试

keepalived.conf说明
! Configuration File for keepalived

global_defs { # 全局设置
notification_email { # 设置报警邮件接收地址
[email protected]
}
notification_email_from [email protected] # 设置邮件的发送地址
router_id XXXXX # 表示该台服务的ID,可用主机名
}

vrrp_instance VI_1 { # vrrp 实例
state MASTER # 当前节点的角色,备用节点为BACKUP
interface ens33
virtual_router_id 51 # master和backup的id一致
priority 100 #备用节点修改为90
advert_int 1 # master和backup之间的检测时间
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.42.180 # 设置虚拟IP
}
}

virtual_server 192.168.42.180 80 { # 设置虚拟服务器,ip端口以及花边号用空格隔开
delay_loop 5 # 设置运行情况检查时间,单位是秒
lb_algo rr # 负载算法,这里是rr表示轮询
lb_kind DR # LVS工作机制,这里是DR模式

persistence_timeout 50 # 会话保持时间,单位是秒,这个选项对动态网页非常有帮助,为集群系统中的session共享提供了一个很好的解决方案,有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间,需要注意的是,这个会话保持时间是最大无响应的超时时间,用户在动态页面50秒以内没有执行任何操作,那么接下来的操作会重新调度到另一个节点上。如果一直在操作则不会影响

protocol TCP   # 有TCP,UDP,http。

real_server 192.168.42.148 80  {     #设定真实服务器地址以及端口,
    weight 1         # 设置权重,数字越低,调度的比例越小。
    TCP_CHECK {  #以tcp模式检查该服务器监控状态
        connect_timeout 1   # 连接超时时间,
        connect_port 80      #连接的端口,
        nb_get_retry 3        # 表示重试次数,
        delay_before_retry 1   # 表示重试间隔。
    }
}

real_server 192.168.42.147 80  {
    weight 1
    TCP_CHECK {
        connect_port 80
        connect_timeout 1
        nb_get_retry 1
    }
}

}

你可能感兴趣的:(LVS+Keepalived群集)