0%

环境搭建- -LVS

构建集群服务器——通过整合多台相对廉价的普通服务器,以同一个ip地址对外提供相同的服务。

集群技术概述

集群的类型

  • 负载均衡集群:获得高并发、高负载(LB)的整体性能
    DNS轮询、应用层交换、反向代理等都可用作负载均衡群集
  • 高可用集群:以提高应用系统的可靠性、减少终端时间为目标,确保服务连续性,达到高可用(HA)容错效果。
    故障切换、双击热备、多机热备等都属于高可用群集技术。
  • 高性能运算集群:通过专用硬件好软件将多个服务器的CPU、内存等资源整合在一起,实现超级计算机的能力云计算、网络计算

负载均衡的分层结构

  • 第一层:负载调度器
  • 第二层:服务器池
  • 第三层:共享存储,NSA设备、NFS共享服务

负载均衡工作模式

关于群集的负载调度技术,可以基于IP、端口、内容等进行分发,其中基于IP的负载调度是效率最高的,基于IP的负载均衡模式中,常见的有地址转换、IP隧道和
直接路由三种工作模式。

三种方式:

  • 地址转换:NAT模式,类似于防火墙的私有网络结构
  • IP隧道:简称TUN模式,采用开放式的网络结构。负载均衡调度器仅作为客户机的访问入口,各个节点通过各自的Internet链接直接回应客户机,而不再经过负载调度器。
  • 直接路由:简称DR模式,采用半开放式的网络结构,与TUN模式类似,但节点与调度器同在一个物理网络。

LVS虚拟服务器

Linux Virtual Server是针对Linux内核开放的一个负载均衡项目。LVS实际上相当于基于IP地址的虚拟化应用。

类似于iptables的架构,在内核中有一段代码用于实时监听数据包来源的请求,当数据包到达端口时做一次重定向。这一系列的工作必须在内核中实现。在内核中
实现数据包请求处理的代码叫做ipvs。Ipvs仅仅提供了功能框架,还需要自己手动定义是数据对哪个服务的请求。

这种定义需要通过写规则来实现,写规则的工具就称为ipvsadm

LVS现在已经称为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调用

1
2
modprobe ip_vs			//加载模块
cat /proc/net/ip_vs //查看版本信息

LVS的负载调度常用算法

  • 轮询:将受到的访问请求按照顺序轮流分配给群集中的各个节点
  • 加权轮询:根据服务器的处理能力轮流分配到的访问请求
  • 最少链接:根据服务器已建立的连接数进行分配,优先分配链接少的节点
  • 加权最少链接:在服务器节点的性能差异较大的情况下,可以为服务器自动调整权重

使用ipvsadm管理工具

Ipvsadm是在负载调度器上使用LVS群集管理工具,通过调用ip_vs模块来添加、删除服务器节点,以及查看群集的运行状态

1
2
rpm –ivh /media/cdrom/Packages/ipvsadm-1.26
ipvsadm –v

LVS群集的管理工作: 创建虚拟服务器、添加服务器节点、查看群集节点状态、删除服务器节点、保存负载分配策略

创建虚拟服务器

1
2
3
ipvsadm –A –t 172.16.16.172:80 –s rr
# -A 添加虚拟服务器 -t指定VIP地址 -s指定负载调度算法
# rr 轮询 wrr加权轮询 lc最少链接 wlc 加权最少链接

添加服务器节点

1
2
3
4
ipvsadm –a –t 172.16.16.172:80 –r 192.168.71.21:80 –m –w
# -a添加真实服务器 -t指定VIP地址 -r指定RIP地址
# -m表示NAT群集模式(-g DR模式 –I TUN模式)
# -w 设置权重(0表示暂定节点)

查看群集节点状态

1
2
3
4
ipvsadm –ln
# 删除服务器节点
ipvsadm –d –r 192.168.71.21:80 –r 172.16.16.172:80
ipvsadm –D–r 192.168.71.21:80 # 删除整个虚拟服务器

