阳光保险MySQL数据库平稳迁移OceanBase,稳定运营超700天

作者简介:
车东兴:于阳光保险就职,深耕保险行业的 IT 领域长达12 年,对保险领域的基础架构实践有深刻的理解与掌握。熟悉多款数据库,具有丰富的数据库运维经验。
王华城:于阳光保险就职,10多年一直从事 MySQL 数据库的运维工作,在本地及云上数据库部署运维经验丰富,近年来对与 MySQL 兼容的数据库进行了深入研究并积累运维经验。

业务背景

阳光保险集团自2005年7月创立以来,已成功发展出包括财产保险、人寿保险、信用保证保险及资产管理等在内的多家专业子公司,其成长速度在全球市场化企业中名列前茅,现在在中国保险行业中稳居前八。随着数字化升级浪潮的持续推进,众多企业纷纷寻求将软硬件升级为满足自主研发需求的产品,作为基础软件的三大支柱之一的数据库,亦成为此次升级热潮中的一项重要内容。

在数字化升级的大背景下,阳光保险集团根据业务需求,展开了数据库选型与升级工作。其一,了解分布式数据库,为未来业务增长做技术储备;其二,在数据库适配且满足业务需求的同时,尽可能降低软件、硬件的开销。

经过深入调研和测试多款产品后,我们选择了 OceanBase。主要有以下四方面原因:

第一,满足关键业务升级需求。OceanBase 是一款完全自研的分布式数据库,且在 2021 年开源了核心代码,非常符合我们当前的关键业务升级需求。

第二,稳定可靠。整套系统稳定运行已经超过 2 年, 数据 0 丢失 ,使用上让我们越发安心和信任。从技术上,OceanBase 基于 Paxos 协议实现的多副本容灾方案,少数派故障时能够达到 RPO = 0,RTO < 8s 的高可用能力;从业务上看,  OceanBase 已连续支撑十余年双 11,经过了大量金融领域的核心系统打磨,性能和可靠性已经久经考验。

第三,高度兼容MySQL。兼容性是我们最关注的一点,因为集团业务中很多搭载在 MySQL 上,如果兼容性不足,不仅迁移和改造的成本高,还需要协调业务方配合做改造,非常麻烦。所以引入新技术或替换新产品,要保证无缝、平滑的迁移,尽可能减少改造成本。

第四,多租户管理多套业务。我们在 MySQL 上的业务非常多,虽然业务的访问量和数据量都不是很大,但多套 MySQL 对应多个不同的业务,需要大量的管理和运维工作。OceanBase 的原生多租户能力很好解决了这个问题,大幅降低运维管理复杂度。

业务收益

在经过前期的测试以后,我们将已有的业务逐步迁移到 OceanBase。我们线上 MySQL 环境以 5.6 版本 和 5.7 版本 为主,使用OceanBase数据迁移工具 OMS 可以直接创建同步链路,自动将  MySQL 数据迁移到 OceanBase,且未出现任何兼容性问题,使整个迁移过程非常便捷、顺利,无形中节省了大量迁移成本。

我们部署了 OceanBase 3.1.5 版本,配置为单台物理机器 128C768G 。目前在 OceanBase 开了 22 个租户,把分布在 MySQL 多个实例上的多套业务迁移至 OceanBase 后分配到不同的租户,这样每个业务单独使用自己的租户资源,互不影响。同时实现了高可用,简化了运维管理。

1704970329

(一)多租户及资源隔离,提升资源利用率,保证数据安全

OceanBase 的多租户特性解决了很多小型业务搭载在 MySQL 上的运维复杂问题。租户是一个逻辑概念,通过租户实现资源隔离,并通过权限控制保证租户的数据安全性,对于系统运维,尤其是对云数据库的运维有着重要的积极影响。租户在一定程度上相当于传统数据库的"实例"概念。OceanBase 的租户间是完全隔离的,从根本上解决跨租户的数据访问风险,以确保用户的数据资产不被其他租户访问。因此,我们可以将多个 MySQL 实例上的业务迁移到一套 OceanBase 上,将不同业务放置于对应租户即可,完全不用担心数据安全。另外,租户是资源分配的单元,可以根据业务情况设置资源规则,使机器资源得到充分利用。下图是我们的租户资源配置。

1704970381

(二)高可用保障业务稳定运行,数据零丢失,无需人工干预

我们使用 MySQL 时是一主多从架构,其自身没有高可用能力,以至于在一些复杂的大型业务场景,稳定性问题是需要我们格外关注的,特别是当核心业务的主节点异常甚至宕机时,可能需要人工干预处理,比如手动切换,并通过解析 Binlog 补齐数据。这种方式在一定程度上能解决问题,但风险高而且很不方便。使用 OceanBase 后,我们基于 Paxos 协议实现的多副本容灾方案,在三副本情况下,即使挂掉一个副本也不会对上层业务造成影响,少数派故障时能够达到 RPO = 0,RTO < 8s 的高可用能力。

(三)生态丰富/运维方便

