LVS+Keepalived+Apache 实现负载均衡高可用

虚拟机(CentOS 7.4)

准备了4台虚拟机,用于测试

LVS+Keepalived+Apache 实现负载均衡高可用

虚拟机环境:所有虚拟机关闭防火墙,关闭selinux

LVS+Keepalived+Apache 实现负载均衡高可用

一、软件安装

1)、分别在192.168.3.2 (master)和 192.168.3.6 (backup)上安装keepalived

Keepalived安装

开机自启,启动服务

[root@master ~]# yum install keepalived -y
[root@master ~]# systemctl enable keepalived
[root@master ~]# systemctl restart keepalived

2)、分别在192.168.3.2(master) 和 192.168.3.6 (backup)上安装ipvsadm 工具,用于查看lvs转发及代理情况。

ipvsadm安装

[root@backup ~]# yum install ipvsadm -y

3)、分别在192.168.3.3(web1) 和 192.168.3.4(web2)安装apache 网页服务器

开机自启,启动服务

[root@web1 ~]# yum install httpd -y
[root@web1 ~]# systemctl enable http
[root@web1 ~]# systemctl restart httpd

4)、分别在192.168.3.3(web1) 和 192.168.3.4(web2)中,写入一个不同的测试页面

[root@web1 ~]# echo "192.168.3.3 (web1)" > /var/www/html/index.html
[root@web2 ~]# echo "192.168.3.4 (web2)" > /var/www/html/index.html

测试下页面:

LVS+Keepalived+Apache 实现负载均衡高可用

二、配置网络环境

1)、分别在192.168.3.3(web1) 和 192.168.3.4(web2)配置虚拟 vip 地址,以及

这里的子网掩码必须是32,网络地址与IP地址一样,广播地址与IP地址也一样。

[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 ~]# cp ifcfg-lo ifcfg-lo:0
[root@web1 ~]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.3.200
NETMASK=255.255.255.255
NETWORK=192.168.3.200
BROADCAST=192.168.3.200
ONBOOT=yes
NAME=lo:0

2)、分别在192.168.3.3(web1) 和 192.168.3.4(web2)上配置ARP抑制

[root@web1 ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
[root@web1 ~]# sysctl -p ##重新载入sysctl配置文件

arp_ignore和arp_announce参数都和ARP协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作。

arp_ignore :(回应ARP,作用是控制系统在收到外部的arp请求时,是否要返回arp响应。

0 :响应任何网口上收到的对任何本机IP地址的ARP查询请求(默认)

1:只响应目的IP地址为接收网卡上的本地地址的arp请求

2:只响应目标IP是接收网口的IP的ARP查询请求,且发送者IP必须与该网口属于同一网段

4--7: 保留未使用

8: 不回应所有ARP查询

arp_announce (宣告,作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。

0:允许使用任意网卡上的IP地址作为arp请求的源IP

1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。

2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。

3)、分别在192.168.3.3(web1) 和 192.168.3.4(web2) 重启网络服务

查看vip 虚拟地址

[root@web1 ~]# systemctl restart network
[root@web1 ~]# ip address show lo
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
 inet 192.168.3.200/32 brd 192.168.3.200 scope global lo:0
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever

三、配置keepalived

1)、在 192.168.3.2 (master) 上,配置master

[root@master ~]# vim /etc/keepalived/keepalived.conf 
global_defs {
 notification_email {
 admin@feixiangkeji.cn #设置报警收件人邮箱
 }
 notification_email_from test@feixiangkeji.cn #设置发件人
 smtp_server 192.168.200.1 #定义邮件服务器地址
 smtp_connect_timeout 30
 router_id Lvs1 #设置路由ID号,需要修改!
 vrrp_skip_check_adv_addr
 vrrp_strict
 vrrp_garp_interval 0
 vrrp_gna_interval 0
}
vrrp_instance VI_1 {
 state MASTER #设置主服务器为MASTER
 interface eth0 #定义网络接口
 virtual_router_id 51 #主辅VRID号必须一致
 priority 100 #服务器优先级
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass feixiangkeji 
 #主辅服务器密码必须一致,建议不要使用默认密码
 }
 virtual_ipaddress {
 192.168.3.200 #配置VIP地址
 }
}
virtual_server 192.168.3.200 80 { #设置ipvsadm的VIP规则
 delay_loop 6 #检查的间隔时间,每隔6秒检查一次
 lb_algo wrr #设置LVS调度算法为WRR,加权轮询
 lb_kind DR #设置LVS模式为直连路由模式
persistence_timeout 50 #客户端在时间内始终访问相同服务器
 protocol TCP #设置虚拟IP的协议为TCP,相当于ipvsadm -A -t
 real_server 192.168.3.3 80 {
 weight 1 #设置权重为1
 TCP_CHECK { #对后台web服务器做健康检查
 connect_timeout 3 #超时时间是3秒
 nb_get_retry 3 #如果不成功,连续检测3次,不行就剔除
 delay_before_retry 3 #重新加入集群,连续检测3次
 }
 }
real_server 192.168.3.4 80 {
 weight 1
 TCP_CHECK {
 connect_timeout 3
 nb_get_retry 3
 delay_before_retry 3
 }
 }
}