NFS共享存储服务

  • Network File System,网络文件系统
    • 依赖于RPC(远端过程调用)
    • 需安装nfs-utils、rpcbind软件包
    • 系统服务:nfs、rpcbind
    • 共享配置文件:/etc/exports
  • 使用NFS发布共享资源
    • 安装nfs-utils、rpcbind软件包
    • 设置共享目录
    • 启动NFS服务程序
    • 查看本机发布的NFS共享目录
  • 在客户机中访问NFS共享资源
    • 安装rpcbind软件包,并启动rpcbind服务
    • 手动挂载NFS共享目录
    • fstab自动挂载设置

构建LVS负载均衡群集

LVS-配置负载调度器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 开启路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# 重新加载配置文件
sysctl –p
# 清空FORWARD连得的规则
iptables -F FORWARD
# 设置SNAT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 192.168.104.1
# 加载模块
modprobe ip_vs
#查看模块版本
cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn

安装ipvsadm工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 查看 ipvsadm 是否安装
rpm -qa |grep ipvsadm
# 安装
rpm -ivh /media/RHEL_6.5\ x86_64\ Disc\ 1/Packages/ipvsadm-1.26-2.el6.x86_64.rpm
# 查看信息
ipvsadm -v
# ipvsadm v1.26 2008/5/15 (compiled with popt and IPVS v1.2.1)
# 清除原有策略
service ipvsadm stop
# 配置策略
ipvsadm -A -t 192.168.104.1:80 -s rr
ipvsadm -a -t 192.168.104.1:80 -r 192.168.1.20:80 -m -w 1
ipvsadm -a -t 192.168.104.1:80 -r 192.168.1.30:80 -m -w 1
# 查看策略运行
ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
# Prot LocalAddress:Port Scheduler Flags
# -> RemoteAddress:Port Forward Weight ActiveConn InActConn
# TCP 192.168.104.2:80 rr
# -> 192.168.1.20:80 Masq 1 0 0
# -> 192.168.1.30:80 Masq 1 0 0
# 保存配置
service ipvsadm save
# ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [确定]

# 修改apache配置文件,并启动
vim /etc/httpd/conf/httpd.conf
ServerName www.example.com:80
# 添加测试页面
vim /var/www/html/index.html
# 启动服务
service httpd start
# 正在启动 httpd: [确定]
# 测试(在虚拟机里面注意关闭真实网卡,再测试)

搭建 NFS 共享存储服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 安装 nfs-utils rpcbind 服务(一般默认安装了)
rpm -qa |grep "nfs"
# nfs-utils-1.2.3-39.el6.x86_64
rpm -qa |grep "rpcbind"
# rpcbind-0.2.0-11.el6.x86_64
# 创建目录
# mkdir /wwwroot
修改配置文件
# vim /etc/exports
/wwwroot 192.168.1.0/24(rw,sync,no_root_squash)
# 启动nfs(rpcbind默认已经启动)
service nfs start
# 查看
showmount -e 192.168.1.40
Export list for 192.168.1.40:
/wwwroot 192.168.1.0/24
# 建立测试页面
vim /wwwroot/index.html
# 节点服务器挂载
# 节点服务器只需启动rpcbind(rpcbind默认已经启动)
mount 192.168.1.40:/wwwroot /var/www/html
# 测试

直接路由模式LVS-DR

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 配置虚拟ip(VIP)
ifconfig eth0:0 192.168.104.10/32
# 修改配置文件
vim /etc/sysctl.conf
# 新加配置
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0
# 重新加载配置
sysctl –p
ipvsadm -A -t 192.168.104.10:80 -s rr
ipvsadm -a -t 192.168.104.10:80 -r 192.168.104.21 -g -w 1
ipvsadm -a -t 192.168.104.10:80 -r 192.168.104.31 -g -w 1

cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.104.10
NETMASK=255.255.255.255
ONBOOT=yes
ifup lo:0
route add -host 192.168.104.10 dev lo:0

cat >> /etc/sysct.conf <<EOF
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOF
sysctl –p
# 重新挂载
mount 192.168.1.40:/wwwroot /var/www/html/