博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mariadb galera cluster 安装配置
阅读量:6825 次
发布时间:2019-06-26

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

hot3.png

 

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. 节点配置

准备三个节点,环境是centos6.5

db1 1.1.1.1db2 1.1.1.2db3 1.1.1.3

2. 添加MariaDB 仓库

创建/etc/yum.repos.d/mariadb.repo,内容如下

[mariadb]name = MariaDBbaseurl = http://yum.mariadb.org/10.0/centos6-amd64gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1

3. 修改防火墙模式,所有节点执行 

sudo setenforce0

4. 安装

yum install socat MariaDB-Galera-server MariaDB-client rsync galera

5.设置MariaDB安全配置

service mysql start

执行下面命令 

/usr/bin/mysql_secure_installation

本文设置数据库密码为dbpass,所有问题都是default

6.创建mariaDB galera cluster用户

我们首先创建sst_user,sst_user是在State Transfer Snapsho(SST)阶段节点之间进行验证的用户

在所有节点上执行

mysql -u root -p
mysql> DELETE FROM mysql.user WHERE user='';mysql> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'dbpass';mysql> GRANT USAGE ON *.* to sst_user@'%' IDENTIFIED BY 'dbpass';mysql> GRANT ALL PRIVILEGES on *.* to sst_user@'%';mysql> FLUSH PRIVILEGES;mysql> quit

7. 创建mariaDB galera cluster配置

所有节点执行

service mysql stop

db1中的配置文件

cat >> /etc/my.cnf.d/server.cnf << EOF
binlog_format=ROWdefault-storage-engine=innodbinnodb_autoinc_lock_mode=2innodb_locks_unsafe_for_binlog=1query_cache_size=0query_cache_type=0bind-address=0.0.0.0datadir=/var/lib/mysqlinnodb_log_file_size=100Minnodb_file_per_tableinnodb_flush_log_at_trx_commit=2wsrep_provider=/usr/lib64/galera/libgalera_smm.sowsrep_cluster_address="gcomm://1.1.1.1,1.1.1.2,1.1.1.3"wsrep_cluster_name='galera_cluster'wsrep_node_address='1.1.1.1'wsrep_node_name='db1'wsrep_sst_method=rsyncwsrep_sst_auth=sst_user:dbpassEOF

db2、db3中类似,只是相应字段进行替换

db2:

wsrep_node_address=1.1.1.2wsrep_node_name='db2'

db3:

wsrep_node_address='1.1.1.3'wsrep_node_name='db3'

8. 启动第一个集群节点

db1上执行

/etc/init.d/mysql start --wsrep-new-cluster

在db1上执行下面命令

mysql -uroot -p -e "show status like 'wsrep%'"

可以看到结果

wsrep_local_state_comment | Synced <-- cluster is syncedwsrep_incoming_addresses  | 1.1.1.1:3306 <-- node db1 is a providerwsrep_cluster_size        | 1 <-- cluster consists of 1 node wsrep_ready               | ON <-- good :)

9. 添加其他节点

db2上执行mysql 启动

service mysql start

查看状态

mysql -uroot -p -e "show status like 'wsrep%'"

 显示结果

| wsrep_local_state_comment | Synced                    || wsrep_incoming_addre sses | 1.1.1.1:3306,1.1.1.2:3306 || wsrep_cluster_size        | 2                         || wsrep_connected           | ON                        || wsrep_ready               | ON                        |

db3启动

service mysql start

显示结果

| wsrep_local_state_comment | Synced                                 || wsrep_incoming_addresses  | 1.1.1.3:3306,1.1.1.1:3306,1.1.1.2:3306 || wsrep_cluster_size        | 3                                      || wsrep_connected           | ON                                     || wsrep_ready               | ON                                     |

9. 验证复制

mysql -u root -p -e 'CREATE DATABASE clustertest;'mysql -u root -p -e 'CREATE TABLE clustertest.mycluster ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50), ipaddress VARCHAR(20), PRIMARY KEY(id));'mysql -u root -p -e 'INSERT INTO clustertest.mycluster (name, ipaddress) VALUES ("db1", "1.1.1.1");'

在各个节点上检查是否存在数据库clustertest和表mycluster

 

转载于:https://my.oschina.net/u/2277929/blog/724966

你可能感兴趣的文章
RichTextBox.MouseWheel事件控制父控件Panel的内容滚动
查看>>
php程序在浏览器哪里判断,一个判断PHP程序是否被同时在不同浏览器上执行的问题...
查看>>
php 获取5分钟前,php时间轴开发,即显示为“刚刚”、“5分钟前”、“昨天12:10...
查看>>
php ob_end_clean(),ob_end_clean(): failed to delete buffer-ThinkPHP 5.1.23
查看>>
ecshop send.php on line 71,ECSHOP调用指定DEDECMS织梦栏目文章列表
查看>>
linux 怎么运行多个target,radhat7下使用targetcli为多个启动器配置iSCSI访问控制
查看>>
c语言2015实验答案,2015年计算机二级《C语言》精选练习题及答案(15)
查看>>
c语言中word16,(word)16道嵌入式C语言面试题.doc
查看>>
c语言雷克子波,vans.c · skateboi/雷克子波与一维数组卷积的图像 - Gitee.com
查看>>
c语言ctrl c线程中动态申请的内存,【C++】 外传篇 3_动态内存申请的结果
查看>>
android textview显示不下,Android TextView不显示我的所有文本
查看>>
android手机之间tcp通信,Android 设备间通信方式
查看>>
数据库集群系统研究系列(2)-现存的数据库的解决方案的原理解析
查看>>
Racktables自定义报表
查看>>
网摘是否影响网络推广和SEO
查看>>
Outlook中轻松添加LDAP服务
查看>>
统一沟通-技巧-2-Lync 2010-照片-无显示-组织-显示-为-自己
查看>>
Exchange企业实战技巧(24)OWA常用操作技巧
查看>>
Python脚本监控线上AMQ Number of Pending Messages数量
查看>>
TX Text Control文字处理教程(11)使用文本框
查看>>