零、简介

MariaDB Galera Cluster(下文简称MGC集群),是一套在MySQL innodb存储引擎上面实现多主、数据实时同步以及强一致性的关系存储架构,业务层面无需做读写分离工作,数据库读写压力都能按照既定的规则分发到 各个节点上去,在数据方面完全兼容 MariaDB 和 MySQL。

功能特性:

1、同步复制 Synchronous replication

2、Active-active multi-master 拓扑逻辑

3、可对集群中任一节点进行数据读写

4、自动成员控制,故障节点自动从集群中移除

5、自动节点加入

6、真正并行的复制,基于行级

7、直接客户端连接,原生的 MySQL 接口

8、每个节点都包含完整的数据副本

9、多台数据库中数据同步由 wsrep 接口实现

缺点:

1、目前的复制仅仅支持InnoDB存储引擎,任何写入其他引擎的表,包括mysql.*表将不会复制,但是DDL语句会被复制的,因此创建用户将会被复制,但是insert into mysql.user…将不会被复制的.

2、DELETE操作不支持没有主键的表,没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集.

3、在多主环境下LOCK/UNLOCK TABLES不支持,以及锁函数GET_LOCK(), RELEASE_LOCK()…

4、查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。

5、允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。

6、由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对 于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).

7、XA事务不支持,由于在提交上可能回滚。

8、整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。

9、集群节点建议最少3个。

10、如果DDL语句有问题将破坏集群。

1、环境规划

node1:192.168.1.30:3310

node2:192.168.1.30:3311

node3:192.168.1.30:3312

2、部署环境

创建目录

mkdir /data/mysql/mariadb/cluster0/

mkdir /data/mysql/mariadb/cluster0/confmkdir /data/mysql/mariadb/cluster0/datamkdir /data/mysql/mariadb/cluster1/

mkdir /data/mysql/mariadb/cluster1/confmkdir /data/mysql/mariadb/cluster1/datamkdir /data/mysql/mariadb/cluster2/

mkdir /data/mysql/mariadb/cluster2/datamkdir /data/mysql/mariadb/cluster2/conf

编辑配置文件

vi /data/mysql/mariadb/cluster0/conf/server.cnf

[server]

[mysqld]

server_id=130pid-file=/var/run/mysqld/mysqld.pid

socket=/var/run/mysqld/mysqld.sock

basedir=/usr

datadir=/var/lib/mysql

tmpdir=/tmp

user=mysql

skip-external-locking

skip-name-resolve

character-set-server=utf8

port=3306#

# Instead of skip-networking the default is now to listen only on

# localhostwhich is more compatible and is not lesssecure.

#bind-address = 127.0.0.1#

#*Fine Tuning

#

max_connections=1000connect_timeout=5wait_timeout=600max_allowed_packet=16M

thread_cache_size=128sort_buffer_size=4M

bulk_insert_buffer_size=16M

tmp_table_size=32M

max_heap_table_size=32M

[galera]

wsrep_causal_reads=ON #节点应用完事务才返回查询请求

wsrep_provider_options="gcache.size=128M"#同步复制缓冲池

wsrep_certify_nonPK=ON #为没有显式申明主键的表生成一个用于certificationtest的主键,默认为ON

#log-bin=/app/galera/mysql-bin #如果不接从库,注释掉

#log_slave_updates=1#如果不接从库,注释掉

query_cache_size=0#关闭查询缓存

wsrep_on=ON #开启全同步复制模式

wsrep_provider=/usr/lib/galera/libgalera_smm.so #galera library

wsrep_cluster_name=MGC-Cluster

#wsrep_cluster_address="gcomm://192.168.1.30:4567,192.168.1.30:4568,192.168.1.30:4569"#galera cluster URL

wsrep_node_name=mariadb-0#wsrep_node_address=172.18.0.4wsrep_sst_auth=syncuser:syncuser

#wsrep_sst_method=xtrabackup-v2

wsrep_sst_method=rsync

binlog_format=row

default_storage_engine=InnoDB

innodb_autoinc_lock_mode=2#主键自增模式修改为交叉模式

wsrep_slave_threads=8#开启并行复制线程,根据CPU核数设置

innodb_flush_log_at_trx_commit=0#事务提交每隔1秒刷盘

innodb_buffer_pool_size=500M

[embedded]

[mariadb]

[mariadb-10.3]

cluster0/server.cnf配置文件 先注释掉  wsrep_cluster_address, 因为要初始化用户之后再开始集群

注意: wsrep_provider_options="gcache.size=128M"#同步复制缓冲池 ,根据电脑固态硬盘容量大小设置成,这里设置成128M

