MariaDB Galera Cluster部署实践
原理
官方地址: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部署实践的更多相关文章
- MariaDB Galera Cluster部署手册
MariaDB Galera Cluster部署手册 galara保证双主数据库的同步及一致性 1.环境准备 基于新部署.最小化安装centos6.5 1> yum install opens ...
- MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)
MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群) OneAPM蓝海讯通7月3日 发布 推荐 4 推荐 收藏 14 收藏,1.1k 浏览 MariaDB 作为 ...
- MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)
MariaDB Galera Cluster 部署(如何快速部署MariaDB集群) [日期:--] 来源:Linux社区 作者:Linux [字体:大 中 小] MariaDB作为Mysql的一个分 ...
- MariaDB Galera Cluster 部署 + keepalived实现高可用
MariaDB Galera Cluster 部署 MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性,同时提高系统的负载能力 ...
- MariaDB Galera Cluster 部署
原文 http://code.oneapm.com/database/2015/07/02/mariadb-galera-cluster/MariaDB作为Mysql的一个分支,在开源项目中已经广泛 ...
- 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 ...
- Mariadb Galera Cluster 群集 安装部署
#Mariadb Galera Cluster 群集 安装部署 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html # ...
- MariaDB Galera Cluster集群搭建
MariaDB Galera Cluster是什么? Galera Cluster是由第三方公司Codership所研发的一套免费开源的集群高可用方案,实现了数据零丢失,官网地址为http://g ...
- 从 MySQL+MMM 到 MariaDB+Galera Cluster : 一个高可用性系统改造
很少有事情比推出高可用性(HA)系统之后便经常看到的系统崩溃更糟糕.对于我们这个Rails运行机的团队来说,这个失效的HA系统是MySQL多主复制管理器(MMM). 我们已经找寻MMM的替代品有一段时 ...
随机推荐
- 使用jsp,tag提取字符串中的单词
JSP中调用Tag在表单中输入字符串,提取其中的单词 参考代码:giveString.jsp <%@ page contentType="text/html; charset=GB23 ...
- UltraEdit文本行数多变一和一边多
一.UltraEdit文本行数多行转换成一行 1.文本样式内容 1.qwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiop ...
- mysql 新建用户并赋予远程访问权限
不多说直接上代码 [root@demo /]# mysql -u root -p #登录服务器数据库 Enter password:123xxx #1.创建一个新用户 testuser 密码为 tes ...
- Pairwise 找到你的另一半
都说优秀的程序员擅长面向对象编程,但却经常找不到另一半,这是为什么呢?因为你总是把自己局限成为一个程序员,没有打开自己的思维. 这是一个社群的时代啊,在这里你应该找到与你有相同价值观但又互补的另一半. ...
- [转帖]EXPDP dumpfile和parallel的关系
http://blog.itpub.net/28602568/viewspace-2133375/ 转帖 EXPDP 里面 parallel 与 dumpfile 里面的文件数的关系. 但是我这里有一 ...
- P2801 教主的魔法(分块入门)
两个月之前听yyr学长讲的分块,感觉是个很神奇的暴力,但到现在还是懵的一匹 #include<bits/stdc++.h> using namespace std; ; int belon ...
- 一道B树的题目---先记一下, 还没看到B树
D
- git基本概念
工作区:电脑上存放源代码的文件夹 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库. 版本库包含stage(暂存区),master分支,以及指向master分支的指 ...
- Debian社区群龙无首
导读 前两天有过消息 Debian 包维护者 Michael Stapelberg 因对 Debian 社区的现状不满而宣布退出 Debian 的维护,该消息引发了人们对于 Debian 的担忧.11 ...
- Day 1 下午
POINT 1 贪心 每一步都取当前的最优解的思想:一般来说符合直观思路,需要严格的证明:OI中使用多个错误的贪心策略进行加成有时会有良好的效果 例一给定N个农民,第i个农民有Ai单位的牛奶,单价Pi ...