原理

官方地址:http://galeracluster.com/documentation-webpages/index.html

Galera Cluster与传统的复制方式不同,不通过I/O_thread和sql_thread进行同步,而是在更底层通过wsrep实现文件系统级别的同步,可以做到几乎实时同步,而其上的MySQL对此一无所知这就要求MySQL能够调用wsrep提供的API来完成,在Mariadb10.1之前的版本,支持Galera Cluster的版本是与Mariadb分开发行的,其版本名称就成为Mariadb-Galera,Mariadb10.1以后的版本中MariaDB Galera Cluste不再单独发行,而是以galera-25.3.12-2.el7.x86_64包的形式出现

MariaDB Galera Cluster主要功能:
同步复制
真正的multi-master,即所有节点可以同时读写数据库
自动的节点成员控制,失效节点自动被清除
新节点加入数据自动复制
真正的并行复制,行级
用户可以直接连接集群,使用感受上与MySQL完全一致

 

同步流程:

当client端执行dml操作时,将操作发给server,server将数据库所做的更改收集到一个写集中发给group(cluster),
cluster中每个动作对应一个GTID,其它server接收到并通过验证(合并数据)后,执行appyl_cb动作和commit_cb动作,若验证没通过,则会退出处理
当前server节点验证通过后,执行commit_cb,并返回,若没通过,执行rollback_cb。
只要当前节点执行了commit_cb和其它节点验证通过后就可返回。

集群安装

说明:Galera集群至少需要三个节点的服务器硬件,以下操作在三个节点执行。

1、主机名、hosts文件修改

10.17.12.98 node1
10.17.12.99 node2
10.17.12.101 node3

2、防火墙、selinux关闭等

setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
systemctl disable firewalld.service
systemctl stop firewalld.service

3、配置yum源

 more mariadb.repo
[mariadb]
name = mariadb
baseurl = http://yum.mariadb.org/10.0/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

换成国内的镜像,可能速度会好很多

[mariadb]
name = mariadb
baseurl = http://mirrors.ustc.edu.cn/mariadb/yum/10.0/centos7-amd64/
gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

4、安装软件

yum install MariaDB-Galera-server MariaDB-client galera -y

5、启动数据库

/etc/init.d/mysql start

6、设置密码

mysqladmin -u root password 12345678

7、添加集群认证用户

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'galera'@'%' IDENTIFIED BY 'galera' WITH GRANT OPTION;
MariaDB [(none)]> flush privileges;

8、关闭所有数据库

/etc/init.d/mysql stop

配置修改

编辑/etc/my.cnf,添加如下配置

[mariadb]
query_cache_size=0 # 关闭查询缓存
binlog_format=ROW # binlog文件格式:行
default_storage_engine=innodb # Mariadb 存储引擎
innodb_autoinc_lock_mode=2 #主键自增模式修改为交叉模式
wsrep_provider=/usr/lib64/galera/libgalera_smm.so #galera 库文件
wsrep_cluster_address=gcomm://10.17.12.101,10.17.12.99,10.17.12.98 # galera集群url
wsrep_cluster_name='openstack' # galera集群名称
wsrep_node_address='10.17.12.98' # 该节点的地址
wsrep_node_name='node3' # 该节点的主机名
wsrep_sst_method=xtrabackup-v2 # 拷贝模式
wsrep_sst_auth=galera:galera # galera集群认证用户:密码

其他节点的参数需要修改/etc/my.cnf中相应部分与每个节点对应

如果启动其他节点数据库有问题,建议改成rsync模式试试,但是最终我们建议使用xtrabackup-v2

将集群中的数据复制到某个节点上实现备份,或者节点新加入集群需要同步数据。
Galera Cluster有两种数据复制方式:
State Snapshot Transfers (SST):全量同步
Incremental State Transfers (IST):增量同步
简单来讲。SST就是同步整个数据库,IST是同步一个库与另一个库相差的部分事务。

启动集群

#启动第一个节点
/etc/init.d/mysql bootstrap
10.1以上的好像是galera_new_cluster命令启动
#启动其余节点
/etc/init.d/mysql start

启动数据库服务后,登录mysql数据库库,通过wsrep_cluster_size参数来判断启动是否成功。

SHOW STATUS LIKE 'wsrep_cluster_size';

运维常用命令

查看集群状态