cluster1差异部分

wsrep_node_name=mariadb-1

cluster2差异部分

wsrep_node_name=mariadb-2

第一次启动节点

docker run -d --name mariadb-cluster0 --expose 4567 -p 4567:4567 -p 3310:3306 -e TIMEZONE=Asia/Shanghai -v /data/mysql/mariadb/cluster0/conf:/etc/mysql/conf.d -v /data/mysql/mariadb/cluster0/data:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yse mariadb:10.3docker run-d --name mariadb-cluster1 --expose 4567 -p 4568:4567 -p 3311:3306 -e TIMEZONE=Asia/Shanghai -v /data/mysql/mariadb/cluster1/conf:/etc/mysql/conf.d -v /data/mysql/mariadb/cluster1/data:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yse mariadb:10.3docker run-d --name mariadb-cluster2 --expose 4567 -p 4569:4567 -p 3312:3306 -e TIMEZONE=Asia/Shanghai -v /data/mysql/mariadb/cluster2/conf:/etc/mysql/conf.d -v /data/mysql/mariadb/cluster2/data:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yse mariadb:10.3

分别在三个容器中添加mysql账户 注:生产环境注意安全,我是在测试环境为了方便

mysql -uroot -p

GRANT ALL PRIVILEGES ON*.* TO 'root'@'%' IDENTIFIED BY '123456'WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON*.* TO 'syncuser'@'%' IDENTIFIED BY 'syncuser'WITH GRANT OPTION;

flush privileges;

shutdown;

先停止然后删除3个容器

然后分别解开wsrep_cluster_address注释,再次启动3个节点  --wsrep-new-cluster只有在第一次集群,第一个节点,才需要加上,下次启动不需要此参数

docker run -d --name mariadb-cluster0 --expose 4567 -p 4567:4567 -p 3310:3306 -e TZ=Asia/Shanghai -v /data/mysql/mariadb/cluster0/conf:/etc/mysql/conf.d -v /data/mysql/mariadb/cluster0/data:/var/lib/mysql mariadb:10.3 --wsrep-new-cluster

docker run-d --name mariadb-cluster1 --expose 4567 -p 4568:4567 -p 3311:3306 -e TZ=Asia/Shanghai -v /data/mysql/mariadb/cluster1/conf:/etc/mysql/conf.d -v /data/mysql/mariadb/cluster1/data:/var/lib/mysql mariadb:10.3docker run-d --name mariadb-cluster2 --expose 4567 -p 4569:4567 -p 3312:3306 -e TZ=Asia/Shanghai -v /data/mysql/mariadb/cluster2/conf:/etc/mysql/conf.d -v /data/mysql/mariadb/cluster2/data:/var/lib/mysql mariadb:10.3

注意启动顺序

查看是否成功 SHOW STATUS LIKE 'wsrep_cluster_size';

三、遇到问题

1、WSREP: failed to open gcomm backend connection: 131: invalid UUID

进入该数据库节点/var/lib/mysql/目录,将文件gvwstate.dat移除(mv)掉。然后重新启动mairbd即可

2、bind: Address already in use

查看mysql进程:ps  -ef | grep mysql,然后杀死该进程,在启动mariadb

3、It may not be safe to bootstrap the cluster from this node

数据库集群宕机,在运行/bin/galera_new_cluster启动第一个节点时报错,意思是该节点不是最后一个停掉的,不能安全启动;

然后可以尝试在其他节点运行该命令;

如果报错都相同,则需要从3个节点中选取一个主节点,修改/var/lib/mysql/grastate.dat,把其中safe_to_bootstrap的值改为1即可。然后运行/bin/galera_new_cluster。其他节点依次启动

4、[ERROR] WSREP: failed to open gcomm backend connection: 110

现象:集群三个节点无法启动,日志有如上报错,gvwstate.dat不存在,三个grastate.dat中seqno值都为-1,并且其内无safe_to_bootstrap参数。

原因:

1、数据库如果正常关闭的话,gvwstate.dat文件是不存在的,如果三个节点同时关闭(无数据变化)seqno值应该是相等的,且不为-1。

2、如果这个时候无论先后顺利启动节点,都会导致所有节点都在不断重启中,并且seqno值由原来的值变为-1。

3、此时无法选举出来哪个作为主启动节点,需要再第一个节点启动时手动指定该节点作为集群主节点启动。

解决办法:

选定主节点启动时加--wsrep-new-cluster参数启动

正常启动后的节点重新生成gvwstate.dat文件

5、MySQL Unknown/unsupported storage engine: INNODB

1.删除data目录下文件

