**他们负责什么工作?**
在LVS+Keepalived环境里面,lvs主要的工作是提供调度算法,把客户端请求按照需求调度在real服务器,keepalived主要的
工作是提供lvs控制器的一个冗余,并且对real服务器做健康检查,发现不健康的real服务器,就把它从lvs集群中剔除,real
服务器只负责提供服务。
#LVS 即 Linux 虚拟服务器
l 有三种转发规则
1) NAT:网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用用户可以
访问位于公司内部的私有IP主机。简单理解:就是数据进出都通过 LVS,性能不是很好。
2) TUNL:简单理解:隧道,所有的数据请求及响应的数据包都需要经过LVS调度器转发,如果后端服务器的数量大于10台,则
调度器就会成为整个集群环境的瓶颈。由于需要在LVS调度器与真实服务器之间创建隧道连接,这同样会增加服务器的负担。
3) DR:直接路由模式, 最高效的负载均衡规则
LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户
端。与隧道模式不同的是,直接路由模式(DR模式要求调度器与后端服务器必须在同一个局域网内,VIP地址需要在调度器与后
端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源IP为VIP地址,目标IP为客户端IP,这样客户
端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址(真实服务器上的VIP),客户端是感觉不到后端服务器存在的
**LVS多种调度算法**
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算法
lvs的优点
抗负载能力强,因为 lvs 工作方式的逻辑是非常之简单,而且工作在网络 4 层仅做请求分发之用,没有流量,所以在效率上
基本不需要太过考虑。
有完整的双机热备方案,当节点出现故障时,lvs 会自动判别,所以系统整体是非常稳定的。
使用集群技术和Linux操作系统实现一个高性能、高可用的服务器.
很好的可伸缩性(Scalability)
很好的可靠性(Reliability)
很好的可管理性(Manageability)
基本上能支持所有应用,因为 lvs 工作在 4 层,所以它可以对几乎所有应用做负载均衡,包括 http、数据库、聊天室等等。
什么是keepalived
keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说
第3层、第4层和第5层交换。Keepalived是自动完成,不需人工干涉
主要用作RealServer的健康状态检查以及前段负载均衡主机和BackUP主机之间 failover的实现
但是如果使用了KeepAlived之后,然后提前将备用机准备好,当主的机器挂掉 之后,自动将VIP给你切换到备用机
#注意:一定先关闭防火墙测试,先能保证测试通过。
systemctl stop firewalld systemctl disable firewalld
setenforce 0 临时关闭selinux
需要重启sed -i 's/SELINUX=enforcing/SELINUX=disable/g' /etc/selinux/config
如果服务器一定要用防火墙,那么在测试无误后,通过命令运行VRRP路由冗余协议。
允许组播,两台设备上都需要执行 调度服务器
iptables -A INPUT -d vip -j ACCEPT
或修改:vim /etc/sysconfig/iptables
适当位置添加行:
-A INPUT -d vip -j ACCEPT
两台WEB 服务器安装nginx
安装nginxyum源
vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
yum install -y nginx
vim /usr/share/nginx/html/index.html 修改一下内容 仅测试用,自定义根目录自行处理
启动nginx各自访问看看能不能打开
在所有real server上添加下面脚本,名执行# 配置转发
vim /etc/init.d/realserver
#!/bin/bash
#description:start realserver
vip=122.225.32.157 (注意修改)
source /etc/rc.d/init.d/functions
case $1 in
start)
echo "Start Realserver"
/sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
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)
echo "Stop Realserver"
/sbin/ifconfig lo:0 down
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 "Usage: $0 (start | stop)"
exit 1
esac
执行脚本以后,使用ip add命令查看lo接口是否添加了虚拟ip地址。
两台Lvs+keepalived
安装:yum install keepalived -y
master配置:
global_defs {
# notification_email {
# edisonchou@hotmail.com
# }
# notification_email_from sns-lvs@gmail.com
# smtp_server 192.168.80.1
# smtp_connection_timeout 30
router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {
state MASTER #指定Keepalived的角色,MASTER为主,BACKUP为备 记得大写
interface ens33 #网卡id 不同的电脑网卡id会有区别 可以使用:ip a查看
#lvs_sync_daemon_interface ens33 #监控心跳接口
virtual_router_id 51 #虚拟路由编号,主备要一致
priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
advert_int 1 #检查间隔,默认为1s
authentication { #这里配置的密码最多为8位,主备要一致,否则无法正常通讯
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.200 #定义虚拟IP(VIP)为192.168.1.200,可多设,每行一个
}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.0.200 80 {
delay_loop 6 # 设置健康检查时间,单位是秒
lb_algo rr # 设置负载调度的算法为rr
lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
nat_mask 255.255.255.0
persistence_timeout 0 #(同一客户端访问服务器的任何服务都会被转发到同一real server)测试用这个
#persistence_timeout 60 #(同一个client的请求信息记录到lvs的hash表里,保存时间使用persistence_timeout控
制)
protocol TCP
real_server 192.168.0.104 80 { # 指定real server1的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.0.105 80 { # 指定real server2的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
接着在两台lvs上安装 LVS的管理工具:ipvsadm yum install -y ipvsadm
修改keepalived启动内容:vim /usr/lib/systemd/system/keepalived.service
#KillMode=process
#表示只杀掉程序的主进程,打开的子进程不管。我们keepalived肯定要全部杀掉。所以注释掉这一行
分别启动keeplives
主上ip add查看网卡内容

ipvsadm -ln 查看lvs状态

1.打开不同浏览器访问vip观察,停止其中一台web测试,看有没有负载均衡
2.关闭masterkeepalived 观察backup有没有接管vip,如果接管则成功,不行查看日志/var/log/messages
如果出现脑裂(就是两台lvs都占用了vip),可能是配置文件错误,防火墙问题
555
1
1
1