欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

高并发的解决方案—负载均衡—LVS搭建

程序员文章站 2022-07-11 11:59:04
...

首先这是一个简单的架构图:

高并发的解决方案—负载均衡—LVS搭建

一、如图,高并发可能发生的地方有两处

1、用户请求应用时的负载均衡处,本文仅针对此处进行分析

2、应用请求数据库时,分析待续

二、负载均衡处可能出现的问题,session共享问题

解决方案:

1、session可放在cookie中,但将seesion放浏览器处不安全

2、session可存放数据库中,但大量用户请求时,数据库压力会过大

3、seesion放到缓存服务器集群中。


三、负载均衡架构:

1、链路负载均衡
通过DNS解析成不同的ip指向不同的服务器,一旦有服务器故障,仍会请求到该服务器,直到从DNS解析中移走
2、集群负载均衡
硬件:使用一台专门的硬件设备转发请求,昂贵。如F5 性能好,但不能进行动态扩容
软件:成本低、一次访问请求要经过多次代理服务器,但会增加网络延时。
3、操作系统负载均衡 操作系统级别的软中断或者硬件中断,多队列网卡等。

四、负载均衡软件

1、Nginx,可选,优势此处不赘述。

2、Apache,追求稳定可选,性能不如Nginx。

3、LVS(Linux Virtual Server):负载均衡设备,它不提供任何服务,用户请求到这里的时候,它是将客户需求转发至后端真正提供服务的服务,所以说后端的服务称作realserver。

优势:稳定,兼容,抗负载均衡能力强,因为只分发请求,不走流量。

五、配置LVS,用vm演示

1、首先安装四台服务器

高并发的解决方案—负载均衡—LVS搭建

其中,1为负载均衡主机;2为负载均衡备机;3、4均为HTTP服务器。

2、ip配置

(1)VIP(virtual ip):用来提供virtual server服务的ip地址。分别绑定在Director一个物理网卡上(对外接收请求包)和RS的回环设备上(回环设备需要绑定两个ip,一个是127.0.0.1,另一个就是vip)。

(2)DIP(director ip):与vip绑定在一个物理网卡上,用来转发请求包到RS的RIP对应的mac上,此设备可以通过arp请求获取RIP对应的mac地址。

(3)RIP(real serverip):绑定在RS上的一个物理网卡上,用来接收从Directory转发过来的请求包。

3、在3、4上开启http服务

[aaa@qq.com ~]#service httpd start              #开启Http服务器

[aaa@qq.com ~]#cd /var/www/html/             #进入Http服务器默认的目录

[aaa@qq.com ~]#touch index.html               #创建Http服务器默认访问页面

[aaa@qq.com ~]#vim index.html                #编辑Http服务器默认访问页面

成功后添加网页如下:

高并发的解决方案—负载均衡—LVS搭建 

高并发的解决方案—负载均衡—LVS搭建

4、在1、2服务器网络配置上添加LO:0接口,并设置虚拟IP在此接口上

[aaa@qq.com ~]#cd /etc/init.d/

[aaa@qq.com ~]#touch realserver

[aaa@qq.com ~]#vim realserver

SNS_VIP=192.168.80.150       #定义VIP变量

./etc/rc.d/init.d/functions  #导脚本库

case "$1" in                 #case语句 $1传递给该shell脚本的第一个参数

start)

ifconfig lo:0 $SNS_VIPnetmask 255.255.255.255 broadcast $SNS_VIP #设置Lo:0 VIP netmask  及广播

/sbin/route add -host$SNS_VIP dev lo:0                         ##route del 增加本地路由

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

sysctl -p >/dev/null2>&1                   # -p<file>   (default /etc/sysctl.conf)将标准信息输入设备空文件

echo "RealServer StartOK"

;;

stop)

ifconfig lo:0 down

route del $SNS_VIP>/dev/null 2>&1              #route del 删除本地路由

echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce

echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "0">/proc/sys/net/ipv4/conf/all/arp_announce

echo "RealServerStoped"

;;

*)

echo "Usage: $0{start|stop}"  #$0 是脚本本身的名字

