程序猿成长日记 | MariaDB Galera Cluster多主集群设置技巧

Posted 博云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序猿成长日记 | MariaDB Galera Cluster多主集群设置技巧相关的知识,希望对你有一定的参考价值。



数据库作为线上服务器重要的一环,在实际生产中,我们通常需要对数据呵护备至。为了避免可抗和不可抗因素带来的数据损失,数据库的备份对我们来说尤为重要。


正所谓鸡蛋不要都放到了一个篮子里面,多一处备份,就多一处保险。为了保证数据的安全降低数据库负载压力,现如今用的最多的就是数据库的主备模型。但是主备模型真的无懈可击吗?


mysql数据库是线上最常用的数据库之一,当然MySQL的主备模型也是线上成熟的数据库集群解决方案。那MySQL集群在实际生产中有什么不足吗?金无足赤,人无完人,MySQL集群同样存在着缺点。在说MySQL集群的缺点之前,我们先聊聊MySQL集群实现的原理。


在线上业务中,试想一下,如果业务量巨大,我们只有一台数据库服务器,这台服务器既要负责数据的读取同时要兼顾数据的写入操作。这样MySQL的压力会不会很大呢?答案是肯定的,这时候MySQL集群有效的解决了这个问题。


我们利用三台或者多台服务器来做MySQL服务器,同时选定一个为主,通常叫做master,其余称作为备slave。而且我们分配给主和备明确的任务,master负责数据的写入操作,slave负责的是读取操作。这样MySQL的压力是不是小很多了呢。另外master端写入的数据会同步到slave端来保持数据的一致性。这样上文所说的问题,完美解决。


其实并不然,试想一下,master端的数据同步到slave端会产生问题吗?数据的一致性会不会出现问题呢?答案是肯定的,磁盘,网络,数据库本身的问题叠加在一起有时候会产生,slave的数据behind master的情况。也就是slave的数据落后于master端的数据。所以说MySQL集群虽然看起来很完美,但是同样的存在数据不一致的风险。那有没有什么解决方案呢?


MariaDB galera cluster的出现成功的解决了上面的提到MySQL的主从数据不同步的问题。下面简单的介绍下MariaDB galera cluster实现方法。


1

What is MariaDB?


MariaDB属于MySQL另外的一个开源的分支,操作习惯和MySQL基本一致,但是为什么会出现MariaDB这么一个分支结果呢,据说是MySQL以后有可能有闭源的风险。


2

What is MariaDB galera cluster?

MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步的系统架构,业务层面无需做读写分离工作,数据库读写压力都能按照既定的规则分发到各个节点上去。在数据方面完全兼容 MariaDB 和 MySQL。

 

3

How MariaDB galera cluster work?


工作流程为:

当客户端发出一个commit的指令,在事务被提交之前,所有对数据库的更改都会被write-set收集起来,并且将 write-set 纪录的内容发送给其他节点。


write-set 将在每个节点进行认证测试,测试结果决定着节点是否应用write-set更改数据。


如果认证测试失败,节点将丢弃 write-set ;如果认证测试成功,则事务提交。


所以这不存在MySQL集群的主备数据不一致的情况,因为对于MariaDB galera cluster来说,每个服务器的角色都是master角色,数据的应用原则是:要么全部应用,要么全部丢弃。

 

程序猿成长日记 | MariaDB Galera Cluster多主集群设置技巧

                

模块介绍:

  • werep hooks:入侵到innodb事务,捕获对数据库发生更改的事务操作

  • dlopen:保证wsrep_provider和wsrep_hooks的协同工作的函数

  • Galera Replication Plugin: 集群节点之间数据复制的插件


4

Advantages and  Disadvantages


优点:

  • 同步复制 Synchronous replication

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

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

  • 自动节点加入

  • 真正并行的复制,基于行级

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

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

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


缺点:

  • 目前的复制仅仅支持InnoDB存储引擎。

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

  • 在多主环境下LOCK/UNLOCK TABLES不支持。

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

  • 集群节点建议最少3个。(如果两个节点需要引入一个仲裁者的角色)


5

Deploy MariaDB Galera Cluster


(1) 创建yum文件:

cd /etc/yum.repos.d

vim Mariadb.repo

