操作指南:通过 OpenShfit 运行高可用 MySQL数据库

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 操作指南:通过 OpenShfit 运行高可用 MySQL数据库

如何通过 OpenShfit 运行高可用 MySQL数据库


在这里插入图片描述
Portworx通过RedHat技术认证

我们的文章包括了MySQL on Kubernetes在不同平台不同场景下的情况。相关文章的列表如下:

Running HA MySQL on Amazon Elastic Container Service for Kubernetes (EKS) (https://portworx.com/ha-mysql-amazon-eks/)
Running HA MySQL on Azure Kubernetes Service (AKS) (https://portworx.com/run-ha-mysql-azure-kubernetes-service/)
Running HA MySQL on Google Kubernetes Engine (GKE) (https://portworx.com/run-ha-mysql-google-kubernetes-engine/)
How to Backup and Restore MySQL on Red Hat OpenShift (https://portworx.com/backup-restore-mysql-red-hat-openshift/)
Running HA MySQL on IBM Cloud Kubernetes Service (IKS) (https://portworx.com/run-ha-mysql-ibm-cloud-kubernetes-service/)
Running HA MySQL on Rancher Kubernetes Engine (RKE) (https://portworx.com/run-ha-mysql-rancher-kubernetes-engine/)
Running HA MySQL on IBM Cloud Private (https://portworx.com/run-ha-mysql-ibm-cloud-private/)

OpenShift Container Platform是Red Hat在私有云/本地部署的应用部署平台。许多用户使用OpenShift来运行无状态应用。但是通过OpenShift来运行类似数据库的有状态应用仍然是一个很大的挑战。Red Hat提供了一系列的企业级存储解决方案。但不论是GlusterFS (RedHat称之为容器原生存储),还是Ceph,都并不是被设计来运行高性能/低延迟数据库的。GlusterFS和Ceph是很不错的项目,但对于运行数据库来说都存在较多问题。这些问题使得OpenShift的用户不得不放弃通过OpenShift来运行数据服务。

但这些问题实际上是可以解决的。本篇文章中,我们将通过使用开源数据库MySQL为例,来演示,如何通过OpenShift来运行数据库。

在Openshift上运行数据库的关键,需要一个专为高性能数据库或其他有状态应用设计的,云原生存储解决方案。

Portworx是根据DevOps的原则,专为在容器中运行有状态应用和生产系统设计的解决方案。使用Portworx,用户可以使用任何容器排程器,在任何基础架构上,管理任何数据库或有状态服务。包括:

OpenShift (https://docs.portworx.com/scheduler/kubernetes/openshift-install.html
Kubernetes (https://portworx.com/use-case/kubernetes-storage/)
Mesosphere DC/OS (https://portworx.com/use-case/persistent-storage-dcos/)
Docker Swarm (https://portworx.com/use-case/docker-persistent-storage/)
OpenShift发布的3.7版本支持外部的卷插件,从而用户能够使用Portworx的企业级存储功能来加密、快照、备份、确保高可用,来保护关键应用数据库。

在本篇文章中,我们会演示如何通过5个步骤,在OpenShift上运行高可用的MySQL数据库。

  1. 为OpenShift安装外部卷插件,这样用户就可以使用快照、备份、高可用、以及加密功能
  2. 创建一个Kubernetes存储类,含有复制因子=2,IO优先级=High,快照间隔=60。这些值也可以根据用户实际需要来配置
  3. 在OpenShift里创建一个MySQL模板:导入JSON,配置OpenShift MySQL持久卷,包含内存上限、MySQL的参数、以及存储类的大小
  4. 从这个模板创建一个MySQL 持久卷,部署OpenShift的Pods来使用这个卷
  5. 验证MySQL高可用:通过关闭节点,删除Pod来看MySQL已经被自动重新排程了

如果你希望了解更多如何在OpenShift上运行高性能数据库,可以查看Portworx网站上的相关文档和视频。

在OpenShift 3.7上安装Portworx
安装Portworx

Portworx在OpenShift上作为一个Daemonset被安装。访问 https://install.portworx.com来创建你的px-spec.yaml文件,并且运行oc apply –f px-spec.yaml。

在OpenShift上安装Portworx的详细操作文档在这里:(https://docs.portworx.com/scheduler/kubernetes/openshift-install.html

一旦Portworx安装完成,我们就继续创建一个存储类,用来为我们的MySQL实例做卷的动态部署。

下面是一个存储类的例子,我们用它来创建我们的卷,

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: px-demo-sc
provisioner: kubernetes.io/portworx-volume
parameters:
repl: “2”
priority_io: “high”
snap_interval: “60”

在这个存储类例子里,我们会创建一个叫做px-demo-sc的存储类,并且会配置一些Portworx的参数,

Replication – repl: “2”

我们可以配置,在集群里我们需要多少份卷的副本。Portworx支持的复制因子包括1/2/3。配置复制因子为2或者3,可以确保Portworx在集群中同步地把卷复制到2或3个节点里,同时确保数据的持久性。如果某个节点死掉,Portworx和OpenShift会把Pod重新部署到集群中存在Portworx卷的另外一个Worker节点上。

IO Priority – priority_io: “high”

Portworx允许你创建3个存储池:High、Medium和Low。你可以使用具备SSD、HDD和SATA存储的服务器。SSD是High,HDD是Medium,SATA是Low。如果是在云环境中也可以通过配置不同的IOPS来完成。当选择High的存储类,Portworx会把Pod排程到具备SSD存储的服务器上。

Snapshots – snap_interval: “60”

Porworx会每60分钟创建一个快照。这些快照可以被用来回滚数据库,测试升级,以及做研发测试。

一个完整的存储类参数说明在这里:(https://docs.portworx.com/scheduler/kubernetes/dynamic-provisioning.html

注意:Portworx也支持备份你的容器卷到云中或者本地的对象存储里。

https://docs.portworx.com/cloud/backups.html)你可以创建备份的排程。这些备份可以被加密和恢复到同一个或者不同的Portworx集群里。

在OpenShift里创建一个MySQL模板

Portworx已经创建了一个样例MySQL OpenShift模板,参见(https://2.1.docs.portworx.com/samples/k8s/px-mysql-openshift.json?raw=true

在OpenShift操作面板里选择导入YAML/JSON,copy和粘贴PortworxMySQL 模板,点击创建。

这将会出现Portworx MySQL (持久)模板配置界面。你可以选择内存上限以及其他MySQL参数,或者使用系统默认的参数。你也可以设定卷的大小,以及需要使用的存储类。确保你使用的存储类与之前创建的存储类相匹配。

进入项目,通过点击Storage验证PVC已经被创建并被绑定。

容器需要1到2分钟来出现,容器开始运行后,验证存储已经连上了: 点击Application、Pods;选择MySQLPod,在终端里输入df –H,你可以看到/var/lib/mysql/data目录已经被mounted到Portworx支持的PX-Volume里。

登入数据库并且创建一张表。

在这里插入图片描述

确认Pod运行在哪个节点上,

oc get pods -n mysql-openshift -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql-1-f4xlw 1/1 Running 0 1h 10.130.0.34 70-0-107-155.pools.spcsdns.net

关闭(Cordon off)正在运行Pod的节点,

oc adm cordon  70-0-107-155.pools.spcsdns.net

验证节点上的排程已经被disable了,

oc get nodes
NAME STATUS AGE VERSION
70-0-107-155.pools.spcsdns.net Ready,SchedulingDisabled 23d v1.7.6+a08f5eeb62

删除MySQL Pod,

oc delete pod mysql-1-q88qq -n mysql-openshift
pod “mysql-1-q88qq” deleted

验证Pod已经被重新排程到集群上的另一个节点里。

oc get pods -n mysql-openshift -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql-1-j97tw 1/1 Running 0 1m 10.128.0.63 70-0-40-193.pools.spcsdns.net

回到OpenShift控制面板,选择你的项目,到Application, Pods,点击新的MySQL Pod, 然后是终端,验证数据库表还在。

总结来看,我们通过5个步骤,在OpenShift中运行了高可用的MySQL数据库。

  1. 为OpenShift安装外部卷插件,这样用户就可以使用快照、备份、高可用、以及加密功能
  2. 创建一个Kubernetes存储类,含有复制因子=2,IO优先级=High,快照间隔=60。这些值也可以根据用户实际需要来配置
  3. 在OpenShift里创建一个MySQL模板:导入JSON,配置OpenShiftMySQL持久卷,包含内存上限、MySQL的参数、以及存储类的大小
  4. 从这个模板创建一个MySQL 持久卷,部署OpenShift的Pods来使用这个卷
  5. 验证MySQL高可用:通过关闭节点,删除Pod来看MySQL已经被自动重新排程了

如果你希望了解更多如何在OpenShift上运行高性能数据库,可以查看Portworx网站上的相关文档和视频。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
SQL命令行退出操作指南:轻松掌握不同数据库环境下的退出技巧
在数据库管理与开发过程中,经常需要通过SQL命令行工具(如MySQL的mysql客户端、PostgreSQL的psql、SQL Server的sqlcmd等)与数据库进行交互
327 59
|
1月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
127 3
Mysql高可用架构方案
|
2月前
|
SQL 关系型数据库 MySQL
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
362 0
|
2月前
|
存储 自然语言处理 关系型数据库
mysql 8.0 日期维度表生成(可运行)
mysql 8.0 日期维度表生成(可运行)
56 2
|
2月前
|
SQL 存储 安全
SQL查询数据库:基础概念与操作指南
在数字化时代,数据库已成为信息管理的重要工具之一。作为管理和操作数据库的核心语言,SQL(结构化查询语言)已成为数据管理和查询的关键技能。本文将全面介绍SQL查询数据库的基本概念、语句和操作指南,以帮助初学者快速上手,同时为进阶用户提供有价值的参考。一、数据库与SQL简介数据库是一种存储、管理和检索
58 3
|
2月前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
|
2月前
|
存储 关系型数据库 MySQL
mysql 8.0 时间维度表生成(可运行)
mysql 8.0 时间维度表生成(可运行)
49 0
|
4月前
|
存储 缓存 NoSQL
Redis内存管理揭秘:掌握淘汰策略,让你的数据库在高并发下也能游刃有余,守护业务稳定运行!
【8月更文挑战第22天】Redis的内存淘汰策略管理内存使用,防止溢出。主要包括:noeviction(拒绝新写入)、LRU/LFU(淘汰最少使用/最不常用数据)、RANDOM(随机淘汰)及TTL(淘汰接近过期数据)。策略选择需依据应用场景、数据特性和性能需求。可通过Redis命令行工具或配置文件进行设置。
98 2
|
4月前
|
SQL 关系型数据库 MySQL
orchestrator搭建mysql高可用
orchestrator搭建mysql高可用
52 0
|
4月前
|
缓存 关系型数据库 MySQL
如何实现mysql高可用集群
如何实现mysql高可用集群
50 0