ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

本次 Apache ShardingSphere 5.1.2 版本更新为大家带来了三大全新功能,其中之一即为使用 ShardingSphere-Proxy chart 在云环境中快速部署一套 ShardingSphere-Proxy 集群,本篇将带大家详细了解该项功能。

一、背景和痛点

在云原生的环境下,一个应用可以在多个不同环境中进行批量的部署,使用原始的 yaml 进行重用,部署到新环境中也是困难重重。

可以看到,在进行 Kubernetes 软件部署时,我们面临下述问题:

  • 如何管理,编辑和更新这些分散的 Kubernetes 应用配置文件?
  • 如何把一套的相关配置文件作为一个应用进行管理?
  • 如何分发和复用 Kubernetes 的应用配置?

在迁移 Apache ShardingSphere-Proxy 从 Docker 或者虚拟机到 Kubernetes 环境下,也存在上述这些问题。

由于 Apache ShardingSphere-Proxy 的灵活性特点,在一个集群中可能需要多个 Apache ShardingSphere-Proxy 副本。传统部署方式下,需要针对每一个副本进行单独的部署文件配置。没有版本化管理的部署方式,在升级过程中,也面临着不能快速回滚,影响应用稳定性的风险。

在现在的企业中,集群也不只是只有一个,在多集群中进行复用配置,并且保证生产和测试集群的配置保持一致,保证测试的正确性,也是没有版本化管理的传统部署方式面临的另一大难题之一。

二、设计目标

由于 Apache ShardingSphere-Proxy 首次官方正式支持在云上进行标准化部署,对于部署方式的考虑就变得尤为重要。需要考虑到用户的易用性,复用的便捷性,对后续版本的兼容性,在调研了 Kubernetes 现有的几种部署方式后,我们最终选择了使用 Helm 对 Apache ShardingSphere-Proxy 制作一个 chart 提供给用户,使其能够对 Apache ShardingSphere-Proxy 部署进行管理,使其能够版本化,可复用。

三、设计内容

Helm 管理名为 chart 的 Kubernetes 包的工具,Helm 可以做以下的事情:

  • 从头开始创建新的 chart
  • 将 chart 打包成归档(tgz)文件
  • 与存储 chart 的仓库进行交互
  • 在现有的 Kubernetes 集群中安装和卸载 chart
  • 管理与 Helm 一起安装的 chart 的发布周期

使用 Helm 去构建 Apache ShardingSphere-Proxy 云上部署 chart,将大大简化用户在 Kubernetes 环境下部署的复杂度,并且可以使 Apache ShardingSphere-Proxy 在多个环境之间进行快速复制。

由于现阶段,Apache ShardingSphere-Proxy 的部署依赖注册中心,在 Apache ShardingSphere-Proxy chart 中也同时对 ZooKeeper 集群的部署进行支持,这样给用户提供了一个一站式、开箱即用的体验。只需要执行一条命令,即可在 Kubernetes 中部署一个带有治理节点的 Apache ShardingSphere-Proxy 集群,并且可以依托于 Kubernetes 的功能,对治理节点数据进行持久化。

四、实战指南

5.1.2 文档中提供了 quick start 使用默认的配置文件进行 Apache ShardingSphere-Proxy 集群部署,下面我们将使用源码进行安装,详细地对其中的配置进行说明并实战在 Kubernetes 集群中部署一个 Apache ShardingSphere-Proxy 集群。

环境准备

在部署之前,我们需要准备环境。Apache ShardingSphere-Proxy charts 需要以下环境:

  • Kubernetes 集群 1.18+
  • kubectl 1.18+
  • Helm 3.8.0

以上需要在实战之前进行安装配置。

charts 源码准备

仓库中下载 Apache ShardingSphere-Proxy charts:

 helm repo add shardingsphere https://shardingsphere.apache.org/charts
 helm pull shardingsphere/apache-shardingsphere-proxy
 tar -zxvf apache-shardingsphere-proxy-1.1.0-chart.tgz
 cd apache-shardingsphere-proxy

