集群及LVS

集群及LVS

集群:一组通过高速网络互联的计算组,并以单一系统的模式加以管理

  将很多服务器集中起来一起,提供同一种服务,在客户端看来就象是只有一个服务器

  可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益

  任务调度是集群系统中的核心技术

 

集群的目的:

  • 提高性能:如计算密集型应用,如:天气预报、核试验模拟
  • 降低成本:相对百万美元级的超级计算机,价格便宜
  • 提高可扩展性:只要增加集群节点即可
  • 增强可靠性:多个节点完成相同功能,避免单点失败

 

集群分类:

  • 高性能计算(HPC)集群:通过以集群开发的并行应用程序,解决复杂的科学问题
  • 负载均衡(LB)集群:客户端负载在计算机集群中尽可能平均分摊
  • 高可用(HA)集群避免单点故障,当一个系统发生故障时,可以快速迁移

 

LVS概述

LVS项目介绍

  • Linux虚拟服务器(LVS)是章文嵩在国防科技大学就读博士期间创建的
  • LVS可以实现高可用的、可伸缩的Web、Mail、Cache和Media等网络服务
  • 最终目标是利用Linux操作系统和LVS集群软件实现一个高可用、高性能、低成本的服务器应用集群

 

LVS集群组成:

前端:负载均衡层——由一台或多台负载调度器构成

中间:服务器群组层——由一组实际运行应用服务的服务器组成

底端:数据共享存储层——提供共享存储空间的存储区域

 

LVS术语:

Director Server调度服务器——将负载分发到Real Server的服务器

Real SErver真实服务器——真正提供应用服务的服务器

VIP虚拟IP地址——公布给用户访问的虚拟IP地址

RIP真实IP地址——集群节点上使用的IP地址

DIP调度器连接节点服务器的IP地址

 

LVS工作模式:

集群及LVS_第1张图片

VS/NAT:通过网络地址转换实现的虚拟服务器

 大并发访问时,调度器的性能成为瓶颈

VS/DR直接使用路由技术实现虚拟服务器

     节点服务器需要配置VIP,注意MAC地址广播(生产环境中最常用)

VS/TUN:通过隧道方式实现虚拟服务器

 

负载均衡调度算法:LVS目前实现了10种调度算法

常用调度算法有4种:轮询、加权轮询、最少连接、加权最少连接

轮询Round Robin):将客户端请求平均分发到Real Server

加权轮询Weighted Round Robin):根据Real Server权重进行轮询调度

最少连接Least Connections):选择连接最少的服务器

加权最少连接Weighted Least Connections):根据Real Server权重值,选择连接最少的服务器

源地址散列(Source Hashing):根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器——hash运算分发

其他调度算法:基于局部性的最少链接、带复制的基于局部性最少链接、目标地址散列(Destination Hashing)、最短的期望的延迟、最少队列调度

 

LVS-NAT集群

LVS负载均衡技术是通过IPVS模块实现的

IPVS模块已成为Linux组成部分

[root@lvs33 ~]# grep -i "ipvs" /boot/config-2.6.32-573.el6.x86_64

# IPVS transport protocol load balancing support

# IPVS scheduler

# IPVS application helper

集群及LVS_第2张图片

操作流程

Real Server:配置web服务器

Director Server:在上安装并启用ipvsadm;创建虚拟服务器;向虚拟服务器中加入节点

Client:连接虚拟服务器测试

部署lvs/nat的LB集群:

一、环境准备:

  1.  做分发器的主机开启内核路由转发功能

 

[root@lvs33 ~]# vim /etc/sysctl.conf    //打开ip_forward

[root@lvs33 ~]# sed -n "7p" /etc/sysctl.conf

net.ipv4.ip_forward = 1

[root@lvs33 ~]# sysctl -a | grep ip_forward

[root@lvs33 ~]# sysctl -p

 

2. 有2台主机做网站服务器

[root@web44 ~]# yum -y install httpd

[root@web44 ~]# service httpd start

[root@web44 ~]# echo "CCCCCCCCCCC" > /var/www/html/test.html

[root@web44 ~]# chkconfig httpd on

[root@web44 ~]# ping -c 2 192.168.4.33

 

[root@web55 ~]# yum -y install httpd

[root@web55 ~]# service httpd start

[root@web55 ~]# echo "DDDDDDDDDD" > /var/www/html/test.html

[root@web55 ~]# chkconfig httpd on

[root@web55 ~]# ping -c 2 192.168.4.33

 

3. 1台机器做客户端

[root@client22 ~]#

  1. 客户端主机和网站服务器都要指定网关地址(分发器主机和自己直连的IP地址)

