一、概述
应用keepalived实现负载均衡高可用。在LVS+Keepalived环境里面,lvs主要的工作是提供调度算法,把客户端请求按照需求调度real服务器,keepalived主要的工作是提供lvs控制器的一个冗余,并且对real服务器做健康检查,发现不健康的real服务器,就把它从lvs集群中剔除,real服务器只负责提供服务。
二、基本环境
关闭所有机器防火墙,Selinux,所有Ip属于同一网段;
客户端角色机器配置 elinks 或者 curl 即可;
DR服务器安装 keepalived, ipvsadm ,添加第二个网卡;
Realserver服务器安装Nginx 。
三、配置
RS服务器:
1.安装启动nginx(略)
2.添加虚拟IP(192.168.122.254)
# ip a a dev lo 192.168.122.254/32
3.设置内核参数
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
4.为使负载均衡实验效果明显,添加可区分页面信息
DR服务器:
1.安装keepalived,ipvsadm
# yum -y install keepalived ipvsadm
2.查看两台DR路由条目,目标效果是对应两张网卡名称相同且顺序一样。
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.122.1 0.0.0.0 UG 100 0 0 ens3
0.0.0.0 192.168.122.1 0.0.0.0 UG 101 0 0 ens8
192.168.122.0 0.0.0.0 255.255.255.0 U 100 0 0 ens3
192.168.122.0 0.0.0.0 255.255.255.0 U 101 0 0 ens8
可以使用如下命令修改路由条目(虚拟机实验中重新添加网卡也可以):
# route del -net 192.168.122.17/24 dev ens3
# route add -net 192.168.122.17/24 dev ens3
3.修改keepalived配置文件
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id Director1 //两边是一样的
}
vrrp_instance VI_1 {
state MASTER //另外一台机器是BACKUP
interface ens3 //心跳网卡,即路由条目上方网卡
virtual_router_id 51
priority 150 //优先级,优先级数额单位差为50,BACK优先级设置100
advert_int 1 //检查间隔,单位秒
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.122.254/24 dev ens8 //ens8 为路由条目下方网卡
}
}
virtual_server 192.168.122.254 80 { //LVS 配置,VIP
delay_loop 3 //服务论询的时间间隔
lb_algo rr //LVS 调度算法(轮询)
lb_kind DR //LVS 集群模式
protocol TCP
real_server 192.168.122.119 80 { //Rs网站服务器ip
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server 192.168.122.175 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
4.启动keepalived,查看LVS路由条目
# systemctl start keepalived
# 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.122.254:80 rr
-> 192.168.122.119:80 Route 1 0 0
-> 192.168.122.175:80 Route 1 0 0
测试
查看到vip在MASTER服务器上,通过vip进行访问测试结果后关闭keepalived服务,此时vip浮动到BACKUP服务器上,再次进行访问测试 。
# ip a
3: ens8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:cc:c1:c4 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.92/24 brd 192.168.122.255 scope global dynamic ens8
valid_lft 2713sec preferred_lft 2713sec
inet 192.168.122.254/24 scope global secondary ens8
valid_lft forever preferred_lft forever
inet6 fe80::7c89:ff52:2594:d034/64 scope link
valid_lft forever preferred_lft forever
客户端测试
# curl 192.168.122.254
或者
# elinks --dump http:192.168.122.254
三、理论补充
1.问题:再次启动master服务器keepalived服务,vip浮动到master服务器。
vrrp_instance VI_1 {
state BACKUP
interface ens3
virtual_router_id 51
priority 150
nopreempt //再次重启优先级较高服务器keepalived服务后,vip没有浮动
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.122.254/24 dev ens8
}
}
2.keepalived
keepalived是集群管理中保证集群高可用(VRRP协议实现高可用)的一个服务软件,其功能类似于heartbeat,用来防止单点故障。管理LVS负载均衡软件;实现LVS集群节点的健康检查;作为系统网络服务的高可用性(failover)。
3.VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
4.Keepalived模块
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
5.Vip注意事项:
DR服务器上新添加的网卡必须是启动状态(有无IP都可以),VIP地址不可以与此网卡地址相同。