您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > Bypat博客出品-服务器运维集群方法总结
网站集群架构网站集群架构网站集群架构网站集群架构网站集群架构网站集群架构网站集群架构网站集群架构利用开源软件构建高可用、高性能、可扩展的集群系统ॳ㗙˖兰锋bluedata@gmail.com摘要•1.GSLB:全局负载均衡•2.SLB:服务器负载均衡•四层交换LVS•七层交换Nginx•3.Heartbeat实现HA•4.MySQL数据库集群•5.集群环境下的存储备份•6.集群的监控及管理GSLB-GlobalServerLoadBalance•GSLB是GlobalServerLoadBalance的缩写,意思是全局负载均衡。•实现在广域网(包括互联网)上不同地域的服务器间的流量调配。•使用最佳的服务器(组)为最近的访问者提供服务,从而确保访问质量。GSLB架构图多IDC与单IDC的对比•好处•可用:不会因某一IDC机房由于“不可抗力”造成的网络中断而影响访问,可用性高。•容灾:可避免灾难性事件(比如地震)造成无可挽回的数据丢失。•速度:机房离访问者更近,访问质量更高。•坏处•实现复杂:流量分配问题,数据同步问题。•管理复杂:跨地区、距离远,维护麻烦。•成本较高:要在多个IDC租用机柜或机位。利用Bind9的视图功能实现GSLB1•catnamed.conf•...•includeacl_chinanet.conf;•viewchinanet{•match-clients{chinanet;};•...•includeacl_cnc.conf;•viewcnc{•match-clients{cnc;};•...•viewother{•match-clients{any;};•...利用Bind9的视图功能实现GSLB2•catacl_chinanet.conf•aclchinanet{•58.32.0.0/13;•58.40.0.0/15;•...•222.222.0.0/15;•222.240.0.0/13;•};•acl_cnc.conf则为网通的IP段。•然后分别定义各视图zone文件中域名所对应的IP地址。•详细原理可参考GSLBusingxBayDNS:•SLB是ServerLoadBalancing的缩写,意思是服务器负载均衡。可实现多个服务器之间的负载均衡。•当客户端向虚拟服务器(虚拟服务器是多个真实服务器的群集)发起连接时,通过均衡算法转发到真实服务器。LVS-LinuxVirtualServer•LVS是在Linux内核中做四层交换。•LVS只用128个字节记录一个连接信息,512M可用内存即可支持四百万条连接数,性能很高。•Linux2.6内核已经包含了ipvs模块,只需安装ipvsadm。•真实服务器需要解决ARP问题(ARP缓存造成的ARP“欺骗”)•arp_ignore=1##只要这台机器上面任何一个设备有这个IP,就响应ARP请求,并发送MAC地址应答。•arp_announce=2##发送ARP请求时只使用本设备的IP地址和MAC地址,避免造成ARP欺骗。•LVS的有关中文文档:架构图Nginx•Nginx(enginex)是一个高性能的HTTP和反向代理服务器。七层交换,大约能支持五万个并发连接。•可以通过定义upstream实现后端应用服务器(如运行php-cgi的机器)的负载均衡。•upstreamphp-fcgi{•server192.168.0.101:9000weight=5;•server192.168.0.102:9000weight=4;•server192.168.0.103:9000weight=3;•}•location~.*\.php?${•fastcgi_passphp-fcgi;•includefastcgi_params;•}ngx_http_upstream_hash_module•urlhash是用于提高squid群集命中率的一种算法。•通过DNS或LVS可以把流量分配到多个squid节点,但每台squid的缓存数据是重复的。•对$request_uri进行hash,并把所有访问都转发到后端的squid:•upstreamsquid{•serversquid1:3128;•serversquid2:3128;•hash$request_uri;•}•location/{•proxy_pass•includeproxy.conf;•}Nginxurlhash的高可用性•当有squid主机失效时,访问相应的页面会出现502错误。•可以定义hash_again及proxy_next_upstream,在有缓存节点失效时,可以重新hash。但这会对整个缓存池造成冲击。•利用error_page来实现故障的转移:•error_page502=@fetch;•location@fetch{•proxy_pass•includeproxy.conf;•}•upstreambackup{•serversquid_backup_1:3128;•serversquid_backup_2:3128;•}•Nginx的中文维基:•Heartbeat最核心的两个部分:心跳监测部分和资源接管部分。•心跳监测可以通过网络或串口进行,而且支持冗余链路,节点之间相互发送报文来告诉对方自己当前的状态。如果一个节点在指定的时间内未收到对方发送的报文,那么就认为对方失效。•这时需要启动资源接管模块来接管运行在对方主机上的资源或服务。•直接安装heartbeat包即可,还可安装ldirectord(forDebian)监测和管理LVS集群中的真实服务器(CentOS下是heartbeat-ldirectord)。•使用网络监测要注意同一网络中存在多个HA应用时的广播(bcast)造成的干扰,这种情况下应该使用单播(ucast)。•危险的脑裂(split-brain)。•Heartbeat应用在操作存储设备的情况下是有一定的风险的。Heartbeat+LVS+Nginx+Squid+PHPMySQL数据库集群•1.MySQLCluster•2.MySQL复制之一主多从模式•3.MySQL复制之多主模式•4.MySQL复制之级联复制MySQLCluster架构图不用考虑读写分离问题。SQL节点需要使用LVS做流量的分配。NDB的性能较低(新发布的MySQLCluster7.0有所改善)。稳定性尚有待提高。生产环境下的应用实例太少。MySQL一主多从模式架构图MySQL一主多从模式的要点•读写分离会使应用层变的更复杂。•可以用MySQL-Proxy实现读写分离,而多个slave可以由LVS调度。•MySQL-Proxy同样存在稳定性问题,多了一层结构当然也就多了一个故障点。•修改应用程序的数据库连接类实现读写分离是较为常见的做法。•不能在slave上做实时查询,需要实时查询的应用只能走master,这需要在应用层做区分。MySQL一主多从模式的集群方案Heartbeat+DRBD+LVSMySQL+Heartbeat+DRBD+LVS•MySQL+DRBD是MySQL官方网站上推荐的一个方案。解决了master的单点问题。•用ldirectord管理slave可以有效的将失效节点移出集群。•由于MySQL、文件系统和磁盘均有缓存功能,在master掉电的情况下,binlog文件最后的Position要落后slave已经复制的Position很多。这样就算备份节点接管了资源,仍然会造成复制的中断。需要手动恢复复制进程。•因split-brain造成资源争抢进而因错误写入造成存储的失效。恢复时间较长。MySQL多主模式架构图MySQL多主模式的要点•不存在读写分离问题。•可扩展性较差,扩展较为麻烦。•自增ID的重复问题。•可以通过设定auto_increment_increment和auto_increment_offset来解决。•例如把auto_increment_increment设置为3,而把master1,master2,master3的auto_increment_offset分别设置为1,2,3,自增ID就分别为:•1471013...•2581114...•3691215...MySQL级联复制•解决多IDC的数据库同步问题。•多个IDC之间由master-slave模式同步数据。•可以用多线机房的MySQLServer做master,而用电信/网通机房的MySQLServer做slave。•在同一IDC,直接从顶级master同步的slave就成为了其它MySQLServer的master。•确保次级master的binlog一致,需要用到google-mysql-tools中的MirroredBinlogs。•MirroredBinlogs可以在slave保存一份和master完全相同的binlog。•当一个master对应的slave过多,出现性能问题时,也可以用级联的方式进一步扩展。集群环境下的存储备份•NAS-NetworkAttachedStorage(网络附属存储)•NAS通过NFS/Samba/WebDAV/FTP等方式实现共享存储,基本上可以直接叫做StorageServer。•NFS是Linux集群中最常见的共享存储方式,特点是简单易用,但性能有限。•SAN-StorageAreaNetwork(存储区域网络)•价格昂贵,在中小型网站中应用较少。•大型网站使用Oracle数据库做RAC的话就需要使用SAN了。•iSCSI价格相对较低。作为iSCSIInitiator,Debian下需要安装open-iscsi,而CentOS下需要安装iscsi-initiator-utils。•Linux下SAN的共享存储,较为常见的方案是RHCS+GFS+CLVM。•分布式文件系统。网站应用存储文件的分类及特点•1.程序文件:更新少,数量少,频繁读。•2.数据库文件:文件大,读写操作极为频繁,连续写。•3.用户文件:数量巨大,读写较多,读取分散。•4.零时文件:小文件,数量多,不需要永久存储。如session文件。程序文件存储的解决方案•NFS是一个还算不错的选择,但有如下弱点:•1.严重的单点故障隐患。•2.扩展性较差,支持的节点数量有限。•3.大量不必要的网络传输。•根据程序文件读写的特点,可以考虑把文件放在本机。在文件更改时同步到各个节点。•rsync:多节点的同步不方便;扫描目录树的改变比较慢。•可用以下两个工具解决上述两个问题:•csync2():集群同步工具。•inotify-tools():是为Linux下inotify文件监控工具提供的一套C的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件。csync2+inotify实现集群文件即时同步1•Debian下csync2的安装:•apt-getinstallopenbsd-inetdcsync2•cat/etc/csync2.cfg•nossl**;•groupcluster1•{•hostweb1web2web3web4;•key/etc/csync2_ssl_cert.key;•include/home;•exclude/home/tmp;•exclude*~.*;•autoyounger;•}•如果进行远程同步,为了安全,应该使用ssl连接,这需要安装ope
本文标题:Bypat博客出品-服务器运维集群方法总结
链接地址:https://www.777doc.com/doc-6219911 .html