技术支持
本文实现:对外提供web服务,并在以下技术的基础上,避免提升服务的健壮性和高效性。
基于LVS的负载均衡 //haproxy,naginx可替代
负载均衡技术提升服务的健壮性,保证在高并发情况下服务器仍然可以持久在线提供服务。
基于keepalived的高可用 //pacemaker,corosync,heartbeat可替代
高可用技术提升服务的持久性,保证主服务器出现问题(down机等情况)下,仍然可以对外提供服务
基于nfs的存储共享 //ISCSI,mfs等可替代
保证集群提供服务的一致性
httpd作为web服务器 //不同需求,RS不尽相同,如ftp服务,nginx,mysql,tomcat等
真正提供web服务的主机
网络规划
Client:172.25.254.111
HA:
primer:172.25.254.1 backup:172.25.254.2 VIP:172.25.254.222
LB:
RS1:172.25.254.3 RS2:172.25.254.4
NFS:
172.25.254.5 //nfs应该也有高可用备份(实验局限,不做添加)
NFS配置
nfs server 172.25.254.5;本主机配置nfs服务,将/nfsshare共享到网络上,允许的网段上的用户可以通过mount,挂载到本主机的nfs文件系统上,实现文件共享(同步)目的。
下载nfs server
yum install -y nfs-utils
修改nfs配置文件,共享/nfsshare目录
ehco "/nfsshare 172.25.254.0/24(ro,sync)" > /etc/exports
开启nfs服务
systemctl start nfs
NFS注意事项
[root@nfs ~]# /etc/init.d/nfs status rpc.svcgssd is stopped rpc.mountd (pid 948) is running... nfsd (pid 963 962 961 960 959 958 957 956) is running... //可以看到nfs服务依赖于rpc协议,即nfs可使用前提是rpc提前通信建立通道(初始化)。
rpcbind(老版本称之为portmapper) 端口:111 TCP/UPD
nfsd 端口:2049 TCP/UDP
mountd 端口*** TCP/UDP
HA配置
primer:172.25.254.1
下载安装高可用keepalived包
如果需要最新版本的keepalived则需要自行去官网http://www.keepalived.org/download.html下载安装包,手动编译
yum install keepalived
修改配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from root@ha2.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER //标明为master interface eth0 //使用eht0网卡 virtual_router_id 100 //虚拟路由id,主备之间必须一致 priority 98 //权重,越大越表明资源更倾向 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.25.254.222 //虚拟ip,即VIP } } virtual_server 172.25.254.222 80 { //虚拟主机,实现接收响应报文,并转发给真实主机 delay_loop 6 lb_algo wrr //lvs算法选择,lvs提供十种调度算法,此处使用加权轮询 lb_kind DR //lvs模型选择,DR模式;lvs提供四种模型 nat_mask 255.255.255.0 # persistence_timeout 50 //持久连接,此处屏蔽 protocol TCP //使用TCP协议 real_server 172.25.254.3 80 { //真实主机 IP port weight 3 //权重为3 TCP_CHECK { //基于tcp检测,健康信息 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.25.254.4 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
standby:172.25.254.3
配置和primer配置基本一致,再keepalived的配置文件中,稍有不同:
state BACKUP //标识为备用 priority 98 //此处权重应该比primer小,即资源黏性更倾向于primer
ipvsadm工具
ipvsadm只是ipvs的管理工具,真正的lvs实现是在内核上的ipvs模块。
DR模式介绍
每一个RS都有RIP 和 VIP(VIP都一样),为了不让VIP冲突,RS的VIP被隐藏,不做任何通信,只是用来响应客户端请求时,用作>源地值使用
Director通过修改MAC将数据报文发送给RS,RS上有VIP,就可以接收报文 只需要做一次地址转换,且是请求报文,工作压力小很多,最多支持后端百余台RS1,各节点必须跟Director在同一个物理网络地址中,因为是根据MAC地址传发报文的2,RIP地址,可以不用是私有IP,实现便捷管理(ssh远程连接)3,Director仅负责处理请求报文,响应报文由RS发给客户端4,集群节点一定不能使用Direcotr当作默认网关5,Director不支持端口于映射,因为是RS直接响应的6,大多数操作系统都可用在RS上,RS要求必须可以隐藏VIP7,Director可以处理更多的RS
下载ipvsadm工具
yum install -y ipvsadm
ipvsadm要添加cluster yum源
vim /ect/yum.repos.d/rhel-source.repo
[fsx] name=redhat-fsx baseurl=http://172.25.254.111/fsx6.5 //yum源各有不同,自行配置自己的yum源 gpgcheck=0 enabled=1 [cluster] name=redhat-cluster baseurl=http://172.25.254.111/fsx6.5/LoadBalancer //添加机群yum源 gpgcheck=0 enabled=1
开启服务
/etc/init.d/ipvsadm start
//启动服务
/etc/init.d/ipvsadm start
//启动服务
chkconfig keepalived on
//开机自启keepalived
chkconfig ipvsadm on
//开机自启ipvsadm
RS配置
服务资源配置
RS为客户端提供httpd服务,实现负载均衡后端RS集群
RS1:172.25.254.3 RS2:172.25.254.4 配置流程如下:
安装httpd服务,RS1,RS2同时配置
yum install -y httpd
挂载共享目录,到httpd的发布目录,RS1,RS2同时配置
mount -t nfs 172.25.254.5:/nfsshare /var/wwww/html
编辑测试页,RS1配置即可
echo "server.test.com" > /var/www/html/index.html
开启服务
/etc/init.d/httpd start
chkconfig httpd on
查看httpd服务:
[root@lb1 conf]# netstat -antple |grep httpd tcp 0 0 :::80 :::* LISTEN 0 9210 1124/httpd //httpd server监听80端口
隐藏VIP配置
因为lvs服务选取DR模型,lvs和RS之间依靠ARP协议,使用物理地址通信,响应报文由RS直接发送给Clients,所以RS需要添加VIP,又因为RS和LVS服务在同一网段,为了避免VIP冲突,需要隐藏RS上的VIP(即RS上的VIP仅仅做为响应服务时的源IP使用)。具体方法如下:
添加RS:VIP
ifconfig lo:0 172.25.254.222/32 broadcast 172.25.254.222 up
//vip对外不可见,netmask为24,且网关不可指向Director(lvs服务器)
route add -host 172.25.254.222 dev lo:0
//添加路由选项,由lo别名执行转发
添加隐藏规则
cd /proc/sys/net/ipv4/conf
echo 1 > all/arp_ignore
echo 1 > eth0/arp_ignore
echo 2 > all/arp_announce
echo 2 > eth0/arp_announce
注意:
arp_announce:定义将自己地址向外通告时的通告级别
0:将本地任何接口上的任何IP进行通告 1:尽可能避免通告非最佳IP 2:仅使用最佳本地IP进行通告
arp_ignore:定义接收到ARP请求时的响应级别
0:只要本地配置有响应地址,无论在哪个接口上,就都响应 1:仅仅响应请求的IP的网卡结构的地址
解决DR模型下,RS和Director的IP冲突办法:
1,vip:MAC(dvip)2,arptables //一个管理工具3,kernel parameter
//此处用的是第三种方法
测试
Client:172.25.254.111
浏览器访问:
[]: http://172.25.254.222/index.html
得到返回数据:
server.test.com
压力测试
ab -n 10000 -c 100 http://172.25.254.222/index.html
执行结果:
This is ApacheBench, Version 2.3 <>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 172.25.254.222 (be patient)Completed 1000 requestsCompleted 2000 requestsCompleted 3000 requestsCompleted 4000 requestsCompleted 5000 requestsCompleted 6000 requestsCompleted 7000 requestsCompleted 8000 requestsCompleted 9000 requestsCompleted 10000 requestsFinished 10000 requests
Server Software: Apache/2.2.15Server Hostname: 172.25.254.222Server Port: 80
Document Path: /index.htmlDocument Length: 27 bytes
Concurrency Level: 100Time taken for tests: 6.404 secondsComplete requests: 10000Failed requests: 0Write errors: 0Total transferred: 2950000 bytesHTML transferred: 270000 bytesRequests per second: 1561.56 [#/sec] (mean)Time per request: 64.038 [ms] (mean)Time per request: 0.640 [ms] (mean, across all concurrent requests)Transfer rate: 449.86 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 5 60.9 1 1009Processing: 1 58 37.2 72 299Waiting: 0 57 36.6 71 299Total: 1 63 71.9 74 1099
Percentage of the requests served within a certain time (ms) 50% 74 66% 82 75% 85 80% 87 90% 93 95% 98 98% 115 99% 155 100% 1099 (longest request)
再服务器端执行ipvsadm进行监控:
[root@ha1 ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 172.25.254.222:80 wrr -> 172.25.254.3:80 Route 3 2 7507 -> 172.25.254.4:80 Route 1 0 2502
[root@ha1 ~]# ipvsadm -L --statsIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -> RemoteAddress:PortTCP 172.25.254.222:http 20072 100427 0 7242973 0 -> 172.25.254.3:http 15054 75337 0 5433057 0 -> 172.25.254.4:http 5018 25090 0 1809916 0
真实数据共享
将需要共享的数据,使用软链接(或者直接挪动)指向172.25.254.5的/nfsshare,即可实现网络上的数据服务
注意:要让服务上线,需要考虑整个服务的开启顺序,避免服务断点