[root@web44 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

GATEWAY=192.168.4.33

[root@web44 ~]# service network restart

[root@web44 ~]# route -n

 

[root@web55 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

GATEWAY=192.168.4.33

[root@web55 ~]# service network restart

[root@web55 ~]# route -n

 

[root@client22 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1

GATEWAY=192.168.2.33

[root@client22 ~]# service network restart

[root@client22 ~]# route -n

[root@client22 ~]# ping -c 2 192.168.4.33

[root@client22 ~]# ping -c 2 192.168.4.44

[root@client22 ~]# ping -c 2 192.168.4.55

 

  • 配置做分发器的主机

1. 安装提供linux虚拟服务的软件包

[root@lvs33 ~]# rpm -q ipvsadm || rpm -ivh /mnt/LoadBalancer/ipvsadm-1.26-4.el6.x86_64.rpm

[root@lvs33 ~]# ipvsadm -v

[root@lvs33 ~]# which ipvsadm

[root@lvs33 ~]# ipvsadm --help

[root@lvs33 ~]# man ipvsadm         //查看ipvsadm用法

ipvsadm用法:

创建虚拟服务器:-A 添加虚拟服务器

-t 设置群集地址(VIP,Virtual IP)

-s 指定负载调度算法

添加、删除服务器节点:-a 添加真实服务器

  -d 删除真实服务器

  -r 指定真实服务器(Real Server)的地址

  -m 使用NAT模式

  -g 使用DR模式

  -i 使用TUN模式

  -w 为节点服务器设置权重,默认为1

表 ipvsadm语法格式

集群及LVS_第3张图片

  1. 添加LVS虚拟集群服务

[root@lvs33 ~]# ipvsadm -A -t 192.168.2.33:80 -s rr -p 30

  1. 向虚拟集群服务里添加real server

[root@lvs33 ~]# ipvsadm -a -t 192.168.2.33:80 -r 192.168.4.44:80 -m

[root@lvs33 ~]# ipvsadm -a -t 192.168.2.33:80 -r 192.168.4.55:80 -m

  1. 保存配置

[root@lvs33 ~]# service ipvsadm save         //保存所有规则

也可用ipvsadm-save >/etc/sysconfig/ipvsadm

[root@lvs33 ~]# cat /etc/sysconfig/ipvsadm

-A -t 192.168.2.33:80 -s rr

-a -t 192.168.2.33:80 -r 192.168.4.44:80 -m -w 1

-a -t 192.168.2.33:80 -r 192.168.4.55:80 -m -w 1

[root@lvs33 ~]# chkconfig --list ipvsadm

[root@lvs33 ~]# chkconfig ipvsadm on

5. 查看配置

[root@lvs33 ~]# ipvsadm -Ln                //查看LVS状态,这两个选项不能写反

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.2.33:80 rr

  -> 192.168.4.44:80              Masq    1      0          0         

  -> 192.168.4.55:80              Masq    1      0          0  

 

修改集群服务器设置

[root@lvs33 ~]# ipvsadm -E -t 192.168.2.33:80  -s lc   //修改Director调度算法

[root@lvs33 ~]# ipvsadm -E -t 192.168.2.33:80  -s wrr   //wrr加权轮询

 

[root@lvs33 ~]# ipvsadm -d -t 192.168.2.33:80 -r 192.168.4.44:80   //删除

[root@lvs33 ~]# ipvsadm -Ln

[root@lvs33 ~]# ipvsadm -a -t 192.168.2.33:80 -r 192.168.4.44:80 -m  //添加

[root@lvs33 ~]# ipvsadm -Ln

[root@lvs33 ~]# service ipvsadm save

 

[root@lvs33 ~]# ipvsadm -C      //清空所有规则

[root@lvs33 ~]# ipvsadm -e -t 192.168.2.33:80 -r 192.168.4.55:80 -w 2 -m

 

[root@lvs33 ~]# ipvsadm -Ln --stats

  • 客户端验证

[root@client22 ~]# yum -y install elinks

[root@client22 ~]# elinks --dump http://192.168.2.33/test.html

[root@client22 ~]# ab -c 10 -n 1000 http://192.168.2.33/test.html     //使用ab进行大并发测试

 

部署LVS/DR的LB集群:

广播包在相同网络内的主机都能够收到

集群及LVS_第4张图片

操作流程

Real Server:配置web服务器;配置辅助IP地址、调整内核参数

Director Server:在上安装并启用ipvsadm;创建虚拟服务器;向虚拟服务器中加入节点

Client:连接虚拟服务器测试

ARP广播的问题:

当客户端发起访问VIP对应的域名的请求时,根据网络通信原理会产生ARP广播;

因为负载均衡器和真实的服务器在同一网络并且VIP设置在集群中的每个节点上;

此时集群内的真实服务器会尝试回答来自客户端的ARP广播,这就会产生问题,大家都说我是“VIP”

内核参数说明:

arp_ignore(定义回复ARP广播的方式):

0(默认值):回应所有的本地地址ARP广播,本地地址可以配置在任意网络接口

1:只回应配置在入站网卡接口上的任意IP地址ARP广播

arp_announce:

0(默认值):使用配置在任意网卡接口上的本地IP地址

2:对查询目标使用最适当的本地地址。在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址。首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送

 

使用ARP防火墙禁止对VIP的ARP请求

[root@client22 ~]# yum -y install arptables_if  //装包未成功,另找时间尝试

[root@client22 ~]# arptables -A IN -d -j DROP

[root@client22 ~]# arptables -A OUT -s -j mangle --mangle-ip-s

 

环境准备:

  1. 先把NAT环境下的LVS连接外网的IP移除

[root@lvs33 ~]# ifdown eth1

[root@web44 ~]# route del default gw 192.168.4.33

[root@web55 ~]# route del default gw 192.168.4.33

2、清空lvs nat配置

[root@lvs33 ~]# ipvsadm -C

[root@lvs33 ~]# service ipvsadm save

[root@lvs33 ~]# ipvsadm -Ln

[root@lvs33 ~]# cat /etc/sysconfig/ipvsadm

3、

[root@client22 ~]# ping -c 2 192.168.4.96   //验证未被使用

 

  • 配置real server
  1. 绑定vip地址

[root@web44 ~]# echo "ifconfig lo:1" >> /etc/rc.local

[root@web44 ~]# echo "ifconfig  lo:1 192.168.4.96/32" >> /etc/rc.local

[root@web55 ~]#  echo "ifconfig  lo:1" >> /etc/rc.local

[root@web55 ~]#  echo "ifconfig  lo:1 192.168.4.96/32" >> /etc/rc.local

 

  1. 在两台网站服务器上,修改网卡参数,帮助兄弟接口收发IP包——在real server上配置内核参数

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

  • 配置分发器
  1. 绑定vip地址

[root@lvs33 ~]# echo "ifconfig  eth0:1" >> /etc/rc.local

[root@lvs33 ~]#  echo "ifconfig  eth0:1 192.168.4.96/32" >> /etc/rc.local

  1. 添加Linux虚拟服务,并添加real server

[root@lvs33 ~]# ipvsadm -A -t 192.168.4.96:80 -s rr

[root@lvs33 ~]# ipvsadm -a -t 192.168.4.96:80 -r 192.168.4.44:80 -g 

[root@lvs33 ~]#ipvsadm -a -t 192.168.4.96:80 -r 192.168.4.55:80  //这里-g可省略

  1. 保存配置

[root@lvs33 ~]# ipvsadm -Ln

[root@lvs33 ~]# service ipvsadm save

  1. 查看配置信息

[root@lvs33 ~]# ipvsadm -Ln

[root@lvs33 ~]# cat /etc/sysconfig/ipvsadm

[root@lvs33 ~]# ipvsadm -Ln --stats

  • 在客户端验证配置

[root@client22 ~]# yum -y install elinks

[root@client22 ~]# elinks --dump http://192.168.4.96/test.html

[root@lvs33 ~]# ipvsadm -Ln --stats

 

 

 

总结:

LVS/NAT地址转换模式

 

LVS/DR直接路由模式

分发器接收到连接请求后, 根据调度算法,分发连接请求给指定的real server,real server直接和客户端通信。

Vip地址要与real server在一个网段内

 

 

1、清理lvs配置

[root@lvs33 ~]# ipvsadm -D -t 192.168.4.33:80

[root@lvs33 ~]# systemctl stop ipvsadm.service

不管是LVS的VIP,还是内核参数的调整,在HAProxy中都不是必须的,但是也不会对HAProxy产生任何影响,所以不必清除

 

 

 

LAMP分离结构

1、准备三台虚拟机

vh01.tedu.cn 192.168.4.1

vh02.tedu.cn 192.168.4.2

vh03.tedu.cn 192.168.4.3

2、初始化配置

防火墙、selinux、IP地址、主机名、YUM

3、在vh01上配置数据库

[root@vh01 ~]# yum install -y mariadb-server

[root@vh01 ~]# systemctl start mariadb

[root@vh01 ~]# systemctl enable mariadb.service

[root@vh01 ~]# mysql -uroot

MariaDB [(none)]> grant all on *.* to 'admin'@'192.168.4.2' identified by 'tedu.cn';

MariaDB [(none)]> grant all on *.* to 'admin'@'192.168.4.3' identified by 'tedu.cn';

4、在两台web服务器上安装软件包并启动服务

[root@vh02 ~]# yum install -y httpd php php-mysql

[root@vh02 ~]# systemctl start httpd

[root@vh02 ~]# systemctl enable httpd.service

5、在vh02上安装Discuz

[root@vh02 ~]# unzip Discuz_X3.0_SC_UTF8.zip

[root@vh02 ~]# cp -r upload/ /var/www/html/bbs

[root@vh02 bbs]# firefox http://192.168.4.2/bbs &

改权限

将web页面中权限不满足要求的数据复制到/var/www/html/a.txt中

[root@vh02 bbs]# pwd

/var/www/html/bbs

[root@vh02 bbs]# chmod 777 $(awk '{print $1}' /var/www/html/a.txt)

6、将vh02上的bbs目录打包拷贝到vh03,解压缩

 

 

LVS nat模式

1、修改web服务器网关

# nmtui

# ifdown eth0; ifup eth0

2、配置调度器有双网卡地址

eth2: 201.1.1.4/24  

3、打开路由转发功能

[root@vh04 ~]# sysctl -a | grep ip_forward   查看

[root@vh04 ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf

[root@vh04 ~]# sysctl -p

4、安装

[root@vh04 ~]# yum install -y ipvsadm

5、配置

[root@vh04 ~]# ipvsadm -A -t 201.1.1.4:80 -s rr

[root@vh04 ~]# ipvsadm -a -t 201.1.1.4:80 -r 192.168.4.2 -m -w 2

[root@vh04 ~]# ipvsadm -a -t 201.1.1.4:80 -r 192.168.4.3 -m

6、验证

[root@vh04 ~]# ipvsadm -Ln

[root@room9pc16 ~]# firefox http://201.1.1.4/bbs &

每隔1秒运行一次ipvsadm -Ln

[root@vh04 bin]# watch -n 1 ipvsadm -Ln

7、保存规则

[root@vh04 bin]# /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm

8、重启服务

[root@vh04 bin]# systemctl restart ipvsadm.service

9、修改调度算法为lc

[root@vh04 bin]# ipvsadm -E -t 201.1.1.4:80 -s lc

10、每次发送10个请求,一共发送100个

[root@room9pc16 ~]# ab -n 100 -c 10 http://201.1.1.4/

 

LVS DR模式

1、清理vh04的配置,清除201.1.1.4ip地址,清除LVS规则

如果后台脚本还在运行,先杀掉后台进程

[root@vh04 bin]# jobs

[1]+  运行中               bash monitor_web.sh &

[root@vh04 bin]# kill %1

清除IP地址

[root@vh04 bin]# vim /etc/sysconfig/network-scripts/ifcfg-eth2

[root@vh04 bin]# ifdown eth2

清除规则

[root@vh04 bin]# ipvsadm -D -t 201.1.1.4:80

[root@vh04 bin]# systemctl restart ipvsadm.service

2、在调度器上配置vip

[root@vh04 bin]# cp /etc/sysconfig/network-scripts/ifcfg-eth0{,:0}

[root@vh04 bin]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:0

修改以下三行

NAME=eth0:0

DEVICE=eth0:0

IPADDR=192.168.4.100

[root@vh04 bin]# ifup eth0:0

3、在web服务器上配置vip

[root@vh02 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo{,:0}

[root@vh02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0

IPADDR=192.168.4.100

NETMASK=255.255.255.255

NETWORK=192.168.4.100

BROADCAST=192.168.4.100

ONBOOT=yes

NAME=loopback

[root@vh02 ~]# ifup lo:0

[root@vh02 ~]# scp /etc/sysconfig/network-scripts/ifcfg-lo:0 192.168.4.3:/etc/sysconfig/network-scripts/

[root@vh03 html]# ifup lo:0

4、在两台web服务器上修改内核参数

[root@vh02 ~]# sysctl -a | grep arp_ig

[root@vh02 ~]# echo 'net.ipv4.conf.all.arp_ignore = 1' >> /etc/sysctl.conf

[root@vh02 ~]# echo 'net.ipv4.conf.lo.arp_ignore = 1' >> /etc/sysctl.conf

[root@vh02 ~]# sysctl -a | grep arp_an

[root@vh02 ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf

[root@vh02 ~]# echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf

[root@vh02 ~]# sysctl -p

5、配置LVS规则,不写或者使用-g选项,都表示DR模式

[root@vh04 bin]# ipvsadm -A -t 192.168.4.100:80 -s lc

[root@vh04 bin]# ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.2

[root@vh04 bin]# ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.3 -g

[root@vh04 bin]# ipvsadm -Ln

你可能感兴趣的:(LVS)