SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
网站集群架构

利用开源软件构建 高可用、高性能、
    可扩展 的集群系统



                             兰锋
            bluedata@gmail.com
摘要
•   1. GSLB: 全局负载均衡
•   2. SLB: 服务器负载均衡
•      四层交换 LVS
•      七层交换 Nginx
•   3. Heartbeat 实现 HA
•   4. MySQL 数据库集群
•   5. 集群环境下的存储备份
•   6. 集群的监控及管理
GSLB - Global Server Load Balance
• GSLB 是 Global Server Load Balance 的
  缩写,意思是全局负载均衡。
• 实现在广域网(包括互联网)上不同地域
  的服务器间的流量调配。
• 使用最佳的服务器(组)为最近的访问者
  提供服务,从而确保访问质量。
GSLB 架构图
多 IDC 与单 IDC 的对比
• 好处
• 可用:不会因某一 IDC 机房由于“不可抗力”造成的网络中
  断而影响访问,可用性高。
• 容灾:可避免灾难性事件(比如地震)造成无可挽回的数
  据丢失。
• 速度:机房离访问者更近,访问质量更高。

•   坏处
•   实现复杂:流量分配问题,数据同步问题。
•   管理复杂:跨地区、距离远,维护麻烦。
•   成本较高:要在多个 IDC 租用机柜或机位。
利用 Bind9 的视图功能实现 GSLB 1
•   cat named.conf
•   ...
•   include "acl_chinanet.conf";
•   view "chinanet" {
•   match-clients { "chinanet"; };
•   ...
•   include "acl_cnc.conf";
•   view "cnc" {
•   match-clients { "cnc"; };
•   ...
•   view "other" {
•   match-clients { "any"; };
•   ...
利用 Bind9 的视图功能实现 GSLB 2
•   cat acl_chinanet.conf
•   acl "chinanet" {
•   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 地址。

•   详细原理可参考 GSLB using xBayDNS: http://you.video.sina.com.cn/b/9144571-
    1435882772.html
SLB - Server Load Balancing
• SLB 是 Server Load Balancing 的缩写,意
  思是服务器负载均衡。可实现多个服务器
  之间的负载均衡。
• 当客户端向虚拟服务器(虚拟服务器是多
  个真实服务器的群集)发起连接时,通过
  均衡算法转发到真实服务器。
LVS - Linux Virtual Server
•   LVS 是在 Linux 内核中做四层交换。
•   LVS 只用 128 个字节记录一个连接信息,512M 可用内存即可支持四
    百万条连接数,性能很高。

•   Linux 2.6 内核已经包含了 ipvs 模块,只需安装 ipvsadm 。

•   真实服务器需要解决 ARP 问题( ARP 缓存造成的 ARP “欺骗”)
•   arp_ignore = 1   ## 只要这台机器上面任何一个设备有这个 IP ,
    就响应 ARP 请求,并发送 MAC 地址应答。
•   arp_announce = 2    ## 发送 ARP 请求时只使用本设备的 IP 地址
    和 MAC 地址,避免造成 ARP 欺骗。

•   LVS 的有关中文文档:
    http://www.linuxvirtualserver.org/zh/index.html
LVS 架构图
Nginx
•   Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器。七层交换,
    大约能支持五万个并发连接。

•   可以通过定义 upstream 实现后端应用服务器(如运行 php-cgi 的机器)的负
    载均衡。

•   upstream php-fcgi {
•     server 192.168.0.101:9000 weight=5;
•     server 192.168.0.102:9000 weight=4;
•     server 192.168.0.103:9000 weight=3;
•   }

•   location ~ .*.php?$ {
•      fastcgi_pass php-fcgi;
•      include fastcgi_params;
•   }
ngx_http_upstream_hash_module
•   url hash 是用于提高 squid 群集命中率的一种算法。
•   通过 DNS 或 LVS 可以把流量分配到多个 squid 节点,但每台 squid 的缓存数据是重
    复的。

•   对 $request_uri 进行 hash ,并把所有访问都转发到后端的 squid:

•   upstream squid {
•     server squid1:3128;
•     server squid2:3128;
•     hash $request_uri;
•   }

•   location / {
•      proxy_pass http://squid;
•      include proxy.conf;
•   }
Nginx url hash 的高可用性
•   当有 squid 主机失效时,访问相应的页面会出现 502 错误。

•   可以定义 hash_again 及 proxy_next_upstream ,在有缓存节点失效时,可以重新 hash 。但这会
    对整个缓存池造成冲击。

•   利用 error_page 来实现故障的转移:

•   error_page 502 = @fetch;

•   location @fetch {
•      proxy_pass http://backup;
•      include proxy.conf;
•   }

•   upstream backup {
•     server squid_backup_1:3128;
•     server squid_backup_2:3128;
•   }

•   Nginx 的中文维基: http://wiki.nginx.org/NginxChs
Heartbeat
•   Heartbeat 最核心的两个部分:心跳监测部分和资源接管部分。
•   心跳监测可以通过网络或串口进行,而且支持冗余链路,节点之间相
    互发送报文来告诉对方自己当前的状态。如果一个节点在指定的时间
    内未收到对方发送的报文,那么就认为对方失效。
•   这时需要启动资源接管模块来接管运行在对方主机上的资源或服务。

•   直接安装 heartbeat 包即可,还可安装 ldirectord (for Debian) 监测和
    管理 LVS 集群中的真实服务器( CentOS 下是 heartbeat-
    ldirectord )。

•   使用网络监测要注意同一网络中存在多个 HA 应用时的广播 (bcast)
    造成的干扰,这种情况下应该使用单播 (ucast) 。

•   危险的脑裂 (split-brain) 。
•   Heartbeat 应用在操作存储设备的情况下是有一定的风险的。
Heartbeat + LVS + Nginx + Squid + PHP
MySQL 数据库集群
• 1. MySQL Cluster

• 2. MySQL 复制 之 一主多从 模式

• 3. MySQL 复制 之 多主模式

• 4. MySQL 复制 之 级联复制
MySQL Cluster 架构图
不用考虑读写分离问题。


SQL 节点需要使用 LVS 做流量
的分配。


NDB 的性能较低(新发布的
MySQL Cluster 7.0 有所改善)。


稳定性尚有待提高。


生产环境下的应用实例太少。
MySQL 一主多从模式架构图
MySQL 一主多从模式的要点
• 读写分离会使应用层变的更复杂。
• 可以用 MySQL-Proxy 实现读写分离,而多个 slave 可以
  由 LVS 调度。

• MySQL-Proxy 同样存在稳定性问题,多了一层结构当然
  也就多了一个故障点。
• 修改应用程序的 数据库连接类 实现读写分离是较为常见
  的做法。

• 不能在 slave 上做实时查询,需要实时查询的应用只能走
  master ,这需要在应用层做区分。
MySQL 一主多从模式的集群方案
Heartbeat + DRBD + LVS
MySQL + 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 就分
    别为:
•   1 4 7 10 13 ...
•   2 5 8 11 14 ...
•   3 6 9 12 15 ...
MySQL 级联复制
•   解决多 IDC 的数据库同步问题。

•   多个 IDC 之间由 master-slave 模式同步数据。
•   可以用多线机房的 MySQL Server 做 master ,而用电信/网通机房的 MySQL Server
    做 slave 。

•   在同一 IDC ,直接从顶级 master 同步的 slave 就成为了其它 MySQL Server 的
    master 。

•   确保次级 master 的 binlog 一致,需要用到 google-mysql-tools 中的 MirroredBinlogs 。
•   MirroredBinlogs 可以在 slave 保存一份和 master 完全相同的 binlog 。

•   当一个 master 对应的 slave 过多,出现性能问题时,也可以用级联的方式进一步扩展。
集群环境下的存储备份
•   NAS - Network Attached Storage (网络附属存储)
•   NAS 通过 NFS/Samba/WebDAV/FTP 等方式实现共享存储,基本上可以直
    接叫做 Storage Server 。
•   NFS 是 Linux 集群中最常见的共享存储方式,特点是简单易用,但性能有限。

•   SAN - Storage Area Network (存储区域网络)
•   价格昂贵,在中小型网站中应用较少。
•   大型网站使用 Oracle 数据库做 RAC 的话就需要使用 SAN 了。
•   iSCSI 价格相对较低。作为 iSCSI Initiator , Debian 下需要安装 open-
    iscsi ,而 CentOS 下需要安装 iscsi-initiator-utils 。
•   Linux 下 SAN 的共享存储,较为常见的方案是 RHCS + GFS + CLVM 。

•   分布式文件系统。
网站应用存储文件的分类及特点
• 1. 程序文件:更新少,数量少,频繁读。

• 2. 数据库文件:文件大,读写操作极为频繁,连
  续写。

• 3. 用户文件:数量巨大,读写较多,读取分散。

• 4. 零时文件:小文件,数量多,不需要永久存储。
  如 session 文件。
程序文件存储的解决方案
•   NFS 是一个还算不错的选择,但有如下弱点:
•   1. 严重的单点故障隐患。
•   2. 扩展性较差,支持的节点数量有限。
•   3. 大量不必要的网络传输。

•   根据程序文件读写的特点,可以考虑把文件放在本机。在文件更改时
    同步到各个节点。
•   rsync: 多节点的同步不方便;扫描目录树的改变比较慢。

•   可用以下两个工具解决上述两个问题:
•   csync2(http://oss.linbit.com/csync2/): 集群同步工具。
•   inotify-tools(http://inotify-tools.sourceforge.net/): 是为 Linux 下 inotify
    文件监控工具提供的一套 C 的开发接口库函数,同时还提供了一系列
    的命令行工具,这些工具可以用来监控文件系统的事件。
csync2 + inotify 实现集群文件即时同步 1
•   Debian 下 csync2 的安装:
•   apt-get install openbsd-inetd csync2

•   cat /etc/csync2.cfg
•   nossl * *;
•   group cluster1
•   {
•   host web1 web2 web3 web4;

•   key /etc/csync2_ssl_cert.key;

•   include /home;
•   exclude /home/tmp;
•   exclude *~ .*;

•   auto younger;
•   }

•   如果进行远程同步,为了安全,应该使用 ssl 连接,这需要安装 openssl 。
csync2 + inotify 实现集群文件即时同步 2
•   Debian 下 inotify-tools 的安装:
•   apt-get install inotify-tools
•   可以在需要同步的节点上运行下面这个脚本进行同步了:
•   cat /usr/local/sbin/csync2.sh
•   #!/bin/sh
•   src=/home
•   inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' 
•   --exclude ".swp$" 
•   -e modify,attrib,create,delete,move 
•   ${src} 
•   | while read file
•   do
•   csync2 -x > /dev/null 2>&1
•   done

•   用作即时备份也是个不错的选择。
数据库的存储备份
• 对于数据库应用存储的特点,一般使用 RAID5 或
  RAID1+0 。而在线扩容一般是通过 LVM 实现。

• DRBD 是基于网络的 RAID1 ,可实现 MySQL 单 master
  方案的热备。其实每个 slave 也都是一个备份。

• 利用 LVM 的快照功能实现对 MySQL 数据库文件的全备
  份,再通过 binlog 实现增量备份是一个很好的备份方案。

• LVM 在存储管理中是非常重要的。可参考 逻辑卷管理:
  http://www.ibm.com/developerworks/cn/linux/l-lvm2/
用户文件的存储
•   分布在多个节点,避免单点故障。
•   容量可动态扩充。
•   可方便的通过 HTTP 访问。

•   对于大量小文件的存储, NAS 和 SAN 都不合适。分布式存储是这种应用较好的解决
    方案。

•   MogileFS 由 存储节点、跟踪器、跟踪用的数据库 三个组件构成。

•   FastDFS 有两个角色:跟踪器 (Tracker) 和存储节点 (Storage) 。

•   MogileFS 和 FastDFS 都需要通过 API 访问文件,增加了应用层的复杂程度,但就存
    储而言是简单高效且易于维护的。
FastDFS 架构图
FastDFS 的要点
• 1. 每个组中存储节点的数据都是相同的,这可以实现备份
  和负载均衡。

• 2. 通过增加新的存储组,可以方便的实现在线扩容。

• 3. 可以把存储节点的存储目录通过 Nginx 发布出来直接对
  外提供访问。

• 4. 对于相同的文件,可以只创建链接,从而节约存储空
  间,但这需要创建索引文件。

• 5. 可定义多个 Tracker ,避免单点故障,分散压力。
Moose File System (MFS)
• MFS 的特点:
• 1. 通过 FUSE 实现的通用文件系统,简化了对文件的操
  作,应用层基本不用改动。
• 2. 添加新的服务器或者硬盘就可以动态的扩展容量。
• 3. 可以在不同的服务器上保存多份拷贝提高可用性。
• 4. 可以指定被删除文件的保留时间实现“回收站”的功能。

•   MFS 的结构:
•   Managing server (master)
•   Data servers (chunkservers)
•   Clients (mfsmount)
MFS 架构图
缓存系统 Memcached
• Memcached 是非常热门的一个缓存工具。利用
  Memcached 缓存数据库查询结果是网站提升性
  能的重要手段。

• 在集群环境中,可以用其保存 session ,实现
  session 的共享。

• Memcachedb 实现永久存储可以减轻数据库的压
  力,比如把需要反复读写的“点击量”存入
  Memcachedb 。
集群的监控及管理
• 监控:
• Nagios 用来即时监控集群中主机及服务的状态,并给管
  理者发送报警信息。
• Cacti 记录集群运作中的各种数据,并绘制出图形,为管
  理者提供有效的数据支持。

•   管理:
•   如果节点较少,可以基于 ssh + key 编写脚本进行管理。
•   csync2 也可实现配置文件更改时触发指定脚本的执行。
•   较多的节点可以考虑使用 pssh (parallel ssh) 进行管理。
•   FUNC (Fedora Unified Network Controller) 实现对大量节
    点的复杂管理。
完

Contenu connexe

Tendances

一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生dennis zhuang
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈Tim Y
 
Traffic server 管理员指南v1.0
Traffic server 管理员指南v1.0Traffic server 管理员指南v1.0
Traffic server 管理员指南v1.0qianshi
 
Ceph in UnitedStack
Ceph in UnitedStackCeph in UnitedStack
Ceph in UnitedStackRongze Zhu
 
Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)frogd
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局Alex Lau
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构XiaoJun Hong
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构drewz lin
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践孙立
 
深入淺出Node.JS
深入淺出Node.JS深入淺出Node.JS
深入淺出Node.JS國昭 張
 
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术团队
 
Openstack neutron 原理详解
Openstack neutron 原理详解Openstack neutron 原理详解
Openstack neutron 原理详解Yong Luo
 
阿里CDN技术揭秘
阿里CDN技术揭秘阿里CDN技术揭秘
阿里CDN技术揭秘Joshua Zhu
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列XiaoJun Hong
 
My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎frogd
 
Traffic server overview
Traffic server overviewTraffic server overview
Traffic server overviewqianshi
 
Kvmopt osforce
Kvmopt osforceKvmopt osforce
Kvmopt osforcemeecheng
 

Tendances (20)

一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生
 
Ceph perf-tunning
Ceph perf-tunningCeph perf-tunning
Ceph perf-tunning
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈
 
Ceph intro
Ceph introCeph intro
Ceph intro
 
Traffic server 管理员指南v1.0
Traffic server 管理员指南v1.0Traffic server 管理员指南v1.0
Traffic server 管理员指南v1.0
 
Ceph in UnitedStack
Ceph in UnitedStackCeph in UnitedStack
Ceph in UnitedStack
 
Ceph monitor-op
Ceph monitor-opCeph monitor-op
Ceph monitor-op
 
Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
 
深入淺出Node.JS
深入淺出Node.JS深入淺出Node.JS
深入淺出Node.JS
 
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践
 
Openstack neutron 原理详解
Openstack neutron 原理详解Openstack neutron 原理详解
Openstack neutron 原理详解
 
阿里CDN技术揭秘
阿里CDN技术揭秘阿里CDN技术揭秘
阿里CDN技术揭秘
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列
 
My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎My sql 5.6新特性深入剖析——innodb引擎
My sql 5.6新特性深入剖析——innodb引擎
 
Traffic server overview
Traffic server overviewTraffic server overview
Traffic server overview
 
Kvmopt osforce
Kvmopt osforceKvmopt osforce
Kvmopt osforce
 

En vedette

Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1
Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1
Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1redhat9
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用redhat9
 
Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版redhat9
 
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用redhat9
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用redhat9
 
ByPat博客出品Lvs+keepalived
ByPat博客出品Lvs+keepalivedByPat博客出品Lvs+keepalived
ByPat博客出品Lvs+keepalivedredhat9
 
Bypat博客出品-手把手教你如何建立自己的linux系统lfs速成手册
Bypat博客出品-手把手教你如何建立自己的linux系统lfs速成手册Bypat博客出品-手把手教你如何建立自己的linux系统lfs速成手册
Bypat博客出品-手把手教你如何建立自己的linux系统lfs速成手册redhat9
 
Bypat博客出品-linux+apache+mysql+php之linux系统安装
Bypat博客出品-linux+apache+mysql+php之linux系统安装Bypat博客出品-linux+apache+mysql+php之linux系统安装
Bypat博客出品-linux+apache+mysql+php之linux系统安装redhat9
 

En vedette (8)

Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1
Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1
Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用
 
Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版
 
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用
 
ByPat博客出品Lvs+keepalived
ByPat博客出品Lvs+keepalivedByPat博客出品Lvs+keepalived
ByPat博客出品Lvs+keepalived
 
Bypat博客出品-手把手教你如何建立自己的linux系统lfs速成手册
Bypat博客出品-手把手教你如何建立自己的linux系统lfs速成手册Bypat博客出品-手把手教你如何建立自己的linux系统lfs速成手册
Bypat博客出品-手把手教你如何建立自己的linux系统lfs速成手册
 
Bypat博客出品-linux+apache+mysql+php之linux系统安装
Bypat博客出品-linux+apache+mysql+php之linux系统安装Bypat博客出品-linux+apache+mysql+php之linux系统安装
Bypat博客出品-linux+apache+mysql+php之linux系统安装
 

Similaire à Bypat博客出品-服务器运维集群方法总结2

Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 
基于My sql的分布式数据库实践
基于My sql的分布式数据库实践基于My sql的分布式数据库实践
基于My sql的分布式数据库实践锐 张
 
基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践jackbillow
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践mysqlops
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优thinkinlamp
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现orczhou
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0jinqing zhu
 
大众点评网的技术变迁之路
大众点评网的技术变迁之路大众点评网的技术变迁之路
大众点评网的技术变迁之路jeffz
 
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)Shanda innovation institute
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁reinhardx
 
云梯的多Namenode和跨机房之路
云梯的多Namenode和跨机房之路云梯的多Namenode和跨机房之路
云梯的多Namenode和跨机房之路li luo
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换mysqlops
 
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)涛 吴
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)Lixun Peng
 
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...acelyc1112009
 
阿里云技术实践
阿里云技术实践阿里云技术实践
阿里云技术实践drewz lin
 
基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展Sky Jian
 
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4   app - oss - db (ver 1.0)開放原始碼 Ch2.4   app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)My own sweet home!
 

Similaire à Bypat博客出品-服务器运维集群方法总结2 (20)

Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
基于My sql的分布式数据库实践
基于My sql的分布式数据库实践基于My sql的分布式数据库实践
基于My sql的分布式数据库实践
 
基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 
大众点评网的技术变迁之路
大众点评网的技术变迁之路大众点评网的技术变迁之路
大众点评网的技术变迁之路
 
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁
 
Databases on AWS
Databases on AWSDatabases on AWS
Databases on AWS
 
云梯的多Namenode和跨机房之路
云梯的多Namenode和跨机房之路云梯的多Namenode和跨机房之路
云梯的多Namenode和跨机房之路
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换
 
内存数据库[1]
内存数据库[1]内存数据库[1]
内存数据库[1]
 
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)
 
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
The Construction and Practice of Apache Pegasus in Offline and Online Scenari...
 
