本文目录一览:
- 1、mysql cluster 集群 可以在已有的数据库创建吗
- 2、Mysql Cluster 与 OceanBase 有哪些区别?哪个更优秀
- 3、解决k8s MysqlCluster 无故重启问题
- 4、为什么说 MySQL Cluster 是 shared-nothing 架构的
- 5、如何连接 mysql cluster
mysql cluster 集群 可以在已有的数据库创建吗
没有看懂你的意思,如果是想创建独立的三个集群,是不可以的,cluster的集群主要分三部分,管理节点、计算节点、存储节点,其中所有的管理操作都在管理节点上进行,如果你已经有了一个集群了,该集群下有一个数据库,创建新的数据库只不过是段或宴给数据库增加了两个实例(oracle的叫法,实例),而不是新创建了两个集群。
如果想新创建集群,需要保证有新的管理节点、计算节点和存储节点。在此给你提个建议,尽量不要把多个项目的数据库放在同一个集群下,很麻烦的,我们公司的项目就因为甲方资源握银紧张,没办法,三个项目用了一个cluster的集群,结果只要其中一个项目使用数据库资源过大,就会把三个项目团薯一起影响。
所以如果资源足够的话,尽量拆成多个集群。
[img]Mysql Cluster 与 OceanBase 有哪些区别?哪个更优秀
1. 分布式存储部分是做为mysql的一种存储引擎实现的(NDB),上层SQL没有感知,所以SQL层应该没有支持分布式并行查询处理。OceanBase的基于代价的查询优御仿兄化器镇袭对于大查询会充分发挥分布式数据库的并行处理能力。再如OB分布式执行计划可以下压到存储所在机器。而ndb node实现存储引擎接口没有复杂的查询处理能力。
2. Mysql cluster中主备同步是用两阶段提交实现的,这个有点无语。另外REDO日志异步写入,延时一秒。也就是说宕机会丢一大带秒的事务,想象一下双十一每秒17万笔交易丢失……这块是它的整体架构导致事务层实现机制的问题。
btw,mysql cluster属于分布式数据库,mysql主从几节点都不是分布式数据库。
解决k8s MysqlCluster 无故重启问题
使用 bitpoke的mysql-operator 作为k8s的mysql服务,使用的版本v0.4.0,
github地址:
MysqlCluster operator主要支持如下功能
建立的mysql服务每隔一段时间就重启,事件的报错信岁物息如下
为什么心跳不通过?
貌似心跳机制不通过,查看pod信息
心跳默认20秒不通过,就重启,看源码也没有心跳配置项,坑啊,不过这只是表象,到底是什么导致心跳不通过?
mysqlCluster启动时,会启动4个容器metrices-exporter, mysql, pt-heartbeat, sidecar。看这4个容器的cpu, 内存使用情况,发现mysql内存超过,如下:
看最后状态,OOMKilled,而且当前内存使用率3.9G 接近limit 4G的配雀银设置。 找到产生的问题原因了,是因为内存超了,被容器杀掉,导致心跳不通过报错重启
为什么内存使用这么高?
思考mysql使用内存高,可能跟mysql自身缓存有关系,查内存相关参数
看到 innodb_buffer_pool_size 设置得值特别大,这个参数设置只有主要缓存innodb表的索引,数据,插入数据时的缓冲,但默认是8M。
为什么 innodb_buffer_pool_size 设置变得这么大?
翻翻mysqlCluster源码,跟innodb_buffer_pool_size 有关代码
default.go
问题就在这里,为了保证资源独占,mysql设置时是request = limit,因为自动计算导致 innodb-buffer-pool-size过大,最终导致oom,需要手动设置innodb-buffer-pool-size,就手动设置2G吧
设置 innodb-buffer-pool-size 不生效?
设置后,pod不重启? 参数没有生效设置。设另一个512M就生效了。尝试加入引号,作为字符串处理,配置开始生效。难道跟类型有关系? 继续看相关源码
default.go
看这个类型定义cluster.Spec.MysqlConf
MysqlClusterSpec
intstr
如果设置成数字,培宴则整数是int32位
看int32位的长度
int32 the set of all signed 32-bit integers (-2147483648 to 2147483647)
至此内存使用过大的问题,解决了,内存使用也降下来了
为什么说 MySQL Cluster 是 shared-nothing 架构的
share nothing和share disk是两种常见的分布式数据库模型。
share nothing架构下,每个结点让激纳都有自己的CPU、内存、存储。跨结点的数据访问通过结点之间的网络通讯来完成。
share disk架构下,每个结点有自己的CPU和内存,但是共享同一个存储。也就是说,存储只有一份,放在单独的分布式文件系统上,由文件系统本身来保证其可用性,一般由高端的专门存储设备来完成。坦没
大多数分布式数据库铅键都是share nothing的。比较典型的share disk数据库有oracle RAC和DB2 PureScale。mysql cluster的结点之间不共享存储(每个结点有自己的存储),所以属于share nothing。
share nothing和share disk各有利弊,无法简单地认为谁优谁劣,也不存在谁才是“真正的”分布式数据库的问题。二者当然都可以实现事务。一般来说,share disk的实现更复杂,价格也更昂贵。
如何连接 mysql cluster
Driver template :选择要连巧缺接数据库类型我用mysql选择MYSQL Connector/J Driver name :孝陆辩所创建连接名字,随便写 Driver classname:com.mysql.jdbc.Driver要Add JARs选择 com.mysql.jdbc.Driver路径显示 使用oracle参考悉简我面式