对 DBA 来说,数据库运维工具的便捷度影响其工作是否高效的重要因素。OceanBase 运维管理工具 OCP 提供了图形化管理能力,包括数据库及相关资源的全生命周期管理、监控告警、性能诊断、故障恢复、备份恢复等,帮助我们更加高效地管理 OceanBase 数据库,降低企业的 IT 运维成本和学习成本。于我们而言,有三个功能是值得一提的。

其一,通过界面即可概览数据库基本情况及集群性能。对数据库运维人员来说,经常会出现业务 SQL 响应变慢的问题,需要分析是哪个节点的哪个 SQL 变慢了,通过 OCP 可以直观看到 TOP SQL 和慢 SQL,需要的信息都可以快速展示。

1704970401

其二,扩缩容更简单。在 MySQL 环境上加从节点时需要修改各种参数,甚至可能需要重启服务,而在 OCP 只需要对租户进行简单配置就能实现快速不停机在线扩缩容。

其三,备份恢复更方便。当需要恢复到指定时间点时,MySQL 也能实现,不过操作比较麻烦,需要找到对应 Binlog 文件,然后在命令行里指定解析的文件和需要恢复的时间点;而在 OCP 上只需白屏选中需要恢复的时间点即可。

1704970438

我们也用过其他企业提供的数据管理平台,最直观感受的就它们大多功能简单,使用复杂,而 OCP 功能丰富,使用简单,真的好用。

实践经验

迁移至 OceanBase 后为企业带来的收益是显而易见,在 OceanBase 的落地过程中也有一些经验分享。

  • 自增列使用习惯:OceanBase 3.1.x 版本自增列跳号是不连续的,在 MySQL 数据库中自增列是唯一、递增的值,用来标识数据的唯一性。相比 MySQL 这种集中式数据库,作为分布式数据库的 OceanBase 将数据分布在不同的机器上,为了保证高度兼容 MySQL 的同时不损失分布式系统自增列生成的性能,会出现自增列生成过程中跳号不连续的问题。不过,这对我们的业务影响不大,自增列只要保证唯一即可。
  • 原地升级:由于我们使用的是 OceanBase 3.1.5 版本,无法直接原地升级到 4.x 版本,类似 Oracle 早期版本的升级方式,需要在切换环境时迁移、同步数据。

写在最后

我们使用 OceanBase 已经有两年时间,生产系统集群一直稳定运行。随着 OceanBase 4.x 版本的持续更新,我们了解到其 OLAP 能力和数据压缩能力更强,且 MySQL 兼容性大幅提升。因此,我们计划将大数据量的业务迁移到 OceanBase 4.x 版本,使硬件使用成本进一步缩减。未来,也将根据公司关键业务升级需求的推进情况,将更多业务迁移至 OceanBase。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/273239.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

XDAG节点版本更新(0.6.5升级到0.7.0)

1、拉取最新的xdagj源码 mkdir /root/xdagj-0.7.0 && cd /root/xdagj-0.7.0 git clone https://github.com/XDagger/xdagj.git cd xdagj mvn clean package -Dmaven.test.skiptrue2、创建新的数据目录并解压程序包 mkdir /data/docker-compose/xdagj-7.0/bin -p cd /…

SpringBoot异常:类文件具有错误的版本 61.0, 应为 52.0的解决办法

问题&#xff1a; java: 无法访问org.mybatis.spring.annotation.MapperScan 错误的类文件: /D:/Program Files/apache-maven-3.6.0/repository/org/mybatis/mybatis-spring/3.0.3/mybatis-spring-3.0.3.jar!/org/mybatis/spring/annotation/MapperScan.class 类文件具有错误的…

辐射全国、面向世界、聚焦未来——华为(深圳)全球具身智能产业创新中心正式成立

3月15日&#xff0c;深圳市前海深港现代服务业合作区管理局&#xff08;以下简称“前海管理局”&#xff09;、深圳市宝安区人民政府、华为技术有限公司&#xff08;以下简称“华为”&#xff09;共同签署合作协议&#xff0c;宣布共建华为&#xff08;深圳&#xff09;全球具身…

LeetCode刷题记录:(11)组合(初识回溯算法)

leetcode传送通道 暂时记录&#xff0c;这篇没啥营养&#xff0c;不用看了 class Solution {List<List<Integer>> result new ArrayList<>(); // 存所有组合List<Integer> path new LinkedList<>(); //存每一个组合public List<List<Int…

前端路由跳转bug

路由后面拼接了id的千万不能取相近的名字&#xff0c;浏览器分辩不出&#xff0c;只会匹配前面的路径 浏览器自动跳转到上面的路径页面&#xff0c;即使在菜单管理里面配置了正确的路由 跳转了无数次&#xff0c;页面始终不对&#xff0c;检查了路由配置&#xff0c;没有任何问…

【iOS】——Blocks

文章目录 前言一、Blocks概要1.什么是Blocks 二、Block模式1.block语法2.block类型变量3.截获自动变量值4._Block修饰符5.截获的自动变量 三、Blocks的实现1.Block的实质2.截获自动变量值3._Block说明符4.Block存储域 前言 一、Blocks概要 1.什么是Blocks Blocks是C语言的扩…