ib_logfile0 , ib_logfile1 , ibdata1

2.重新启动服务

6、[ERROR] mysqld: Table './mysql/user' is marked as crashed and should be repaired

修复过程:

表user被标记有问题,需要修复

./myisamchk -c -r /var/lib/mysql/mysql/user.MYI

出现可以参考这些错误,但根据实际情况来,版本不一样情况可能会有变化。

mgc mysql_数据库之MySQL部署MGC方案(四)相关推荐

  1. mysql数据库启动_MySQL数据库之Mysql启动的方式(四种)

    本文主要向大家介绍了MySQL数据库之Mysql启动的方式(四种) ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 废话不多说了,直奔主题了. mysql的四种启动方式: 1.m ...

  2. 二进制编译安装mysql_数据库(MySQL)二进制安装+编译安装 + MariaDB编译安装

    配置文件: my.cnf [mysql] :只用于mysql这个客户端 [mysqld] [client]:共享与所有客户端,如mysqldump等 MySQL二进制包安装:(在 mysql/下有个 ...

  3. mysql双活多活部署_MySQL数据库之MySQL双活部署方案

    本文主要向大家介绍了MySQL数据库之MySQL双活部署方案 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. Pactera 文思海辉 运维云系统 MySQL双活部署方案 目录 ...

  4. heroku搭建mysql_在heroku上部署Flask应用程序并将其连接到颚数据库mysql数据库

    heroku搭建mysql By: Edward Krueger Data Scientist and Instructor and Douglas Franklin Teaching Assista ...

  5. MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解

    MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解 Percona XtraDB Cluster简称PXC.Percona Xtradb Cluster的实现是在 ...

  6. MySQL数据库的优化(下)MySQL数据库的高可用架构方案

    [51CTO独家特稿]如果单MySQL的优化始终还是顶不住压力时,这个时候我们就必须考虑MySQL的高可用架构(很多同学也爱说成是MySQL集群)了,目前可行的方案有: 一.MySQL Cluster ...

  7. MySQL数据库之互联网常用架构方案(全)

    作者:尜尜人物 本文包含数据库架构原则.常见的四种架构方案.两种一致性解决方案.以及作者个人的一些见解. 一.数据库架构原则 1.高可用 2.高性能 3.一致性 4.扩展性 二.常见的架构方案 方案一 ...

  8. MySQL高可用方案-PXC环境部署记录

    之前梳理了Mysql+Keepalived双主热备高可用操作记录,对于mysql高可用方案,经常用到的的主要有下面三种: 一.基于主从复制的高可用方案:双节点主从 + keepalived 一般来说, ...

  9. MySQL数据库的分库分表方案

    MySQL数据库的分库分表方案 一. 数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数 ...

最新文章

  1. 2015第22周一Web性能测试工具及IE扩展区别
  2. bpnn matlab工具箱,bpnn——matlab工具箱-归一化函数 premnmx、tramnmx、postmnmx、mapminmax...
  3. 1.11实例:保存图书信息
  4. IP网络设计系列之-局域网设计
  5. redisTemplate批量写入数据
  6. 中国双接口芯片卡市场趋势报告、技术动态创新及市场预测
  7. iOS 应用启动慢的原因找到了!
  8. MySQL数据库系统基础_wuli大世界_新浪博客
  9. C语言实践项目:2019年个税计算器
  10. 使用Java的Graphics类进行绘图
  11. 解决RabbitMQ无法使用guest用户登录问题
  12. larval 进程管理
  13. java ppt转pdf_JAVA如何把word,excel,ppt转成PDF,已经过测试成功。
  14. 这招涨粉神术,你不得不学
  15. 2022国庆头像制作iAPP安卓源码+附APP成品
  16. 会声会影如何去除视频黑边
  17. hibernate c0p3 mysql_COP3详细配置说明
  18. TCA9548的控制
  19. UVA10820欧拉函数求互质的对数
  20. 明风社软件为什么适合学生

热门文章

  1. 小花梨的三角形--美登杯
  2. 【NOIP2017提高A组冲刺11.5】轰炸
  3. 记free 多次引发的内存踩踏事件
  4. php java rsa_java和php实现RSA加密互通-b
  5. net framework4.0未能成功安装、另一个安装操作正在进行、请继续这个操作之前完成那个操作。
  6. 蓝桥ROS之f1tenth案例学习与调试(成功)
  7. 硬盘修复真经 误区、缺陷、参数与低格
  8. 企业行业云计算解决方案
  9. 【C#】身份证识别(三):身份证信息识别
  10. 计蒜客信息学入门赛 #17--B