WordPress:如何应用Kubernetes和Portworx实现高可用和可扩展性

背景

据统计,全球28%的网站都运行在WordPress上,这是一个惊人的数字,以此计算的话,大约有7500万个站点。WordPress是14年前出现的,在此期间,互联网用户数量从6亿已增加到了37亿。WordPress拥有两个状态的组件: MySQL数据库;及文件系统目录(用来保存上传的媒体文件和插件)。

WordPress发布之初,最常见的部署策略在服务器上安装WordPress PHP应用程序,MySQL数据库以及文件存储目录。我们希望能够进行备份,但事实上,我们并不需要考虑“存储”问题,因为事实上已经超出了本地磁盘容量。

在这14年时间里,以及包括新增的31亿用户,我们都明白现如今的互联网环境与WordPress发布时完全不一样。在这7500万个WordPress网站中,总有一部分网站的流量大的惊人,所以单个服务器上的流量访问对于开发者来说是一大头疼的事。

不得不说,总有那么一群人一直在研发很棒的工具来帮助解决这些问题。本文讲述其中的两个:

lKubernetes

lPortworx

Kubernetes允许WordPress和MySQL容器在许多计算机上运行。这意味着可以横向扩展,同时有足够的能力来应对快速增长的用户群。

Portworx则提供了一个“数据管理层”,这表示能在一个节点上安全地运行MySQL服务器,不用担心节点是否中断。其block layer复制意味着数据已存在另一台机器上,这样便大大减少了故障时转移的时间。

Portworx同时还提供“共享卷”,这是WordPress的一大利器。“共享卷”使WordPress在文件夹中上传文件时拥有“多作者”。,这意味着可以横向扩展WordPress PHP容器,而不用担心在集群中的多个磁盘上分割上传。

将 Portworx的这两个功能与Kubernetes集群相结合,我们得到WordPress实例,它具备以下能力:

l在block层自动复制MySQL数据

l横向扩展WordPress PHP容器,并对文件上传目录使用“多作者”语义

l节点发生故障时自动修复

然而,以上所有这些都使用单个数据管理层!

WordPress架构

首先,我们来看看没有Kubernetes或Portworx的WordPress的单个节点安装是如何运行的:

可以看到,PHP应用的服务器会处理HTTP请求,处理包含读、写、上传文件及查询后台MySQL数据库。

文件上传

在单个节点设置中,文件上传目录和MySQL数据目录都是本地磁盘上的文件夹,一个块设备上有一个文件系统。如果要扩展WordPress容器,就要在它前面用代理来平衡流量。这样设置的问题是,文件的上传是跨多个服务器分离的。

来看看在两个节点上运行WordPress手动安装的2节点集群:

你可以看到,文件上传的整个卷现在跨多个磁盘分离。WordPress对这个并没有一个原生的理解,所以用户能用这个设置来查看定期丢失的文件。

理想情况下,我们需要共享的文件系统;无论从哪里读取或写入什么,抑或是存储,对于每个WordPress容器来说都是一样的。

MySQL数据

数据库存储有一个不同的问题:我们需要确保数据在节点发生故障时是安全的。第一步是确保在另一台电脑上有一个数据副本,以便在出现故障时能重新构建服务器。

MySQL服务器失败的设置:

我们通过在另一台计算机上自动更新数据副本来降低节点故障的风险。然而,这意味着我们必须以某种方式来进行故障自动转移,这样做对用户并不友好。此时,我们可以使用MySQL主从设置,但这并不是最快的转移方式,而且当我们重新同步新旧之间的更改时,性能可能会受到影响。

上面提到的文件上传卷也因为同样的原因需要某种类型的复制(比如,磁盘中断)。

Kubernetes

使用Kubernetes,可以解决故障自动转移的问题。如果一个节点死机,它将自动将MySQL容器重新安排到另一个节点。

但我们也需要数据,所以这个解决方案还不够完整。如果在AWS上,可以用EBS作为解决方案(Kubernetes也有一个EBS插件),但这会导致诸如如EBS 卷卡住的问题。

同样,当横向扩展WordPress PHP容器时,问题并不是由Kubernetes单独解决,而是一个容器管理层。可用NFS 卷,但这增加了一定的复杂性,因为我们正在为项目使用多个存储后端。

我们需要一个数据管理层提供以下功能:

l用于故障转移的块层复制

l用于横向扩展的“多作者”语义

这个解决方案需要原生的Kubernetes集成,一起来具体看看吧。

kubernetes上的Portworx

Portworx是这个例子的完美解决方案,因为它提供了两种类型的存储(复制和多作者),同时,还具备原生的Kubernetes集成。

以下方式解决了我们的用例:

l运行MySQL的节点可能会死,Kubernetes将使用副本数据集重新安排一个新的MySQL pod到节点 (使用HyperConvergence)。

l横向扩展的WordPress PHP容器都具有单个文件上传磁盘的相同视图(即“多作者”)

l文件上传卷及多作者也会复制,以防止任何节点出现故障

文件上传

因为Portworx可以创建使用“多作者”语义的“共享”卷,我们可以为多个WordPress容器使用相同的Portworx 卷。

