最近,本屌接到公司的任务,公司新上20台服务器,需要搭建一整套架构来运行公司的业务,其中有应用服务器,认证服务器,数据库服务器等。服务器基础架构中的应用服务器集群要有高可用性,且需要负载均衡。当我接到这个任务的时候,脑子里第一个想法就是LVS+Keepalived。 由于公司资金有限,直接上硬件的负载均衡设备是不可能的了,所以只好使用软件来实现,LVS在负载均衡集群中无疑是一种很好的方案,使用LVS可以同时分发10台以下的设备,用在我们这个项目中是再合适不过的,而为了干掉LVS负载均衡集群中分发服务器这个单点故障,我又引入了Keepalived高可用技术。 LVS(Linux Virtual Server,Linux虚拟服务器)技术,由现任职淘宝的章文嵩博士创始,是一套开源的负载均衡软件,是中国国内最早出现的自由软件项目之一。 LVS架构由前端分发服务器,中间应用服务器,后端共享存储共同组成,分发服务器根绝其分发策略将用户请求分发到中间的应用服务器上,应用服务器根据LVS的模式来响应用户请求。LVS相关术语如下: 1、Director Server:调度服务器,将负载分发到Real Server的服务器 2、Real Server:真实服务器,真正提供应用服务的服务器 3、VIP:虚拟IP地址,公布给用户访问的IP地址 4、RIP:真实IP地址,集群节点上使用的IP地址 5、DIP:Director连到Real Server的IP地址 LVS负载均衡方式: NAT:通过网络地址转换实现的虚拟服务器,Director server将用户请求报文的目的地址改成选定的Real Server地址后,转发给Real Server。 NAT模式下,所有请求全部要经过Director server的处理,所以,在并发量较大的时候,Director server就会成为系统的瓶颈。 DR:直接使用路由技术实现虚拟服务器,通过改写请求报文的MAC地址,将请求发至Real Server,Real Server直接响应客户端。 TUN:通过隧道方式实现虚拟服务器,Director采用隧道技术将请求发至Real Server后,Real Server直接响应客户端。 为了避免系统瓶颈,所以采用DR方式来实现请求转发。 LVS提供了10种调度算法,这些算法决定了以什么方式来转发请求,常用的调度算法有4种: 轮询(Round Robin):将客户端请求平均分发到Real Server。 加权轮询(Weighted Round Robin):根据Real Server的性能设置权重,再进行轮询调度。 最少连接(Least Connections):根据Real Server的性能设置权重,再进行轮询调度。 加权最少连接( Weighted Least Connections ):根据Real Server的性能设置权重,再将网络请求调度到已建立的连接数最少的服务器上。 由于公司采购的服务器的配置完全相同,性能没有什么差异,所以在调度算法上采用RR轮询的方式。 为了避免负载均衡分发器单点故障,所以再多加一台备用分发器,一旦当前的分发服务器发生故障,则启用备用服务器,保证业务不中断。 使用keepalived技术,实现对分发器以及应用服务器的高可用,自动剔除故障服务器,自动转移lvs负载均衡分发服务器。当故障服务器回复后,keepalived服务会自动将恢复的服务器重新加入集群继续提供服务。 以下为服务器配置过程: 一、IP地址划分 LVS-Master:10.60.77.150 LVS-Backup:10.60.77.151 VIP:10.60.77.152(此为对外提供服务的地址,本文中以私有IP代替) web1:10.60.77.153 web2:10.60.77.154(web服务器即为应用服务器,本文以两台为例) 二、在LVS分发服务器上安装软件(两台服务器上都要安装) [iyunv@10-60-77-150-LVS1~]# yum -y install epel-release [iyunv@10-60-77-150-LVS1~]# yum -y install ipvsadm keepalived 三、配置LVS-Master服务器 修改keepalived配置文件 [iyunv@10-60-77-150-LVS1 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { //设置报警邮件 zhanghy@zhy.com } notification_email_fromAlexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS1 //设置router_id,此值在该网络中需要具有唯一性 } vrrp_instance VI_1 { state MASTER //当前服务器设置为主服务器 interface eth0 virtual_router_id 51 priority 100 //优先级,主服务器应该在网络中最高 advert_int 1 authentication { auth_type PASS //设置认证方式 auth_pass password //设置认证密码 } virtual_ipaddress { //设置VIP,掩码需要我们自己设置 10.60.77.152/24 } } virtual_server 10.60.77.152 80 { //VIP监听的端口 delay_loop 6 lb_algo rr //调度算法,此处为轮询方式 lb_kind DR //LVS负载均衡方式,此处为DR模式 persistence_timeout 50 protocol TCP real_server 10.60.77.15380 { //指定real-server weight 1 //指定该服务器的权重 TCP_CHECK { connect_timeout3 nb_get_retry 3 delay_before_retry 3 } } real_server 10.60.77.15480 { weight 1 TCP_CHECK { connect_timeout3 nb_get_retry 3 delay_before_retry 3 } } } 准备虚拟网卡配置文件 [iyunv@10-60-77-150-LVS1 ~]# cd /etc/sysconfig/network-scripts/ [iyunv@10-60-77-150-LVS1 ~]# cp ifcfg-eth0 ifcfg-eth0:0 [iyunv@10-60-77-150-LVS1 ~]# vim ifcfg-eth0:0 DEVICE=eth0:0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=none IPADDR=10.60.77.152 PREFIX=24 四、配置LVS-Backup服务器 修改keepalived配置文件,只需修改以下几条即可: [iyunv@10-60-77-151-LVS2 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { zhanghy@zhy.com } notification_email_fromAlexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS2 //修改router_id } vrrp_instance VI_1 { state BACKUP //修改状态为BACKUP,该项配置必须为大写 interface eth0 virtual_router_id 51 priority 90 //修改优先级低于LVS-Master服务器 advert_int 1 authentication { auth_type PASS //此处配置必须与LVS-Master完全相同 auth_pass password } 其余配置与LVS-Master完全相同 分别启动LVS-master和LVS-backup的keepalived服务 [iyunv@10-60-77-150-LVS1 ~]# service keepalived start [iyunv@10-60-77-150-LVS1 ~]# chkconfig keepalived on [iyunv@10-60-77-151-LVS2 ~]# service keepalived start [iyunv@10-60-77-151-LVS2 ~]# chkconfig keepalived on 五、配置realserver(所有web服务器配置全部相同) 1、拒绝ARP响应 [iyunv@10-60-77-153-web1 ~]# vim /etc/sysctl.conf 在该文件末尾添加如下四行配置: net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.lo.arp_ignore = 1 [iyunv@10-60-77-153-web1 ~]# sysctl -p 2、准备虚拟回环接口配置文件 [iyunv@10-60-77-153-web1 ~]# cd /etc/sysconfig/network-scripts/ [iyunv@10-60-77-153-web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0 [iyunv@10-60-77-153-web1 network-scripts]# vim ifcfg-lo:0 DEVICE=lo:0 IPADDR=10.60.77.152 NETMASK=255.255.255.255 BROADCAST=10.60.77.152 ONBOOT=yes [iyunv@10-60-77-153-web1 network-scripts]# service network restart 六、测试
|