分类: LINUX
2018-09-11 09:07:17
LVS(Linux virtual server)
它是一个负载均衡、高可用性集群,主要针对大业务量的网络应用(比如新闻。电子商务、网上银行…)
LVS是建立在一个主控服务器(双机)及若干个真实服务器组成。真实服务器负责提供服务,主控服务器会根据指定的调度算法对真实的服务器进行控制。LVS集群结构对用户来说是透明的,客户端只与单个IP(虚拟IP)进行通信。客户端向lvs发出服务请求,主控服务器会通过特定的算法来指定某个真实服务器来应答,而客户端只与负载均衡的IP进行通信
LVS 常见算法:
轮询调度RR:
将外部请求按照顺序轮流分配到真实的服务器上
加权轮询WRR:
根据真实服务器的不同处理能力来调度访问请求
最少链接数LC:
调度器通过最少连接调度算法动态的将网络请求调度到以建立的连接数最少的服务器上
(两台服务器配置差不多时使用)
加权最少连接WLC:
优化负载的性能,较高权重的服务器将承受较大比例的活动连接负载
(两台服务器 有一台比较弱时 可以使用)
基于局部性的最少连接 LBLC:
针对目标的IP地址的负载均衡,应用于cache集群上。会根据请求的目标IP地址找出该目标IP地址最近使用的服务器,如果该服务器是可用的没有超载,则将请求发送到服务器上,若服务器不存在,或服务器处于一半的工作负载,则用最少连接数选出一个服务器
带复制的基于局部性的最少连接(locality-Based Least Connections with Replication)
也是针对目标IP地址的负载均衡,用于cache集群。它与LBLC算法不同之处是它要维护的是从一个目标IP地址到一组服务器的映射,而LBLC算法维护的是从一个目标IP地址到一台服务器的映射。
目标地址散列(Destination IP Hashing)
目标地址散列调度算法根据请求的目标IP地址,作为散列键(Hash KEY)从静态分配的散列表中找出对应的服务器,若服务器是可用的且未超载,则请求发送到该服务器,否则返回空。
源地址散列
根据请求的源IP地址,作为散列键从静态分配的散列表中找出对应的服务器,若服务器是可用的且未超载,则请求发送到该服务器,否则返回空。
源IP端口散列
通过hash函数将来自用一个源IP地址和源端口号的请求映射到后端同一台服务器上。
(适合按服务的类型分类)
随机
随机地将请求分发到不同的服务器上
典型的负载均衡集群中,包括三层次的组件,前端至少一个负载均衡调度器(LB)负责相应并发来自客户端的访问请求;后端有大量真实服务器构成服务池(server pool)提供实际的应用服务
透明性 一致性和伸缩性
第一层:
负载调度器,这是访问整个集群系统唯一入口,对外使用所有服务器共有VIP,也称为集群IP,通常会配置主备两台调度器实现热备份。
第二层:
服务器池,集群符提供的应用服务,由服务器池承担。每个节点具有独立的真实IP,只处理调度器分发过来的客户机请求。当某个节点失效时,负载调度器的容错机制会将它隔离,等排出错误后,在从新纳入服务器池
第三层:
共享存储,为服务池中的所有节点提供稳定的,一致的文件存取服务,保证整个集群的统一性
工作模式: 调度技术可以基于IP、端口、内容进行分发。基于IP的效率最高。常见的有三种,地址转换、IP隧道和直接路由。
地址转换:
简称NAT模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,及作为客户机的访问入口,也是各个节点回应客户机的访问出口。服务器节点使用的是私有IP地址
IP隧道:
简称TUN模式,采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器。服务器节点分散在不同的位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信。
直接路由:
简称DR模式,采用半开放式网络结构,与TUN模式的结构类似,但是节点并不是分散的,而是与调度器位于同一物理网络。通过本地网络连接,不需要建立专用IP隧道。
LVS集群的管理工作主要包括创建虚拟服务器、添加服务器节点、查看集群节点状态、删除服务器节点和保存负载分配策略
基础环境:
modprobe ip_vs 加载IPVS模块
cat /proc/net/ip_vs 查看版本号
yum install -y ipvsadm 安装IPvsadm 使用前必须调用这个模块
rpm -ivh /media/cdrom/Packages/ipvsadm-1.26-2.el6.x86_64.rpm 安装IPvsadm 挂盘的路径里
ipvsadm –v 查看版本号
ipvsadm -A -t 192.168.10.100:80 -s rr 创建虚拟服务器
-A 添加虚拟服务器
-t 指定我的VIP地址和端口号
-s 指定负载均衡的调度算法
rr 轮询
wrr加权轮询
lc 最少连接数轮询
wlc加权最少连接数
ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.10:80 -m -w 1 向虚拟服务器里添加真实IP
-a 添加真实的服务器
-t 指定VIP端口 虚拟服务器IP
-r 指定真实节点服务器IP及端口 节点
-m 表示使用nat 模式
-g 表示使用DR模式
-i 表示使用TUN模式 IP隧道模式
-w 1:权重 0:为暂停节点
ipvsadm -ln 查看节点状态
-l 列出lvs的虚拟主机
n 以数字形式显示地址和端口
Masq地址伪装 route采用DR模式 local本地的
ipvsadm -d -r 192.168.10.10:80 -t 192.168.10.100:80 删除节点
ipvsadm -D -t 192.168.10.100:80 删除虚拟服务器
-D 删除虚拟服务器
-d -r删除真实的IP节点
-t 指定服务器IP地址
ipvsadm-save > /etc/sysconfig/ipvsadm 保存策略
service ipvsadm start 开启 如果没有保存stop相当于清空
lvs 192.168.10.14 ---------Nginx192.168.10.11--------Nginx192.168.10.12
192.168.10.100
Net模式:
lvs:
添加一开网卡
vim /etc/sysconfig/network-scripts/ifcfg-eth0 复制
vim /etc/sysconfig/network-scripts/ifcfg-eth1 粘贴 改eth1和网址192.168.10.100
/etc/init.d/network restart 重启
ip a 查看一下
ipvsadm -A -t 192.168.10.100:80 -s rr
ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.11:80 -m -w 1
ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.12:80 -m -w 1
ipvsadm –ln
firefox 192.168.10.100
Nginx 1、2 两台设置页面内容不同即可,其他一致
下面为其中一台Nginx设置
netstat -anput | grep 80
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name ;
location / {
root /var/www/baidu;
index index.html index.htm ;
}
mkdir /var/www/baidu
vim /var/www/baidu/index.html nginx 1
nginx –t
killall -s HUP nginx
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 //最下面添加
nginx -t
nginx
LVS 访问验证:firefox 192.168.10.100
LVS+keepalived
一Web服务器----二Web服务器----三LVS+keepalived主----四LVS+keepalived从----五客户机
192.168.10.11 192.168.10.12 eth0:192.168.10.13 eth0:192.168.10.15
eth1:192.168.11.13 eth1:192.168.11.15 192.168.11.11
内网漂移IP:192.168.10.10
外网漂移IP:192.168.11.9
一、两台LVS+keepalived添加网卡,并且配置IP地址(跟第一个网卡IP设置为不同网段)
右下角电脑---网络适配器---添加---设置和其他虚拟机相同模式 网关都配置为通网段的漂移IP
ip a 查看IP 多了eth1
cd /etc/sysconfig/network-scripts/
ls
cp ifcfg-eth0 ifcfg-eth1
vim ifcfg-eth1 配置第二块网卡
三: DEVICE=eth0 改为eth1
IPADDR=192.168.11.13
NETMASK=255.255.255.0
GATEWAY=192.168.11.9 网关为通网段漂移IP eth0也设置同网段网关
四: DEVICE=eth0 改为eth1
IPADDR=192.168.11.15
NETMASK=255.255.255.0
GATEWAY=192.168.11.9 网关为通网段漂移IP eth0也设置同网段网关
四 网关为通网段漂移IP eth0也设置同网段网关
/etc/init.d/network restart 重新启动网卡 显示eth1 IP地址添加网卡成功
二、调整响应参数(LVS+keepalived两台都一样)
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 //0改为1 把路由转发
添加:
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0
sysctl –p 显示 添加模块
三、安装并配置启动ipvsadm
modprobe ip_vs 添加ip_vs模块
cd /media/cdrom/Packages/
rpm -ivh ipvsadm-1.26-2.el6.x86_64.rpm
service ipvsadm stop
ipvsadm -A -t 192.168.11.9:80 -s rr
ipvsadm -a -t 192.168.11.9:80 -r 192.168.10.11:80 -m -w 1
ipvsadm -a -t 192.168.11.9:80 -r 192.168.10.12:80 -m -w 1
ipvsadm –ln
service ipvsadm save
chkconfig ipvsadm on
service ipvsadm start
四、两台LVS+keepalived安装心跳线(两台一致)
yum install -y kernel-devel openssl-devel popt-devel
tar -zxvf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64
make && make install
service keepalived start
chkconfig --add keepalived
chkconfig keepalived on
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
五、修改keepalived主从配置文件
修改主配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL_R1
}
vrrp_instance VI_1 {
state MASTER
nopreempt //不抢占 master坏了之后 重新上线时不抢占主 主备都要加(迁移会花费资源)
interface eth1
virtual_router_id 1 //准备要相同
priority 100 //从要比主小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.11.9
}
}
vrrp_instance VI_1 {
state MASTER
nopreempt
interface eth0
virtual_router_id 1
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.10
}
}
virtual_server 192.168.11.9 80 {
delay_loop 15
lb_algo rr
lb_kind NAT
protocol TCP
real_server 192.168.10.11 80 { 一下IP为两台web服务器IP地址和web端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
real_server 192.168.10.12 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
}
service keepalived restart
Ip a 查看一下漂移地址
修改从配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL_R2
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface eth1
virtual_router_id 1
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.11.9
}
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 1
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.10
}
}
其他配置和主配置文件一致
service keepalived restart
六、两台Web服务器
(1)设置网页(显示出两台不同效果)
vim /usr/local/nginx/html/index.html 修改标题或者内容 两台修改不同即可 为了显示轮询效果
nginx –t
(2)添加网关
GATEWAY=192.168.10.10 为同网段漂移地址
/etc/init.d/network restart 重新启动网卡
验证:
客户机测试用客户机ping外网的虚拟IP,断开再ping,重新连上再ping
Ping 192.168.11.9 断开主 同样能ping通OK
客户机访问外网虚拟IP并在主LVS服务器查看访问日志
firefox 192.168.11.9
显示两台web页面 OK
主上查看日志 ipvsadm –lnc
断开主 在次Firefox访问192.168.11.9
从上查看日志 ipvsadm –lnc