Apache ShardingSphere-Proxy charts 配置

配置 values.yaml 文件

将:

governance:
   ...

   zookeeper:
     replicaCount: 1
   ...

 compute:
   ...

   serverConfig: ""

改为:

governance:
   ...

   zookeeper:
     replicaCount: 3
   ...

 compute:
   ...

   serverConfig:
     authority:
       privilege:
         type: ALL_PRIVILEGES_PERMITTED
       users:
       - password: root
         user: root@%
     mode:
       overwrite: true
       repository:
         props:
           maxRetries: 3
           namespace: governance_ds
           operationTimeoutMilliseconds: 5000
           retryIntervalMilliseconds: 500
           server-lists: "{{ printf \"%s-zookeeper.%s:2181\" .Release.Name .Release.Namespace }}"
           timeToLiveSeconds: 600
         type: ZooKeeper
       type: Cluster

⚠️:保持缩进

剩余配置请查看文档配置一项

安装 Apache ShardingSphere-Proxy & ZooKeeper 集群

现在的文件夹层级为:

helm
 ├── apache-shardingsphere-proxy
 ...

 |   |
 │   └── values.yaml
 └── apache-shardingsphere-proxy-1.1.0-chart.tgz

回到 helm 文件夹,进行安装 Apache ShardingSphere-Proxy & ZooKeeper 集群。

helm install shardingsphere-proxy apache-shardingsphere-proxy

在集群的 default 命名空间下,部署了 ZooKeeper & Apache ShardingSphere-Proxy 集群:

ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

简单功能测试

使用 kubectl forward 进行本地调试:

kubectl port-forward service/shardingsphere-proxy-apache-shardingsphere-proxy 3307:3307

创建后端数据库 Database:

ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

使用 MySQL client 进行连接并使用 DistSQL 添加数据源:

mysql -h 127.0.0.1 -P 3307 -uroot -proot

ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

创建规则

ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

写入数据,查询结果

ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

升级

使用 Helm 可以快速对 Apache ShardingSphere-Proxy 进行升级。

helm upgrade shardingsphere-proxy apache-shardingsphere-proxy

ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

回滚

如果升级过程中出错,可以使用 helm rollback 命令对已经升级的 release 进行快速回滚。

helm rollback shardingsphere-proxy

ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

清理

在体验完成后,可以使用 helm uninstall 命令对 release 快速进行清理:

helm uninstall shardingsphere-proxy

Helm 安装的资源将被全部删除。

ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

五、结语

使用 Apache ShardingSphere-Proxy charts 可以在 Kubernetes 集群中快速部署一套 Apache ShardingSphere-Proxy 集群进行使用,简化了运维人员在迁移 Apache ShardingSphere-Proxy 至 Kubernetes 环境下复杂的配置 yaml 的过程。加上了版本化管理后,可以轻松的对 Apache ShardingSphere-Proxy 集群进行部署、升级、回归和清理。未来我们还会对 Apache ShardingSphere-Proxy chart 进行继续迭代和完善,欢迎大家持续关注。

欢迎点击链接,了解更多内容:

Apache ShardingSphere 官网:https://shardingsphere.apache.org/

Apache ShardingSphere GitHub 地址:https://github.com/apache/shardingsphere

SphereEx 官网:https://www.sphere-ex.com

欢迎添加社区经理微信(ss_assistant_1)加入交流群,与众多 ShardingSphere 爱好者一同交流。