阿里云技术实践
阿里云技术实践阿里云技术实践
阿里云技术实践
 
基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展
 
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4   app - oss - db (ver 1.0)開放原始碼 Ch2.4   app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
 

Bypat博客出品-服务器运维集群方法总结2

  • 1. 网站集群架构 利用开源软件构建 高可用、高性能、 可扩展 的集群系统 兰锋 bluedata@gmail.com
  • 2. 摘要 • 1. GSLB: 全局负载均衡 • 2. SLB: 服务器负载均衡 • 四层交换 LVS • 七层交换 Nginx • 3. Heartbeat 实现 HA • 4. MySQL 数据库集群 • 5. 集群环境下的存储备份 • 6. 集群的监控及管理
  • 3. GSLB - Global Server Load Balance • GSLB 是 Global Server Load Balance 的 缩写,意思是全局负载均衡。 • 实现在广域网(包括互联网)上不同地域 的服务器间的流量调配。 • 使用最佳的服务器(组)为最近的访问者 提供服务,从而确保访问质量。
  • 5. 多 IDC 与单 IDC 的对比 • 好处 • 可用:不会因某一 IDC 机房由于“不可抗力”造成的网络中 断而影响访问,可用性高。 • 容灾:可避免灾难性事件(比如地震)造成无可挽回的数 据丢失。 • 速度:机房离访问者更近,访问质量更高。 • 坏处 • 实现复杂:流量分配问题,数据同步问题。 • 管理复杂:跨地区、距离远,维护麻烦。 • 成本较高:要在多个 IDC 租用机柜或机位。
  • 6. 利用 Bind9 的视图功能实现 GSLB 1 • cat named.conf • ... • include "acl_chinanet.conf"; • view "chinanet" { • match-clients { "chinanet"; }; • ... • include "acl_cnc.conf"; • view "cnc" { • match-clients { "cnc"; }; • ... • view "other" { • match-clients { "any"; }; • ...
  • 7. 利用 Bind9 的视图功能实现 GSLB 2 • cat acl_chinanet.conf • acl "chinanet" { • 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 地址。 • 详细原理可参考 GSLB using xBayDNS: http://you.video.sina.com.cn/b/9144571- 1435882772.html
  • 8. SLB - Server Load Balancing • SLB 是 Server Load Balancing 的缩写,意 思是服务器负载均衡。可实现多个服务器 之间的负载均衡。 • 当客户端向虚拟服务器(虚拟服务器是多 个真实服务器的群集)发起连接时,通过 均衡算法转发到真实服务器。
  • 9. LVS - Linux Virtual Server • LVS 是在 Linux 内核中做四层交换。 • LVS 只用 128 个字节记录一个连接信息,512M 可用内存即可支持四 百万条连接数,性能很高。 • Linux 2.6 内核已经包含了 ipvs 模块,只需安装 ipvsadm 。 • 真实服务器需要解决 ARP 问题( ARP 缓存造成的 ARP “欺骗”) • arp_ignore = 1 ## 只要这台机器上面任何一个设备有这个 IP , 就响应 ARP 请求,并发送 MAC 地址应答。 • arp_announce = 2 ## 发送 ARP 请求时只使用本设备的 IP 地址 和 MAC 地址,避免造成 ARP 欺骗。 • LVS 的有关中文文档: http://www.linuxvirtualserver.org/zh/index.html
  • 11. Nginx • Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器。七层交换, 大约能支持五万个并发连接。 • 可以通过定义 upstream 实现后端应用服务器(如运行 php-cgi 的机器)的负 载均衡。 • upstream php-fcgi { • server 192.168.0.101:9000 weight=5; • server 192.168.0.102:9000 weight=4; • server 192.168.0.103:9000 weight=3; • } • location ~ .*.php?$ { • fastcgi_pass php-fcgi; • include fastcgi_params; • }
  • 12. ngx_http_upstream_hash_module • url hash 是用于提高 squid 群集命中率的一种算法。 • 通过 DNS 或 LVS 可以把流量分配到多个 squid 节点,但每台 squid 的缓存数据是重 复的。 • 对 $request_uri 进行 hash ,并把所有访问都转发到后端的 squid: • upstream squid { • server squid1:3128; • server squid2:3128; • hash $request_uri; • } • location / { • proxy_pass http://squid; • include proxy.conf; • }
  • 13. Nginx url hash 的高可用性 • 当有 squid 主机失效时,访问相应的页面会出现 502 错误。 • 可以定义 hash_again 及 proxy_next_upstream ,在有缓存节点失效时,可以重新 hash 。但这会 对整个缓存池造成冲击。 • 利用 error_page 来实现故障的转移: • error_page 502 = @fetch; • location @fetch { • proxy_pass http://backup; • include proxy.conf; • } • upstream backup { • server squid_backup_1:3128; • server squid_backup_2:3128; • } • Nginx 的中文维基: http://wiki.nginx.org/NginxChs
  • 14. Heartbeat • Heartbeat 最核心的两个部分:心跳监测部分和资源接管部分。 • 心跳监测可以通过网络或串口进行,而且支持冗余链路,节点之间相 互发送报文来告诉对方自己当前的状态。如果一个节点在指定的时间 内未收到对方发送的报文,那么就认为对方失效。 • 这时需要启动资源接管模块来接管运行在对方主机上的资源或服务。 • 直接安装 heartbeat 包即可,还可安装 ldirectord (for Debian) 监测和 管理 LVS 集群中的真实服务器( CentOS 下是 heartbeat- ldirectord )。 • 使用网络监测要注意同一网络中存在多个 HA 应用时的广播 (bcast) 造成的干扰,这种情况下应该使用单播 (ucast) 。 • 危险的脑裂 (split-brain) 。 • Heartbeat 应用在操作存储设备的情况下是有一定的风险的。
  • 15. Heartbeat + LVS + Nginx + Squid + PHP
  • 16. MySQL 数据库集群 • 1. MySQL Cluster • 2. MySQL 复制 之 一主多从 模式 • 3. MySQL 复制 之 多主模式 • 4. MySQL 复制 之 级联复制
  • 17. MySQL Cluster 架构图 不用考虑读写分离问题。 SQL 节点需要使用 LVS 做流量 的分配。 NDB 的性能较低(新发布的 MySQL Cluster 7.0 有所改善)。 稳定性尚有待提高。 生产环境下的应用实例太少。
  • 19. MySQL 一主多从模式的要点 • 读写分离会使应用层变的更复杂。 • 可以用 MySQL-Proxy 实现读写分离,而多个 slave 可以 由 LVS 调度。 • MySQL-Proxy 同样存在稳定性问题,多了一层结构当然 也就多了一个故障点。 • 修改应用程序的 数据库连接类 实现读写分离是较为常见 的做法。 • 不能在 slave 上做实时查询,需要实时查询的应用只能走 master ,这需要在应用层做区分。
  • 21. MySQL + Heartbeat + DRBD + LVS • MySQL + DRBD 是 MySQL 官方网站上推荐的一个方案。解决了 master 的单点问题。 • 用 ldirectord 管理 slave 可以有效的将失效节点移出集群。 • 由于 MySQL 、文件系统和磁盘均有缓存功能,在 master 掉电的情 况下, binlog 文件最后的 Position 要落后 slave 已经复制的 Position 很多。这样就算备份节点接管了资源,仍然会造成复制的中断。需要 手动恢复复制进程。 • 因 split-brain 造成资源争抢进而因错误写入造成存储的失效。恢复时 间较长。
  • 23. MySQL 多主模式的要点 • 不存在读写分离问题。 • 可扩展性较差,扩展较为麻烦。 • 自增 ID 的重复问题。 • 可以通过设定 auto_increment_increment 和 auto_increment_offset 来解决。 • 例如把 auto_increment_increment 设置为 3 ,而把 master1, master2, master3 的 auto_increment_offset 分别设置为 1, 2, 3 ,自增 ID 就分 别为: • 1 4 7 10 13 ... • 2 5 8 11 14 ... • 3 6 9 12 15 ...
  • 24. MySQL 级联复制 • 解决多 IDC 的数据库同步问题。 • 多个 IDC 之间由 master-slave 模式同步数据。 • 可以用多线机房的 MySQL Server 做 master ,而用电信/网通机房的 MySQL Server 做 slave 。 • 在同一 IDC ,直接从顶级 master 同步的 slave 就成为了其它 MySQL Server 的 master 。 • 确保次级 master 的 binlog 一致,需要用到 google-mysql-tools 中的 MirroredBinlogs 。 • MirroredBinlogs 可以在 slave 保存一份和 master 完全相同的 binlog 。 • 当一个 master 对应的 slave 过多,出现性能问题时,也可以用级联的方式进一步扩展。
  • 25. 集群环境下的存储备份 • NAS - Network Attached Storage (网络附属存储) • NAS 通过 NFS/Samba/WebDAV/FTP 等方式实现共享存储,基本上可以直 接叫做 Storage Server 。 • NFS 是 Linux 集群中最常见的共享存储方式,特点是简单易用,但性能有限。 • SAN - Storage Area Network (存储区域网络) • 价格昂贵,在中小型网站中应用较少。 • 大型网站使用 Oracle 数据库做 RAC 的话就需要使用 SAN 了。 • iSCSI 价格相对较低。作为 iSCSI Initiator , Debian 下需要安装 open- iscsi ,而 CentOS 下需要安装 iscsi-initiator-utils 。 • Linux 下 SAN 的共享存储,较为常见的方案是 RHCS + GFS + CLVM 。 • 分布式文件系统。
  • 26. 网站应用存储文件的分类及特点 • 1. 程序文件:更新少,数量少,频繁读。 • 2. 数据库文件:文件大,读写操作极为频繁,连 续写。 • 3. 用户文件:数量巨大,读写较多,读取分散。 • 4. 零时文件:小文件,数量多,不需要永久存储。 如 session 文件。
  • 27. 程序文件存储的解决方案 • NFS 是一个还算不错的选择,但有如下弱点: • 1. 严重的单点故障隐患。 • 2. 扩展性较差,支持的节点数量有限。 • 3. 大量不必要的网络传输。 • 根据程序文件读写的特点,可以考虑把文件放在本机。在文件更改时 同步到各个节点。 • rsync: 多节点的同步不方便;扫描目录树的改变比较慢。 • 可用以下两个工具解决上述两个问题: • csync2(http://oss.linbit.com/csync2/): 集群同步工具。 • inotify-tools(http://inotify-tools.sourceforge.net/): 是为 Linux 下 inotify 文件监控工具提供的一套 C 的开发接口库函数,同时还提供了一系列 的命令行工具,这些工具可以用来监控文件系统的事件。
  • 28. csync2 + inotify 实现集群文件即时同步 1 • Debian 下 csync2 的安装: • apt-get install openbsd-inetd csync2 • cat /etc/csync2.cfg • nossl * *; • group cluster1 • { • host web1 web2 web3 web4; • key /etc/csync2_ssl_cert.key; • include /home; • exclude /home/tmp; • exclude *~ .*; • auto younger; • } • 如果进行远程同步,为了安全,应该使用 ssl 连接,这需要安装 openssl 。
  • 29. csync2 + inotify 实现集群文件即时同步 2 • Debian 下 inotify-tools 的安装: • apt-get install inotify-tools • 可以在需要同步的节点上运行下面这个脚本进行同步了: • cat /usr/local/sbin/csync2.sh • #!/bin/sh • src=/home • inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' • --exclude ".swp$" • -e modify,attrib,create,delete,move • ${src} • | while read file • do • csync2 -x > /dev/null 2>&1 • done • 用作即时备份也是个不错的选择。
  • 30. 数据库的存储备份 • 对于数据库应用存储的特点,一般使用 RAID5 或 RAID1+0 。而在线扩容一般是通过 LVM 实现。 • DRBD 是基于网络的 RAID1 ,可实现 MySQL 单 master 方案的热备。其实每个 slave 也都是一个备份。 • 利用 LVM 的快照功能实现对 MySQL 数据库文件的全备 份,再通过 binlog 实现增量备份是一个很好的备份方案。 • LVM 在存储管理中是非常重要的。可参考 逻辑卷管理: http://www.ibm.com/developerworks/cn/linux/l-lvm2/
  • 31. 用户文件的存储 • 分布在多个节点,避免单点故障。 • 容量可动态扩充。 • 可方便的通过 HTTP 访问。 • 对于大量小文件的存储, NAS 和 SAN 都不合适。分布式存储是这种应用较好的解决 方案。 • MogileFS 由 存储节点、跟踪器、跟踪用的数据库 三个组件构成。 • FastDFS 有两个角色:跟踪器 (Tracker) 和存储节点 (Storage) 。 • MogileFS 和 FastDFS 都需要通过 API 访问文件,增加了应用层的复杂程度,但就存 储而言是简单高效且易于维护的。
  • 33. FastDFS 的要点 • 1. 每个组中存储节点的数据都是相同的,这可以实现备份 和负载均衡。 • 2. 通过增加新的存储组,可以方便的实现在线扩容。 • 3. 可以把存储节点的存储目录通过 Nginx 发布出来直接对 外提供访问。 • 4. 对于相同的文件,可以只创建链接,从而节约存储空 间,但这需要创建索引文件。 • 5. 可定义多个 Tracker ,避免单点故障,分散压力。
  • 34. Moose File System (MFS) • MFS 的特点: • 1. 通过 FUSE 实现的通用文件系统,简化了对文件的操 作,应用层基本不用改动。 • 2. 添加新的服务器或者硬盘就可以动态的扩展容量。 • 3. 可以在不同的服务器上保存多份拷贝提高可用性。 • 4. 可以指定被删除文件的保留时间实现“回收站”的功能。 • MFS 的结构: • Managing server (master) • Data servers (chunkservers) • Clients (mfsmount)
  • 36. 缓存系统 Memcached • Memcached 是非常热门的一个缓存工具。利用 Memcached 缓存数据库查询结果是网站提升性 能的重要手段。 • 在集群环境中,可以用其保存 session ,实现 session 的共享。 • Memcachedb 实现永久存储可以减轻数据库的压 力,比如把需要反复读写的“点击量”存入 Memcachedb 。
  • 37. 集群的监控及管理 • 监控: • Nagios 用来即时监控集群中主机及服务的状态,并给管 理者发送报警信息。 • Cacti 记录集群运作中的各种数据,并绘制出图形,为管 理者提供有效的数据支持。 • 管理: • 如果节点较少,可以基于 ssh + key 编写脚本进行管理。 • csync2 也可实现配置文件更改时触发指定脚本的执行。 • 较多的节点可以考虑使用 pssh (parallel ssh) 进行管理。 • FUNC (Fedora Unified Network Controller) 实现对大量节 点的复杂管理。
  • 38.