Redis 八种常用数据类型详解

夯实基础&#xff0c;这篇文章带着大家回顾一下 Redis 中的 8 种常用数据类型&#xff1a; 5 种基础数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zse…

IDEA直接打包Docker镜像

以下为使用IDEA打包Docker镜像并推送到远程仓库&#xff08;使用Windows打包Docker镜像并推送到远程仓库&#xff09;教程 1 安装Docker Desktop 下载地址&#xff1a;https://www.docker.com/products/docker-desktop/ 安装成功后&#xff0c;可在cmd查看版本号 2 启动Do…

基于Qt 和python 的自动升级功能

需求&#xff1a; 公司内部的一个客户端工具&#xff0c;想加上一个自动升级功能。 服务端&#xff1a; 1&#xff0c;服务端使用python3.7 &#xff0c;搭配 fastapi 和uvicorn 写一个简单的服务&#xff0c;开出一个get接口&#xff0c;用于客户端读取安装包的版本&#…

微服务:高并发带来的问题的容错方案

1.相关脚本&#xff08;陈天狼&#xff09; 启动nacos客户端&#xff1a; startup.cmd -m standalone 启动sentinel控制台&#xff1a; # 直接使⽤jar命令启动项⽬(控制台本身是⼀个SpringBoot项⽬) java -Dserver.port8080 -Dcsp.sentinel.dashboard.serverlocalhost:808…

通过点击按钮实现查看全屏和退出全屏的效果

动态效果如图&#xff1a; 可以通过点击按钮&#xff0c;或者esc键实现全屏和退出全屏的效果 实现代码&#xff1a; <template><div class"hello"><el-button click"fullScreen()" v-if"!isFullscreen">查看全屏</el-butt…

Obsidian使用200+插件与70+种主题分享

主题资源 下载方式一&#xff1a; 网盘下载 密码:a3eu 下载方式二&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1fOgP8lY29sYxkUAbTlQQCw 提取码&#xff1a;qhxa 下载解压打开红色框文件夹 上面的是插件&#xff0c;下面的是主题 以下介绍安装主题 打开Obsidi…

苍穹外卖-day08:导入地址簿功能代码(单表crud)、用户下单(业务逻辑)、订单支付(业务逻辑,cpolar软件)

苍穹外卖-day08 课程内容 导入地址簿功能代码用户下单订单支付 功能实现&#xff1a;用户下单、订单支付 用户下单效果图&#xff1a; 订单支付效果图&#xff1a; 1. 导入地址簿功能代码&#xff08;单表crud&#xff09; 1.1 需求分析和设计 1.1.1 产品原型&#xff08…

Swift:.ignoresSafeArea():自由布局的全方位掌握

ignoresSafeArea(_ regions : edges:)修饰符的说明 SwiftUI布局系统会调整视图的尺寸和位置&#xff0c;以避免特定的安全区域。这就确保了系统内容&#xff08;比如软件键盘&#xff09;或设备边缘不会遮挡您的视图。要将您的内容扩展到这些区域&#xff0c;您可以通过应用该修…

Centos strema 9 环境部署Glusterfs9

本文档只是创建复制卷&#xff0c;分布式卷&#xff0c;分布式复制卷&#xff0c;纠删卷 操作系统 内核 角色 Ip地址 说明 CentOS Stream 9 x86_64 5.14.0-427.el9.x86_64 客户端 client 192.168.80.119 挂载存储业务机器 CentOS Stream 9 x86_64 5.14.0-427.el9.x8…

idea项目mapper.xml中的SQL语句黄色下划线去除

问题描述 当我们使用idea开发java项目时&#xff0c;经常会与数据库打交道&#xff0c;一般在使用mybatis的时候需要写一大堆的mapper.xml以及SQL语句&#xff0c;每当写完SQL语句的时候总是有黄色下划线&#xff0c;看着很不舒服。 解决方案&#xff1a; 修改idea的配置 Edi…

高效使用git流程分享

准备 假设你已经 clone 了当前仓库&#xff0c;并且你的终端位置已经位于仓库目录中。 查询状态 查询状态常用的命令有 git status 和 git branch。 前者用于查询更改文件情况&#xff0c;后者用于展示所有分支。 chatbot-system$ git status On branch develop Your bran…

Java项目:62 基于ssm的校园驿站管理系统+jsp

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 管理员管理快递仓库信息&#xff0c;管理待发货信息&#xff0c;管理已收快递&#xff0c;管理物流以及留言信息&#xff0c;管理员工和用户资…

影响交易收益的因素有哪些?

在尝试做交易时&#xff0c;你可能会问自己一个问题&#xff1a;交易一天能赚多少钱&#xff1f;“如果我全职投入交易&#xff0c;一天能赚多少&#xff1f;”或者更广泛地说&#xff0c;“交易能为我带来怎样的财富&#xff1f;”这些问题本质上都充满了不确定性&#xff0c;…

【蓝桥杯选拔赛真题69】python小松鼠运坚果 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

目录 python小松鼠运坚果 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python小松鼠运坚果 第十五届蓝桥杯青少年组python比赛选拔赛真题 一…
最新文章