[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/5.5/rhel6-amd64

enabled = 1

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1

yum makecache

 

(2)安装:

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


(3)编辑机器的hosts文件:

节点介绍(由于资源有限,所以在此演示两个节点的操作,如果条件允许,建议最少使用三个节点):

192.168.248.129 bocloud2.com

192.168.248.128 bocloud1.com


(4)启动MySQL,授权集群同步的用户名和密码

MariaDB [(none)]> grant all privileges on *.* to bocloudadmin@'%' identified by 'exit';

MariaDB [(none)]> flush privileges;


(5)编辑配置文件

cp /usr/share/mysql/wsrep.cnf  /etc/my.cnf.d/

vim /etc/my.cnf.d/wsrep.conf

修改配置文件

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

模块插件所在目录,利用此模块插件实现数据的复制

wsrep_cluster_address="gcomm://"

wsrep_sst_auth=bocloudadmin:exit

数据同步的账号密码

wsrep_sst_method=rsync

wsrep_sst_method用来保证当有新的节点要加入集群时,新节点会被初始化并和集群中其他已知节点同步。



wsrep_cluster_address="gcomm://192.168.248.128,192.168.248.129"

(默认监听的端口号为4567)


(6)在启动MariaDB之前建议排除iptables和selinux的影响。(此处,直接关掉)

iptables –F

setenforce 0


6

start MariaDB galera cluster


192.168.248.128启动日志截图:

程序猿成长日记 | MariaDB Galera Cluster多主集群设置技巧


当另外一个节点192.168.248.129启动时,128日志为:

程序猿成长日记 | MariaDB Galera Cluster多主集群设置技巧
程序猿成长日记 | MariaDB Galera Cluster多主集群设置技巧


从启动日志可以清楚的看到129已经添加到集群中里面了,并且监听了4567端口,每一个MariaDB拥有自己的一个id号码,标示自己的身份,从MySQL的数据目录下面的gvwstate.dat可以看到自己的id号码以及集群中其他的服务器的id标示号码。


129启动日志:

程序猿成长日记 | MariaDB Galera Cluster多主集群设置技巧
程序猿成长日记 | MariaDB Galera Cluster多主集群设置技巧


同样可以清晰的看到129加入到集群的过程。

 

7

show variables


show status like ‘%wsrep%’

程序猿成长日记 | MariaDB Galera Cluster多主集群设置技巧


 

8

Transfer data


128操作:

程序猿成长日记 | MariaDB Galera Cluster多主集群设置技巧


129查看同步情况:

程序猿成长日记 | MariaDB Galera Cluster多主集群设置技巧


至此,我们实现了MariaDB  Galera Cluster的多主集群的设置,多主的方案在实现数据同步的过程中,也可以同时对外提供服务,降低服务器的压力。但是此方案同样存在缺点(上文已经提到)。只有适合自己的方案才是好方案,如果通过本篇文章使你以后再决定数据库集群方案时有所启发,这是在好不过的事情了。



精选

推荐



关于BoCloud博云

BoCloud 博云(苏州博纳讯动软件有限公司),为企业级客户提供针对互联网化、大数据业务应用、去 IOE 化(X86 服务器规模化应用)的底层云化架构和智能云运维系统,运用最新容器技术协助企业完成 IT 系统云架构的实施和运维, 帮助企业客户降低成本、 提升效率、简化运维、提高系统可靠性和安全性。凭借对客户业务流程和应用的深刻理解,以及先进技术产品的持续研发, BoCloud 博云以创新云技术支撑企业核心业务,构建数字化高效 IT 系统。

www.bocloud.com.cn


以上是关于程序猿成长日记 | MariaDB Galera Cluster多主集群设置技巧的主要内容,如果未能解决你的问题,请参考以下文章

程序猿成长日记 | 单页应用框架在项目中的实现方法及优缺点

mariadb galera - 节点关闭时出错 ERROR 1047 WSREP 尚未准备好节点以供应用程序使用

grails应用程序中的Mysql连接超时,在ELB上使用mariadb galera集群

MySQL 集群或 MariaDB Galera [关闭]

MariaDB Galera Cluster 之二 MariaDB Galera Cluster主要功能优缺点和对比

mariadb 10.1.13 galera 集群:错误