构建集群服务器——通过整合多台相对廉价的普通服务器,以同一个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
|
添加服务器节点
1 2 3 4
| ipvsadm –a –t 172.16.16.172:80 –r 192.168.71.21:80 –m –w
|
查看群集节点状态
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
iptables -F FORWARD
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
| 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
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)
service ipvsadm save
vim /etc/httpd/conf/httpd.conf ServerName www.example.com:80
vim /var/www/html/index.html
service httpd start
|
搭建 NFS 共享存储服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| rpm -qa |grep "nfs"
rpm -qa |grep "rpcbind"
修改配置文件
/wwwroot 192.168.1.0/24(rw,sync,no_root_squash)
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
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
| 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/
|