Original: https://www.cnblogs.com/sphereex/p/16469439.html
Author: SphereEx
Title: ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621480/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • AQS:Java 中悲观锁的底层实现机制

    介绍 AQS AQS(AbstractQueuedSynchronizer)是 Java 并发包中,实现各种同步组件的基础。比如 各种锁:ReentrantLock、ReadWri…

    数据库 2023年6月11日
    0140
  • SpringBoot 中发布ApplicationEventPublisher,监听ApplicationEvent 异步操作

    有这么一个业务场景:当用户注册后,发送邮件到其邮箱提示用户进行账号激活,且注册成功的同时需要赠送新人用户体验卡券。 业务有了,那么问题也就来了。 What? 问题….问…

    数据库 2023年6月6日
    0300
  • 程序包javax.persistence不存在解决办法

    只需添加以下包即可 javax.persistence persistence-api 1.0.2 Original: https://www.cnblogs.com/javalo…

    数据库 2023年6月11日
    0101
  • 初识MySQL数据库

    一 、引言 假设现在你已经是某大型互联网公司的高级程序员,让你写一个火车票购票系统,来hold住双十一期间全国的购票需求,你怎么写? 因为同时抢票的人太多,你的程序不可能写在一台机…

    数据库 2023年5月24日
    0140
  • mqtt长连接报错32000

    背景 项目需要使用mqtt协议建立长连接,我是客户端,需要连上服务端同学的提供的地址;客户端使用的是paho提供的客户端sdk,如下: org.eclipse.paho org.e…

    数据库 2023年6月11日
    0158
  • Centos7下Oracle启动命令

    1、查询挂载历史记录 在root账户下使用一下命令 查看历史使用挂载的那个磁盘 查看挂载&a…

    数据库 2023年6月16日
    0120
  • Celery异步任务

    (1)安装celery pip install celery==4.2.1 (2)celery使用 在项目适当位置创建celery_tasks目录用于保存celery异步任务。 在…

    数据库 2023年6月14日
    0121
  • knn算法详解

    1.什么是knn算法 俗话说:物以类聚,人以群分。看一个人什么样,看他身边的朋友什么样就知道了(这里并没歧视谁,只是大概率是这样) 对于判断下图绿色的球是哪种数据类型的方法就是根据…

    数据库 2023年6月16日
    0122
  • Qingcloud_MySQL Plus(Xenon) 高可用搭建实验

    实验:Xenon on 5.7.30 Xenon (MySQL Plus) 是青云Qingcloud的一个开源项目,号称金融级别强一致性的高可用解决方案,项目地址为 https:/…

    数据库 2023年6月16日
    0148
  • BigDecimal 设置小数位数、小数比例转换整数

    控制小数位数 DecimalFormat decimalFormat = new DecimalFormat("0.00"); decimalFormat.fo…

    数据库 2023年6月6日
    0115
  • MySQL数据库-数据表(上)

    数据表的基本操作. MySQL 数据库支持多种数据类型,大致可以分为 3 类:数值类型、日期和时间类型、字符串(字符)类型。 (1)数值类型 数值类型用于存储数字型数据,这些类型包…

    数据库 2023年6月11日
    0107
  • Java8日期时间(LocalDate、LocalTime、LocalDateTime)

    在看题的时候发现了Java8中新加入的日期时间类,觉得这个小哥写的不错,自己也跟着练习下。原文地址:https://blog.csdn.net/yy139926/article/d…

    数据库 2023年6月14日
    0103
  • 根据温度、气压计算海拔高度

    基本概念 标准大气压:表示气压的单位,习惯上常用水银柱高度。例如,一个标准大气压等于760毫米高的水银柱的重量,它相当于一平方厘米面积上承受1.0336公斤重的大气压力。由于各国所…

    数据库 2023年6月14日
    0176
  • 三分钟入门 InnoDB 存储引擎中的表锁和行锁

    各位对 “锁” 这个概念应该都不是很陌生吧,Java 语言中就提供了两种锁:内置的 synchronized 锁和 Lock 接口,使用锁的目的就是管理对共…

    数据库 2023年6月6日
    0111
  • MySQL进阶系列:一文详解explain

    explain有何用处呢: 为了知道优化SQL语句的执行,需要查看SQL语句的具体执行过程,以加快SQL语句的执行效率。 ​ 可以使用explain+SQL语句来模拟优化器执行SQ…

    数据库 2023年5月24日
    0162
  • 一次线上MySQL死锁告警原因排查

    项目场景:一次线上MySQL死锁告警原因排查最近处理了一次在线数据警报,记录下来。 [En] Recently handled an online data alarm, reco…

    数据库 2023年5月24日
    068
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球