今天简单写下lvs+keepalive实现负载均衡和高可用的功能,仅供参考!关于它们的详细介绍这里就不描述了,大家可以自行搜索下!
lvs+keepalived网络拓扑图:
一、准备一个vip和4台虚拟机:
vip:192.168.1.100 | 向外提供服务的ip,一般是绑定域名的 | |
192.168.1.10 | LB1_master调度器IP | |
192.168.1.13 | LB2_slave调度器IP | |
192.168.1.11 | nginx服务器IP | |
192.168.1.12 | apache服务器IP |
二、安装准备工作
lsmod|grep ip_vs cat /etc/redhat-release uname �Crm ln �Cs /usr/src/kernels/内核版本 /usr/src/linux ln -s /usr/src/kernels/2.6.32-504.12.2.el6.x86_64/ /usr/src/linux #若tab没有内核版本号出来,安装kernel-devel yum install kernel-devel libnl* popt* �Cy
#ipvsadm下载地址(注意版本)
http://www.linuxvirtualserver.org/software/ipvs.html
#安装LVS命令
tar zxvf ipvsadm-1.26.tar.gz cd ipvsadm-1.26 make && make install #将ipvsadm加入内核模块的方法有以下两种 modprobe ip_vs /sbin/ipvsadm #查看下是否加载成功,若有以下内容表示安装成功 [root@php ipvsadm-1.26]# lsmod |grep ip_vs ip_vs 125694 0 libcrc32c 1246 1 ip_vs ipv6 334932 25 ip_vs
三、LB添加LVS转发
1.如果有域名的话,将域名解析到公网IP
2.配置LVS虚拟IP,就是我们所谓的VIP
ifconfig eth0:0 192.168.1.100/24 up route add -host 192.168.1.100 dev eth0
3.检查结果
ifconfig eth0:0 Link encap:Ethernet HWaddr 08:00:27:03:F9:0D inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
4.配置添加LVS服务并添加RS
在这里,有必要介绍下添加集群服务的规则:
格式: ipvsadm -A|E -t|u|f service-address [-s scheduler]
参数:
[-p [timeout]] [-M netmask]
-A: 表示添加一个新的集群服务(add)
-E: 编辑一个集群服务(edit)
-t: 表示tcp协议(tcp)
-u: 表示udp协议(udp)
-f: 表示firewall-Mark,防火墙标记(firewall)
service-address: 集群服务的IP地址,即VIP
-s 指定调度算法
-p 持久连接时长,如#ipvsadm -Lcn ,查看持久连接状态
-M 定义掩码(netmask)
ipvsadm -D -t|u|f service-address 删除一个集群服务(delete)
ipvsadm -C 清空所有的规则(clean)
ipvsadm -R 重新载入规则(reload)
ipvsadm -S [-n] 保存规则(save)
向集群服务添加RealServer规则:
添加RealServer规则
格式:ipvsadm -a|e -t|u|f service-address -r server-address
参数:
[-g|i|m] [-w weight]
-a 添加一个新的realserver规则
-e 编辑realserver规则
-t tcp协议
-u udp协议
-f firewall-Mark,防火墙标记
service-address realserver的IP地址(真实服务器的IP)
-g 表示定义为LVS-DR模型
-i 表示定义为LVS-TUN模型
-m 表示定义为LVS-NAT模型
-w 定义权重,后面跟具体的权值
ipvsadm -d -t|u|f service-address -r server-address --删除一个realserver
#设置超时(可选) ipvsadm --set 30 5 60 #添加一个实例(类似虚拟主机)用-A ipvsadm -A -t 192.168.1.100:80 -s wrr �Cp 20 ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.11 -g -w 1 ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.12 -g -w 1
5.检查结果
ipvsadm -L
四、LB删除LVS方法
#删除virtual server用ipvsadm �CD ipvsadm �CD �Ct 192.168.1.10 �Cs wrr #删除节点用ipvsadm -d ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.12:80
五、RS配置lo,并且绑定vip
ifconfig lo:0 192.168.1.100/32 up route add �Chost 192.168.1.100 dev lo
1.RS端抑制arp广播
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
六、KeepAlived服务高可用
安装方法一: yum install openssl* -y yum install kernel-devel libnl* popt* �Cy ln -s /usr/src/kernels/2.6.32-504.8.1.el6.x86_64/ /usr/src/linux tar zxvf keepalived-1.1.19.tar.gz cd keepalived-1.1.19 ./configure make && make install
安装方法二: tar zxvf keepalived-1.1.19.tar.gz cd keepalived-1.1.19 ./configure \ --mandir=/usr/loacl/share/man \ --with-kernel-dir=/usr/src/kernels/2.6.32-504.8.1.el6.x86_64/ make && make install
操作命令:
/bin/cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/ /bin/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ mkdir /etc/keepalived �Cp /bin/cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ /bin/cp /usr/local/sbin/keepalived /usr/sbin/ /etc/init.d/keepalived start [root@apache ~]# /etc/init.d/keepalived start Starting keepalived: [ OK ] [root@apache ~]#ps -ef|grep keep root 2864 1 0 07:58 ? 00:00:00 keepalived -D root 2866 2864 0 07:58 ? 00:00:00 keepalived -D root 2867 2864 0 07:58 ? 00:00:00 keepalived -D root 2871 1101 0 07:58 pts/0 00:00:00 grep keep [root@apache ~]# /etc/init.d/keepalived stop =è成功后停止keepalived服务 Stopping keepalived: [ OK ]
七、在主(master)keepalived配置keepalived.conf配置文件
! Configuration File for keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 10.0.0.1 smtp_connect_timeout 30 router_id LVS_7 } vrrp_instance VI_1 { state MASTER #因为这里是主,所以选用MASTER interface eth0 virtual_router_id 55 priority 150 #这个值一定要比从(slave)的大 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100/24 #vip } }
八、在从(slave)的keepalived配置keepalived.conf文件
! Configuration File for keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 10.0.0.1 smtp_connect_timeout 30 router_id LVS_2 } vrrp_instance VI_1 { state BACKUP #这里是从(slave),选用BACKUP interface eth0 virtual_router_id 55 priority 100 #这个值小于主(master)的150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100/24 #vip } }
九、最后主从都需重启keepalived
/etc/init.d/keepalived start
我这里分别是两个站点:apache和nginx!在输入192.168.1.100这个vip的时候,会调度到不同的站点上面!以下是截图:
十、LVS集群分发请求RS负载不均的问题
主要有以下几点:
1.会话保持的原因,尽量不要在负载均衡器上做会话保持
2.LVS自身的会话保持参数设置问题,要优化,尽量用cookies或者session替代
3.LVS调度算法设置问题,例如rr wrr wlc lc 算法
4.后端RS节点的会话保持参数,例如apache的keealive参数
5.访问量少的情况,不均衡的现象比较明显
6.用户发送的请求时间长短,和请求资源多少有关