show status like 'ws%';
注释:
wsrep_cluster_status为Primary,表示节点为主节点,正常读写。
wsrep_ready为ON,表示集群正常运行。
wsrep_connected: 如果该值为Off,且wsrep_ready的值也为Off,则说明该节点没有连接到集群
wsrep_cluster_size为3,表示集群有三个节点。
wsrep_cluster_state_uuid:在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群。
wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的.如果值不同,说明该节点被临时”分区”了.当节点之间网络连接恢复的时候应该会恢复一样的值。
wsrep_flow_control_paused:表示复制停止了多长时间.即表明集群因为Slave延迟而慢的程度.值为0~1,越靠近0越好,值为1表示复制完全停止.可优化wsrep_slave_threads的值来改善.
wsrep_flow_control_sent:表示该节点已经停止复制了多少次.

查看复制模式

show variables like "wsrep_sst_method";

wsrep_local_state_comment 状态对照表

文件理解

grastate.dat
默认路径为:/var/lib/docker/volumes/mariadb/_data/grastate.dat
可以通过该文件查看到该节点记录的uuid和seqno,当节点正常退出Galera集群时,会将GTID的值更新到该文件中。
如果该节点数据库服务正在运行,则seqno的值是-1的
在断电的情况下,所有节点的seqno值可能都相同,此时需根 gvwstate.dat判断启动节点 gvwstate.dat
默认路径为:/var/lib/docker/volumes/mariadb/_data/grastate.dat
此文件保存了集群状态信息,如果集群正常关闭的话,这个文件会自动删除掉。

查看节点状态

wsrep_local_state:
节点的状态,取值1-6。
取值1:The node starts and establishes a connection to the Primary Component.
取值2:When the node succeeds with a state transfer request, it begins to cache write-sets.
取值3:The node receives a State Snapshot Transfer. It now has all cluster data and begins to apply the cached write-sets.
Here the node enables Flow Control to ensure an eventual decrease in the slave queue.
取值4:The node finishes catching up with the cluster. Its slave queue is now empty and it enables Flow Control to keep it empty.
The node sets the MySQL status variable wsrep_ready to the value 1. The node is now allowed to process transactions.
取值5:The node receives a state transfer request. Flow Control relaxes to DONOR. The node caches all write-sets it cannot apply.
取值6:The node completes the state transfer to joiner node.

这是官方的,除此之外还有一个0状态initialized,初始化状态。

浅谈

1、感觉性能逊色于主从架构

2、一个事物提交,在节点配置不同的情况下,会等待性能最差的节点结束,才能保持数据一致。

3、涉及到的端口

4444:请求SST(全量同步),在新节点加入时起作用
4568:传输IST(增量同步),节点下线,重启加入时起作用
4567:组成员之间沟通的端口

问题

安装

不知道是不是bug先用rsync模式启动一次再改回xt模式就可以了

异常断电

当机房突然停电,所有galera主机都非正常关机,来电后开机,会导致galera集群服务无法正常启动。如何处理?
第1步:开启galera集群的群主主机的mariadb服务。
第2步:开启galera集群的成员主机的mariadb服务。
异常处理:galera集群的群主主机和成员主机的mysql服务无法启动,如何处理?
解决方法一:第1步、删除garlera群主主机的/var/lib/mysql/grastate.dat状态文件
/bin/galera_new_cluster启动服务。启动正常。登录并查看wsrep状态。
第2步:删除galera成员主机中的/var/lib/mysql/grastate.dat状态文件
systemctl restart mariadb重启服务。启动正常。登录并查看wsrep状态。
解决方法二:第1步、修改garlera群主主机的/var/lib/mysql/grastate.dat状态文件中的0为1
/bin/galera_new_cluster启动服务。启动正常。登录并查看wsrep状态。
第2步:修改galera成员主机中的/var/lib/mysql/grastate.dat状态文件中的0为1
systemctl restart mariadb重启服务。启动正常。登录并查看wsrep状态。

脑裂

set global wsrep_provider_options="pc.bootstrap=true";
通过这个命令来强制恢复出现脑裂的节点。

