标签:storage slave 优先级 persist 核心 systemctl ifconfig 比较 七层
l 负载均衡可以采用硬件设备(例如常常听见的 F5),也可以采用软件负载
l 商用硬件负载设备成本通常较高(一台几十万甚至上百万),所以一般 情况下会采用软件负载
l 软件负载解决的两个核心问题是:选谁、转发,其中最著名的是 lvs
l 英文全称是 Linux Virtual Server,即 Linux 虚拟服务器
l 由 章 文 嵩 博 士 发 起 的 自 由 软 件 项 目 , 它 的 官 方 站 点 是 www.linuxvirtualserver.org
l Linux2.4 内核以后,LVS 已经是 Linux 标准内核的一部分
l 可以将请求分发给后端真实服务器处理
l 有许多比较著名网站和组织都在使用 LVS 架设的集群系统,例如:Linux 的门 户网站(www.linux.com)、向 RealPlayer 提供音频视频服务而闻 名的 Real 公 司(www.real.com )、全球最大的开源网站 (sourceforge.net)等
l 提供了多种调度算法
1) 轮询调度(Round-Robin Scheduling)RR算法
2) 加权轮询调度(Weighted Round-Robin Scheduling)WRR算法
3) 最小连接调度(Least-Connection Scheduling)LC算法
4) 加权最小连接调度(Weighted Least-Connection Scheduling)WLC算法
5) 基于局部性的最少链接(Locality-Based Least Connections Scheduling)LBLC算法
6) 带 复 制 的 基 于 局 部 性 最 少 链 接 ( Locality-Based Least Connections with Replication Scheduling)LBLCR算法
7) 目标地址散列调度(Destination Hashing Scheduling)DH算法
8) 源地址散列调度(Source Hashing Scheduling)SH算法
9) 最短预期延时调度(Shortest Expected Delay Scheduling)SED算法
10) 不 排 队 调 度 ( Never Queue Scheduling )NQ算法
l 有三种转发规则
1) NAT:简单理解,就是数据进出都通过 LVS,性能不是很好。
2) TUNL:简单理解:隧道
3) DR:最高效的负载均衡规则
l 最前端的负载均衡层,用 Load Balancer 表示
l 中间的服务器集群层,用 Server Array 表示
l 最底端的数据共享存储层,用 Shared Storage 表示
l 在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服 务器提供的高性能服务
l 抗负载能力强,因为 lvs 工作方式的逻辑是非常之简单,而且工作在网络 4 层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。
l 有完整的双机热备方案,当节点出现故障时,lvs 会自动判别,所以系统整体是非常稳定的。
l 使用集群技术和Linux操作系统实现一个高性能、高可用的服务器.
l 很好的可伸缩性(Scalability)
l 很好的可靠性(Reliability)
l 很好的可管理性(Manageability)
l 基本上能支持所有应用,因为 lvs 工作在 4 层,所以它可以对几乎所有应用做负载均衡,包括 http、数据库、聊天室等等。
l lvs 是四层负载均衡,也就是说建立在 OSI 模型的第四层——传输层之 上
l 传输层上有 TCP/UDP,lvs 支持 TCP/UDP 的负载均衡
l 因为 LVS 是四层负载均衡,因此它相对于其它高层负载均衡的解决办法, 比如 DNS 域名轮流解析、应用层负载的调度、客户端的调度等,它的效 率是非常高的
l lvs 的转发可以通过修改 IP 地址实现(NAT 模式)
l lvs 的转发还可以通过修改直接路由实现(DR 模式)
l 负载度 lvs 优于 nginx
l 稳定度 lvs 优于 nginx
l 服务器性能要求 lvs 优于 nginx
l 网络层数的效率 lvs 优于 nginx ² 网络七层:应用层、会话层、表示层、传输层、网络层、链路层、 物理层
l 功能多少 nginx 优于 lvs
keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说
第3层、第4层和第5层交换。Keepalived是自动完成,不需人工干涉
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工
出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时
用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将
务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人
做的只是修复故障的服务器
Layer3,4,5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
l Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
l Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
l Layer5:Layer5对指定的URL执行HTTP GET。然后使用MD5算法对HTTP GET结果进行求和。如果这个总数与预期值不符,那么测试是错误的,服务器将从服务器池中移除。该模块对同一服务实施多URL获取检查。如果您使用承载多个应用程序服务器的服务器,则此功能很有用。此功能使您能够检查应用程序服务器是否正常工作。MD5摘要是使用genhash实用程序(包含在keepalived软件包中)生成的。
l SSL_GET与HTTP_GET相同,但使用SSL连接到远程Web服务器。
l MISC_CHECK:此检查允许用户定义的脚本作为运行状况检查程序运行。结果必须是0或1.该脚本在导演盒上运行,这是测试内部应用程序的理想方式。可以使用完整路径(即/path_to_script/script.sh)调用可以不带参数运行的脚本。那些需要参数的需要用双引号括起来(即“/path_to_script/script.sh arg 1 … arg n”)
主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间 failover的实现
当我们的服务器意外挂了之后,我们要怎么做?
当然是找一台新的机器,替代现有的机器,然后做新的环境部署,端口映射, 域名解析等等一系列的工作,再将服务重新启动;但是如果这一系列的操作都 是手动完成的,那么等你把这些工作搞好,可能服务已经停止个把小时了,这 会儿估计运营早就提着菜刀架在你脖子上了;
但是如果使用了KeepAlived之后,然后提前将备用机准备好,当主的机器挂掉 之后,自动将VIP给你切换到备用机,并且以邮件的形式告诉你说主服务已经 挂了,你得赶紧恢复起来;这时候你就可以慢慢的去找主服务的问题,这时候 并不会影响到你的正常业务运行。
两台webserver
Centos7.6 lvs keepalived 主 192.168.25.31 master
Centos7.6 lvs keepalived 备 192.168.25.32 slave
VIP地址 192.168.25.50
25.31:master
25.32:slave
两台都需要的配置
[root@master ~]# yum -y install httpd
[root@master ~]# systemctl enable httpd.service
?
[root@master ~]# systemctl list-unit-files |grep httpd
?
httpd.service enabled
[root@master ~]# systemctl start httpd.service
Master:
[root@master ~]# vim /var/www/html/index.html
?
[root@master ~]# cat /var/www/html/index.html
node01 service
Slave:
[root@slave ~]# vim /var/www/html/index.html
?
[root@slave ~]# cat /var/www/html/index.html
?
node02 service
在centos7里面需要先执行安装net_tools不然执行脚本时会报错
[root@slave ~]# yum -y install net-tools
?
[root@master ~]# vim /etc/init.d/realserver
?
\#!bin/bash
?
SNS_VIP=192.168.25.100 #定义一个VIP变量,必须跟真实服务在一个网段
?
source /etc/rc.d/init.d/functions
?
case "$1" in
?
start)
?
echo "start lvs of realserver"
?
/sbin/ifconfig lo:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255 up #增加一个本地路由 lo:0
?
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
?
;;
?
stop)
?
/sbin/ifconfig lo:0 down
?
echo "close LVS Directorserver"
?
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" >/prco/sys/net/ipv4/conf/all/arp_anounce
?
;;
?
*)
?
echo "Usage: $0 {start|stop}"
?
exit 1
?
esac
?
[root@master ~]# chmod 777 /etc/init.d/realserver
?
[root@master init.d]# service realserver start
?
Starting realserver (via systemctl): [ 确定 ]
?
[root@master ~]# ifconfig
Master:
[root@master init.d]# scp realserver root@192.168.25.32:/etc/init.d/
Slave:
[root@slave init.d]# chmod 777 realserver
?
[root@slave init.d]# service realserver start
?
Reloading systemd: [ 确定 ]
?
Starting realserver (via systemctl): [ 确定 ]
?
[root@slave init.d]# ifconfig
Master:
[root@master ~]# uname -a Linux master 3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Slave:
[root@slave ~]# uname -a Linux slave 3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@master ~]# yum -y install keepalived
[root@master ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak [root@master ~]# vim /etc/keepalived/keepalived.conf global_defs { # notification_email { # } # smtp_connect_timeout 30 ? router_id LVS_DEVEL } vrrp_instance VI_1 { ? state MASTER #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器 ? interface ens160 #指定HA监测网络的接口 ? virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的 ? priority 100 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级 ? advert_int 1 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是 ? authentication { #设置验证类型和密码 ? auth_type PASS #设置验证类型,主要有PASS和AH两种 ? auth_pass 1111 #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信 ? } ? virtual_ipaddress { ? 192.168.25.100 #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个 ? } } virtual_server 192.168.25.100 80 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开 ? delay_loop 6 #设置运行情况检查时间,单位是秒 ? lb_algo wrr #设置负载调度算法,这里设置为wrr,即加权轮询调度 ? lb_kind DR #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选这里使用LVSDR模式 ? nat_mask 255.255.255.0 ? persistence_timeout 0 #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。 ? #有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。 ? #需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作 ? #那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制 ? protocol TCP #指定转发协议类型,有TCP和UDP两种 ? real_server 192.168.25.31 80 { #配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开 ? weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器 ? #分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源 ? TCP_CHECK { #realserver的状态检测设置部分,单位是秒 ? connect_timeout 10 #表示10秒无响应超时 ? nb_get_retry 3 #表示重试次数 ? delay_before_retry 3 #表示重试间隔 ? connect_port 80 ? } ? } ? real_server 192.168.25.32 80 { ? weight 2 ? TCP_CHECK { ? connect_timeout 10 ? nb_get_retry 3 ? delay_before_retry 3 ? connect_port 80 ? } ? } }
[root@master ~]# systemctl start keepalived.service
[root@slave ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak [root@slave ~]# vim /etc/keepalived/keepalived.conf (在slave上只需要修改state MASTER 为state backup和优先级低于master就行) global_defs { # notification_email { # } # smtp_connect_timeout 30 ? router_id LVS_DEVEL } vrrp_instance VI_1 { ? state BACKUP ? interface ens160 ? virtual_router_id 51 ? priority 90 ? advert_int 1 ? authentication { ? auth_type PASS ? auth_pass 1111 ? } ? virtual_ipaddress { ? 192.168.25.100 ? } } virtual_server 192.168.25.100 80 { ? delay_loop 6 ? lb_algo wrr ? lb_kind DR ? nat_mask 255.255.255.0 ? persistence_timeout 0 ? ? ? ? protocol TCP ? real_server 192.168.25.31 80 { ? weight 1 ? ? TCP_CHECK { ? connect_timeout 10 ? nb_get_retry 3 ? delay_before_retry 3 ? connect_port 80 ? } ? } ? real_server 192.168.25.32 80 { ? weight 2 ? TCP_CHECK { ? connect_timeout 10 ? nb_get_retry 3 ? delay_before_retry 3 ? connect_port 80 ? } ? } }
[root@slave ~]# systemctl start keepalived.service
[root@master ~]# systemctl stop httpd.service
[root@master ~]# systemctl start httpd.service
标签:storage slave 优先级 persist 核心 systemctl ifconfig 比较 七层
原文地址:https://www.cnblogs.com/clllum/p/11792041.html