2)、在 192.168.3.6 (backup) 上,配置backup

[root@backup ~]# vim /etc/keepalived/keepalived.conf
global_defs {
 notification_email {
 admin@feixiangkeji.cn
 }
 notification_email_from test@feixiangkeji.cn
 smtp_server 192.168.200.1
 smtp_connect_timeout 30
 router_id Lvs2 #修改路由ID号
 vrrp_skip_check_adv_addr
 vrrp_strict
 vrrp_garp_interval 0
 vrrp_gna_interval 0
}
vrrp_instance VI_1 {
 state BACKUP #修改从服务器为BACKUP
 interface eth0
 virtual_router_id 51
 priority 50 #修改服务器优先级
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass feixiangkeji
 }
 virtual_ipaddress {
 192.168.3.200
 }
}
virtual_server 192.168.3.200 80 {
 delay_loop 6
 lb_algo wrr
 lb_kind DR
#persistence_timeout 50
 protocol TCP
 real_server 192.168.3.3 80 {
 weight 1
 TCP_CHECK {
 connect_timeout 3
 nb_get_retry 3
 delay_before_retry 3
 }
 }
real_server 192.168.3.4 80 {
 weight 1
 TCP_CHECK {
 connect_timeout 3
 nb_get_retry 3
 delay_before_retry 3
 }
 }
}

3)、分别在 192.168.3.2 (master) 和 192.168.3.6 (backup) 上

重启keepalived 服务,清空iptables 规则

[root@master ~]# systemctl restart keepalived
[root@master ~]# iptables -F

查看LVS规则

[root@master ~]# 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.3.200:80 wrr
 -> 192.168.3.3:80 Route 1 0 0 
 -> 192.168.3.4:80 Route 1 0 0

查看VIP 虚拟地址配置

[root@master ~]# ip address show eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 52:54:00:18:b6:13 brd ff:ff:ff:ff:ff:ff
 inet 192.168.3.2/24 brd 192.168.3.255 scope global noprefixroute eth0
 valid_lft forever preferred_lft forever
 inet 192.168.3.200/32 scope global eth0
 valid_lft forever preferred_lft forever
 inet6 fe80::e8a8:75c2:19e:4d04/64 scope link noprefixroute 
 valid_lft forever preferred_lft forever

四、客户端测试

1)、firefox http://192.168.3.200

刷新,查看访问的页面是否会轮询到不同的后端真实服务器。

LVS+Keepalived+Apache 实现负载均衡高可用

2)、测试keepalive 的高可用

关闭192.168.3.2 (master)的keepalived 服务

[root@master ~]# systemctl stop keepalived

查看192.168.3.6 (backup) 上 ,是否存在vip (192.168.3.200)地址

[root@backup ~]# ip address show eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 52:54:00:aa:9c:5a brd ff:ff:ff:ff:ff:ff
 inet 192.168.3.6/24 brd 192.168.3.255 scope global noprefixroute eth0
 valid_lft forever preferred_lft forever
 inet 192.168.3.200/32 scope global eth0
 valid_lft forever preferred_lft forever
 inet6 fe80::a424:f2de:ac3b:aa86/64 scope link noprefixroute 
 valid_lft forever preferred_lft forever

使用ipvsadm 命令 查看192.168.3.6 (backup) 上 ,lvs 集群信息

[root@backup ~]# 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.3.200:80 wrr
 -> 192.168.3.3:80 Route 1 0 1 
 -> 192.168.3.4:80 Route 1 0 0

由此可见,lvs 调度器已经成功的漂到了192.168.3.6 (backup) 上

客户端再次访问 vip 地址

LVS+Keepalived+Apache 实现负载均衡高可用
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容