MariaDB Galera Cluster部署实践的更多相关文章

  1. MariaDB Galera Cluster部署手册

    MariaDB Galera Cluster部署手册 galara保证双主数据库的同步及一致性 1.环境准备 基于新部署.最小化安装centos6.5 1>  yum install opens ...

  2. MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)

    MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)  OneAPM蓝海讯通7月3日 发布 推荐 4 推荐 收藏 14 收藏,1.1k 浏览 MariaDB 作为 ...

  3. MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)

    MariaDB Galera Cluster 部署(如何快速部署MariaDB集群) [日期:--] 来源:Linux社区 作者:Linux [字体:大 中 小] MariaDB作为Mysql的一个分 ...

  4. MariaDB Galera Cluster 部署 + keepalived实现高可用

    MariaDB Galera Cluster 部署 MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力 ...

  5. MariaDB Galera Cluster 部署

    原文  http://code.oneapm.com/database/2015/07/02/mariadb-galera-cluster/MariaDB作为Mysql的一个分支,在开源项目中已经广泛 ...

  6. Centos 7 MariaDB Galera cluster 部署

    一.安装环境准备 1.系统: CentOS Linux release 7.4.1708 (Core) 2.hosts 10.6.32.51 openstack1 10.6.32.52 opensta ...

  7. Mariadb Galera Cluster 群集 安装部署

    #Mariadb Galera Cluster 群集 安装部署 openstack pike 部署  目录汇总 http://www.cnblogs.com/elvi/p/7613861.html # ...

  8. MariaDB Galera Cluster集群搭建

    MariaDB Galera Cluster是什么?   Galera Cluster是由第三方公司Codership所研发的一套免费开源的集群高可用方案,实现了数据零丢失,官网地址为http://g ...

  9. 从 MySQL+MMM 到 MariaDB+Galera Cluster : 一个高可用性系统改造

    很少有事情比推出高可用性(HA)系统之后便经常看到的系统崩溃更糟糕.对于我们这个Rails运行机的团队来说,这个失效的HA系统是MySQL多主复制管理器(MMM). 我们已经找寻MMM的替代品有一段时 ...

随机推荐

  1. (n)e(m)

    经常会看到类似于 1e30 9e5 类似的表达式 (我一个蒟蒻不懂啊) 于是 给自己解释解释 那么 nem就是 n乘以10的m次方 (哈哈哈哈,我简直是太弱了)

  2. 菜鸟学IT之python网页爬取多页爬取

    作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3002 0.从新闻url获取点击次数,并整理成函数 newsUrl news ...

  3. KVM宿主机上虚拟机动态添加新磁盘

    (1)KVM宿主机查看运行的虚拟机 $ virsh list --all (2)将qcow2的磁盘移动到/var/lib/libvirt/images/,比如为centos.qcow2 (3)进入/e ...

  4. echarts实时数据图表

    import React, { PureComponent } from 'react'; import ReactEcharts from 'echarts-for-react'; import m ...

  5. Django(八)下:Model操作和Form操作、序列化操作

    二.Form操作 一般会创建forms.py文件,单独存放form模块. Form 专门做数据验证,而且非常强大.有以下两个插件: fields :验证(肯定会用的) widgets:生成HTML(有 ...

  6. 财务CLOUD成本核算

    1.关账  仓库账关账 2.应收应付是否已审核 生成财务应收应付 3.存货账关账 4.1采购存货核算 4.2零成本维护 4.3成本中心设置 4.4成本项目设置 4.5费用项目设置 4.6成本项目匹配方 ...

  7. stream流操作List工具类

    工作中操作List对于程序猿来说是"基本操作",为了更加便利,对JDK8的新特性stream流进行二次封装.话不多说,直接上代码 package com.mydemo; impor ...

  8. Vue 实现左边导航栏且右边显示具体内容(element-ui)

    最终效果图: 现在开始进入正题: 1.安装element-ui npm i element-ui -S CDN 目前可以通过 unpkg.com/element-ui 获取到最新版本的资源,在页面上引 ...

  9. Tornado实现多进程/多线程的HTTP服务

    用tornado web服务的基本流程 实现处理请求的Handler,该类继承自tornado.web.RequestHandler,实现用于处理请求的对应方法如:get.post等.返回内容用sel ...

  10. python爬虫基础应用----爬取校花网视频

    一.爬虫简单介绍 爬虫是什么? 爬虫是首先使用模拟浏览器访问网站获取数据,然后通过解析过滤获得有价值的信息,最后保存到到自己库中的程序. 爬虫程序包括哪些模块? python中的爬虫程序主要包括,re ...