exit 1                       #表示进程正常退出

esac                         #case结束

exit 0                       #表示进程非正常退出

[aaa@qq.com ~]#chmod 750 realserver               #给此脚本赋予权限

[aaa@qq.com ~]#chkconfig realserver on         #设置开机自启动此脚本

[aaa@qq.com ~]#service realserver start          #开启此脚本

RealServer Start OK                                            #表示启动成功!

[aaa@qq.com ~]#ifconfig                                   #查看是否真的成功添加了lo:0接口

5、配置负载均衡服务器

(1)安装 ipvsadm  keepalived

[aaa@qq.com ~]#yum –y install ipvsadm keepalived
(2)配置 keepalived 

[aaa@qq.com ~]#vim /etc/keepalived/keepalived.conf

global_defs {                        ##全局配置部分
#   notification_email {             ##下面几行均为全局通知配置,可以实现出现问题后报警,但功能有限,因此注释掉,并采用Nagios监视lvs运行情况
#       aaa@qq.com
#   }
#   notification_email_from aaa@qq.com
#   smtp_server smtp.exmail.qq.com
#   smtp_connect_timeout 30
	router_id LVS_DEVEL             ##设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {            ##设置vrrp组,唯一且同一LVS服务器组要相同
	state MASTER             ##备份LVS服务器设置为BACKUP
	interface eth0             # #设置对外服务的接口
	virtual_router_id 51        ##设置虚拟路由标识
	priority 100                   #设置优先级,数值越大,优先级越高,backup设置为99,这样就能实现当master宕机后自动将backup变为master,而当原master恢复正常时,则现在的master再次变为backup。
	advert_int 1            ##设置同步时间间隔
	authentication {         ##设置验证类型和密码,master和buckup一定要设置一样
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {          ##设置VIP,可以多个,每个占一行
		192.168.80.150
	}
}
virtual_server 192.168.80.150 80 {
	delay_loop 6            ##健康检查时间间隔,单位s
	lb_algo wrr             ##负载均衡调度算法设置为加权轮叫
	lb_kind DR                              ##负载均衡转发规则
	nat_mask 255.255.255.0   ##网络掩码,DR模式要保障真实服务器和lvs在同一网段
	persistence_timeout 50    ##会话保持时间,单位s
	protocol TCP                           ##协议
	real_server 192.168.80.139 80 {      ##真实服务器配置,80表示端口
		weight 3                             ##权重
		TCP_CHECK {                       ##服务器检测方式设置 keepalived的健康检查方式 有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
			connect_timeout 0    ##连接超时时间
			nb_get_retry 3	     ##失败重试次数
			delay_before_retry 3 ##失败重试的间隔时间
			connect_port 80      ##连接的后端端口
		}
	}


	real_server 192.168.80.140 80 {
		weight 3
		TCP_CHECK {
			connect_timeout 10
			nb_get_retry 3
			delay_before_retry 3
			connect_port 80
		}
	}
}
启动keepalived服务
[aaa@qq.com ~]# service keepalived start

注:由于keepalived配置文件有语法错误也能启动,因此看到启动了lvs服务,不代表配置文件没有错误,如果遇到lvs不能正常转发,及时跟踪日志进行处理。

日志跟踪方法
(1) 开两个ssh窗口连接到lvs服务器,第一个窗口运行如下命令:
[aaa@qq.com ~]# tail -f /var/log/message

(2)第二个窗口重新启动keepalived服务,同时观察窗口1中日志的变化,然后根据日志提示解决即可。

6、测试

(1)浏览器访问虚拟IP查看结果

高并发的解决方案—负载均衡—LVS搭建

高并发的解决方案—负载均衡—LVS搭建

可以自己配置权重。

其他:

1、关闭服务器3,请求将一直分发至服务器4,无错误

高并发的解决方案—负载均衡—LVS搭建

2、重新开启服务器3,请求按权重分发至服务器3和4,无错误

3、关闭服务器1,服务器2接管,请求正常

4、恢复服务器1,服务器2重新待机,请求正常


下期写数据库处的高并发解决方案。

到此,本文结束,有问题可以留言指正,谢谢观看。