博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
私有云Mariadb集群搭建
阅读量:5163 次
发布时间:2019-06-13

本文共 7088 字,大约阅读时间需要 23 分钟。

 

 

     MariaDB作为Mysql的一个分支,在开源项目中已经广泛使用,例如大热的openstack,所以,为了保证服务的高可用性,

同时提高系统的负载能力,集群部署是必不可少的。

MariaDB Galera Cluster 介绍

MariaDB集群是MariaDB同步多主机集群。它仅支持XtraDB/ InnoDB存储引擎(虽然有对MyISAM实验支持 - 看wsrep_replicate_myisam系统变量)。

主要功能:

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

优势:

  • 因为是多主,所以不存在Slavelag(延迟)
  • 不存在丢失事务的情况
  • 同时具有读和写的扩展能力
  • 更小的客户端延迟
  • 节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的

 

技术:

Galera集群的复制功能基于Galeralibrary实现,为了让MySQL与Galera library通讯,特别针对MySQL开发了wsrep API。

Galera插件保证集群同步数据,保持数据的一致性,靠的就是可认证的复制

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

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

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

 

局限性:

      (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语句有问题将破坏集群。

 

 

 

 openstack中mariadb的集群是比不可少的 ,是组件当中非常重要的组件

我是本次选择mysql的版本是mariadb,集群方法是galera cluster多主集群。

其实也有很多其他方案,如pxc、mha等等,选择galera的原因是安装方便,使用与维护也方便,多主模式任何一个节点挂了都可以在另外节点查看数据,同时openstack各组件也支持配置集群方式的配置

 

系统环境:

# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) # uname -r3.10.0-327.el7.x86_64

 

hosts文件写入

我这边是搭建在rabbitmq上面进行测试的

# cat /etc/hosts192.168.56.60 rabbitmq01192.168.56.61 rabbitmq02192.168.56.62 rabbitmq03

 

安装基础库(所有节点)

yum -y install make cmake bc gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel nss_ldap openldap openldap-devel  openldap-clients openldap-servers libxslt-devel libevent-devel ntp  libtool-ltdl bison libtool vim-enhanced tar wget readline-devel libyaml-devel  patch telnet lrzsz sysstat screen parted rsync libselinux-python dmidecode ntpdate sar openssh-clients man

 

安装mariadb源(所有节点)

cat >/etc/yum.repos.d/mariadb.repo <

 

安装软件(所有节点安装)

yum install MariaDB-server MariaDB-client -y

 

node1节点配置

# cat /etc/my.cnf.d/server.cnf |grep -v '^#'|sed '/^$/d'[server][mysqld]collation-server = utf8_general_ciinit-connect = 'SET NAMES utf8'character-set-server = utf8skip-name-resolveskip-host-cacheopen_files_limit = 65535max_connections = 5000bind-address=192.168.56.60binlog_format=rowdefault_storage_engine=InnoDBinnodb_autoinc_lock_mode=2innodb_file_per_tablecharacter-set-server = utf8[galera]wsrep_on=ONwsrep_provider=/usr/lib64/galera/libgalera_smm.sowsrep_provider_options="pc.recovery=TRUE;gcache.size=300M"wsrep_cluster_address='gcomm://' wsrep_cluster_name='ck-galera'wsrep_node_address='192.168.56.60'wsrep_node_name='m-1'wsrep_sst_method=rsync[embedded][mariadb][mariadb-10.1]

 

启动

systemctl enable mariadbsystemctl start mariadb

 

初始化数据库

mysql_secure_installation#过程我就不写了

 

查询集群数量

mysql -uroot -p -e "show status where Variable_name like 'wsrep_cluster_size'"password:+--------------------+-------+| Variable_name      | Value |+--------------------+-------+| wsrep_cluster_size | 1     |+--------------------+-------+

 

查看当前集群ip

mysql -uroot -p -e "show status where Variable_name like 'wsrep_incoming_addresses'"Enter password:+--------------------------+-------------------+| Variable_name            | Value             |+--------------------------+-------------------+| wsrep_incoming_addresses | 192.168.56.60:3306 |+--------------------------+-------------------+

 

node2配置

# grep -v '^#' /etc/my.cnf.d/server.cnf |sed '/^$/d'[server][mysqld]collation-server = utf8_general_ciinit-connect = 'SET NAMES utf8'character-set-server = utf8skip-name-resolveskip-host-cacheopen_files_limit = 65535max_connections = 5000bind-address=192.168.56.61binlog_format=rowdefault_storage_engine=InnoDBinnodb_autoinc_lock_mode=2innodb_file_per_tablecharacter-set-server = utf8[galera]wsrep_on=ONwsrep_provider=/usr/lib64/galera/libgalera_smm.sowsrep_provider_options="pc.recovery=TRUE;gcache.size=300M"wsrep_cluster_address='gcomm://192.168.56.60'wsrep_cluster_name='ck-galera'wsrep_node_address='192.168.56.61'wsrep_node_name='m-2'wsrep_sst_method=rsync[embedded][mariadb][mariadb-10.1]

 

启动

systemctl enable mariadbsystemctl start mariadb

 

查看集群数量

# mysql -uroot -p -e "show status where Variable_name like 'wsrep_cluster_size'"Enter password: +--------------------+-------+| Variable_name      | Value |+--------------------+-------+| wsrep_cluster_size | 2     |+--------------------+-------+

 

查看集群ip

# mysql -uroot -p -e "show status where Variable_name like 'wsrep_incoming_addresses'"Enter password: +--------------------------+---------------------------------------+| Variable_name            | Value                                 |+--------------------------+---------------------------------------+| wsrep_incoming_addresses | 192.168.56.60:3306,192.168.56.61:3306 |+--------------------------+---------------------------------------+

可以看到node1和node2在里面了

 

node3配置

修改跟node1与node2一样

# grep -v '^#' /etc/my.cnf.d/server.cnf |sed '/^$/d'[server][mysqld]collation-server = utf8_general_ciinit-connect = 'SET NAMES utf8'character-set-server = utf8skip-name-resolveskip-host-cacheopen_files_limit = 65535max_connections = 5000bind-address=192.168.56.62binlog_format=rowdefault_storage_engine=InnoDBinnodb_autoinc_lock_mode=2innodb_file_per_tablecharacter-set-server = utf8[galera]wsrep_on=ONwsrep_provider=/usr/lib64/galera/libgalera_smm.sowsrep_provider_options="pc.recovery=TRUE;gcache.size=300M"wsrep_cluster_address='gcomm://192.168.56.60,192.168.56.61'wsrep_cluster_name='ck-galera'wsrep_node_address='192.168.56.62'wsrep_node_name='m-3'wsrep_sst_method=rsync[embedded][mariadb][mariadb-10.1]

 

启动

systemctl enable mariadbsystemctl start mariadb

 

查看集群状态

# mysql -uroot -p -e "show status where Variable_name like 'wsrep_cluster_size'"Enter password: +--------------------+-------+| Variable_name      | Value |+--------------------+-------+| wsrep_cluster_size | 3     |+--------------------+-------+

 

查看集群IP

# mysql -uroot -p -e "show status where Variable_name like 'wsrep_incoming_addresses'"Enter password: +--------------------------+----------------------------------------------------------+| Variable_name            | Value                                                    |+--------------------------+----------------------------------------------------------+| wsrep_incoming_addresses | 192.168.56.60:3306,192.168.56.62:3306,192.168.56.61:3306 |+--------------------------+----------------------------------------------------------+

 

可以看到3个节点都在里面了。

下一步大家如果想测试,可以在任意一个节点里创建数据库与表,插入数据后,在另外节点里查看是否有对应信息

 

转载于:https://www.cnblogs.com/yexiaochong/p/6169407.html

你可能感兴趣的文章
logback配置
查看>>
ECMA5中定义的对象属性特性和方法
查看>>
2、zabbix工作原理及安装配置
查看>>
2、Docker基础用法
查看>>
PostgreSQL 自增主键
查看>>
加快linux ssh登录的方法
查看>>
ORACLE表空间详解
查看>>
BZOJ5190 Usaco2018 Jan Stamp Painting(动态规划)
查看>>
保留小数点三位
查看>>
JavaEE之注解
查看>>
飞机大战项目
查看>>
JZYZOJ1383 [usaco2003feb]impster 位运算 最短路
查看>>
poj_3627Bookshelf
查看>>
java输入输入流图解
查看>>
html5改良的input元素的种类
查看>>
python人脸识别开源库face_recognition
查看>>
【神经网络与深度学习】转-caffe安装吐血总结
查看>>
【VS开发】进程线程及堆栈关系的总结
查看>>
vue三、示例
查看>>
计算机网络资料 - 转
查看>>