由于Portworx知道文件所处在实际节点,并能可视化地代理将该文件加载到节点上的请求,所以写入的每个文件都可用于其他卷。这在块层发生,因此,任何可写入文件系统的都不知道卷的大小,实际上,共享的数据并不是本地的数据。

通过下图可以看到这一点:

此外,共享卷可以被复制(以防节点故障),它为我们提供了一个解决方案,能解决文件被写入到多个主机的问题。

MySQL数据

这是节点故障前的集群。注意Portworx是如何进行MySQL卷的块层复制的。

然后,如果节点出现故障,Kubernetes将把这个pod重新安排到Node B,在那里,MySQL副本准备就绪并等待开始。这样就减少了故障转移的时间,通过将容器和数据迁移到新主机来自动处理故障。

MySQL主从

为了简单起见,我们使用单个MySQL pod。在生产中,将使用StatefulSet,因为它允许MySQL在主/从配置中运行。

当然,Portworx 能很好地与StatefulSets 进行集成,在其应用层复制之下MySQL能利用块层更快复制。

额外功能

此外,Portworx不仅仅是一个存储连接器,也是一个数据管理层,以下有用的特性都是免费的:

l能安全地进行生产数据集的快照,而不会停机(这一点对于CI非常有用)

l将底层块设备池存储到一个统一的存储结构中,以此来将存储从计算中分离出来

l用于加密数据的各种选项

l自动将备份的快照发送到各种云存储提供商

l为各种物理后端存储设备提供统一的存储管理层

举例

下面是使用kops工具在AWS的Kubernetes上运行的安装程序的简短介绍。

创建集群

首先使用kops AWS在AWS上创建一个Kubernetes集群。

安装etcd

安装一个etcd服务器(Portworx将使用它来保持集群协调)。使用CoreOS etcd来安装etcd。

模板卷

然后,创建一个模板卷。’ kops’使用AWS的Auto Scaling Groups,Portworx与之能很好地集成在一起。

Portworx Deamonset

这一步,我们将Portworx作为Deamonset运行,这表示一个Portworx容器将在集群中的每个节点上运行。

创建卷

安装好了Portworx,我们可以在集群中的任何节点上进行SSH,使用'pxctl' cli并创建卷。

为MySQL数据创建一个复制卷:

上面的卷名称为“mysql-disk”,大小为“5GB”,格式为“ext4”,在集群中有2个副本(故障转移时我们需要复制)。

然后为WordPress PHP容器创建“multi-writer”磁盘。它将有和MySQL磁盘相同的属性,并带有额外的共享标志。它允许卷连接到多个容器,这便是我们需要的横向扩展WordPress容器:

卷通过`pxctl`的`list`命令创建:

启动MySQL

有一个磁盘ID,用它来运行MySQL pod:

以下是YAML的内容,使用`envsubst`来替换新创建的磁盘的ID:

启动WordPress

最后运行WordPress PHP pod:

与MySQL pod一样,用`envsubst`替换新创建的磁盘的ID:

发散

注意我们是如何在Kubernetes“部署”中实际部署WordPress和MySQL的。这就表示我们可以轻松地缩放每个部署运行的容器数量。

单纯地增加MySQL部署的规模是没有意义的。如前所述,我们将为其使用状态设置和主/从概念。

但我们可使用“kubectl规模部署”来增加WordPress容器的数量,因为它们正在使用Portworx的“共享”卷。

以下是将WordPress容器增加到10个的命令行:

总结

本文展示了如何在AWS Kubernetes集群上安装和操作WordPress和Portworx。如其他文章所示的一样,使用Portworx还有许多优点,如EBS 卷被卡在附加状态时。

一起使用Kops和Portworx的另一个好处是能与AWS的Auto Scaling Groups集成。这预示着Portworx能管理底层EBS池,并且能在升级/缩小/升级操作之后重用以前的EBS卷。

译者简介

Ghostcloud(中文名:精灵云)坐落于成都天府软件园,是成都高新区重点扶持企业,国内首批从事容器虚拟化研发的企业,是西南地区唯一一家基于Docker的云计算服务商,为企业级行业客户提供针对互联网化、私有云管理平台、大数据业务基础架构的平台服务。

Ghostcloud因容器技术而生,以最新容器技术Docker为基础,为适应不同行业客户需求,全自主研发了一套调度引擎框架Newben,且全方位适配Kubernetes主流开源调度引擎,也是国内率先实现双调度引擎的企业,是一流的企业级容器云服务专家。Ghostcloud推出了企业级容器云PaaS/CaaS平台,命名为EcOS(EnterpriseContainer Operation System)。Ghostcloud将EcOS平台与微服务/DevOps相融合,运用至企业IT系统的全生命周期的开发、测试、运维及发布流程中,致力于为多个领域企业向“互联网+”转型提供针对互联网化、私有云管理平台、大数据业务基础架构的平台服务,帮助企业级客户降低成本、提升效率、简化运维及产品部署,并提升系统的可靠性和安全性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,468评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,620评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,427评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,160评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,197评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,334评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,775评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,444评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,628评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,459评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,508评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,210评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,767评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,850评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,076评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,627评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,196评论 2 341

推荐阅读更多精彩内容