私有云Mariadb集群搭建
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. (Core)
# uname -r
3.10.-.el7.x86_64
hosts文件写入
我这边是搭建在rabbitmq上面进行测试的
# cat /etc/hosts
192.168.56.60 rabbitmq01
192.168.56.61 rabbitmq02
192.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 <<EOF
# MariaDB 10.1 CentOS repository list - created -- : UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=
EOF
安装软件(所有节点安装)
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_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
skip-name-resolve
skip-host-cache
open_files_limit =
max_connections =
bind-address=192.168.56.60
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=
innodb_file_per_table
character-set-server = utf8
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_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 mariadb
systemctl 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 | |
+--------------------+-------+
查看当前集群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: |
+--------------------------+-------------------+
node2配置
# grep -v '^#' /etc/my.cnf.d/server.cnf |sed '/^$/d'
[server]
[mysqld]
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
skip-name-resolve
skip-host-cache
open_files_limit =
max_connections =
bind-address=192.168.56.61
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=
innodb_file_per_table
character-set-server = utf8
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_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 mariadb
systemctl start mariadb
查看集群数量
# mysql -uroot -p -e "show status where Variable_name like 'wsrep_cluster_size'"
Enter password:
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | |
+--------------------+-------+
查看集群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:,192.168.56.61: |
+--------------------------+---------------------------------------+
可以看到node1和node2在里面了
node3配置
修改跟node1与node2一样
# grep -v '^#' /etc/my.cnf.d/server.cnf |sed '/^$/d'
[server]
[mysqld]
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
skip-name-resolve
skip-host-cache
open_files_limit =
max_connections =
bind-address=192.168.56.62
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=
innodb_file_per_table
character-set-server = utf8
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_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 mariadb
systemctl start mariadb
查看集群状态
# mysql -uroot -p -e "show status where Variable_name like 'wsrep_cluster_size'"
Enter password:
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | |
+--------------------+-------+
查看集群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:,192.168.56.62:,192.168.56.61: |
+--------------------------+----------------------------------------------------------+
可以看到3个节点都在里面了。
下一步大家如果想测试,可以在任意一个节点里创建数据库与表,插入数据后,在另外节点里查看是否有对应信息
私有云Mariadb集群搭建的更多相关文章
- 负载均衡的mariadb集群搭建
集群介绍: Galera是一个MySQL(也支持MariaDB,Percona)的同步多主集群软件,目前只支持InnoDB引擎. 主要功能: 同步复制 真正的multi-master,即所有节点可以同 ...
- 私有云Rabbitmq 集群部署
默认openstack使用rabbitmq做信息队列,如果想要是云高可用,那么需要对每个涉及的组件都进行高可用配置,本文介绍如何使用rabbitmq 做高可用 高可用方法 通过 Erlang 的分布式 ...
- Linux下MySQL/MariaDB Galera集群搭建过程【转】
MariaDB介绍 MariaDB是开源社区维护的一个MySQL分支,由MySQL的创始人Michael Widenius主导开发,采用GPL授权许可证. MariaDB的目的是完全兼容MySQL,包 ...
- Kubernetes集群搭建之企业级环境中基于Harbor搭建自己的私有仓库
搭建背景 企业环境中使用Docker环境,一般出于安全考虑,业务使用的镜像一般不会从第三方公共仓库下载.那么就要引出今天的主题 企业级环境中基于Harbor搭建自己的安全认证仓库 介绍 名称:Harb ...
- kubernetes集群搭建(2):docker私有仓库
kubernetes集群搭建(1):环境准备 中各节点已经安装好了docker,请确认docker已启动并正常运行 1.通过命令启动私库 docker run -d -p 5000:5000 --pr ...
- galera mariadb集群恢复策略
1 galera mariadb首先MariaDB是一个数据库,可以看成是MySQL的一个分支,由于MySQL被SUN收购,所以MySQL面临着闭源的风险,当时MySQL之父Widenius并没有加入 ...
- MHA 高可用集群搭建(二)
MHA 高可用集群搭建安装scp远程控制http://www.cnblogs.com/kevingrace/p/5662839.html yum install openssh-clients mys ...
- kubernetes(K8S)快速安装与配置集群搭建图文教程
kubernetes(K8S)快速安装与配置集群搭建图文教程 作者: admin 分类: K8S 发布时间: 2018-09-16 12:20 Kubernetes是什么? 首先,它是一个全新的基于容 ...
- rancher1.6高可用集群搭建
rancher高可用集群搭建 一.搭建环境 1.安装系统 下载centos最新版, http://mirrors.sohu.com/centos/7/isos/x86_64/CentOS-7-x86_ ...
随机推荐
- Redis:在windows环境安装Redis
Redis:在windows环境安装Redis 第一步: 下载windows版本的Redis:https://github.com/MSOpenTech/Redis. 第二步: 在命令行执行:D:\r ...
- FileTable初体验
FileTable初体验 阅读导航 启用FILESTREAM设置 更改FILESTRAM设置 启用数据库非事务性访问级别 FileTable 在我接触FileTable之前,存储文件都是存储文件的链接 ...
- hdu 1809 求SG函数
A New Tetris Game(2) Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- Facebook开源的基于SQL的操作系统检测和监控框架:osquery daemon详解
osqueryd osqueryd(osquery daemon)是可以定期执行SQL查询和记录系统状态改变的驻守程序. osqueryd能够根据配置手机归档查询结果,并产生日志. 同时也可以使用系统 ...
- 1.JSP入门
一.JSP基础 1.JSP概述 JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据. JSP = html + Jsp脚 ...
- jvm内存增长问题排查
jvm内存增长问题排查 排查个jvm 内存占用持续增加的问题,纪录一下,引以为戒. 运维发现应用jvm内存占用在发布后回落,然后持续增高,,dump后分析一下: 占内存的大部分是这种名字相似的bean ...
- knn分类算法学习
K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的 ...
- mongodb tip-2
1.or 查询的格式: var condition = {$or:[{field:1},{field:2}]} 2.字符串存储日期也可以用$gt $gte $lt $lte 直接比较 var cond ...
- php 内置函数 ( 随手能写出100个才算高级工程师 )
string 类型 去掉左右空格, trim()字符串的长度 strlen() float类型数组类型 count() 数组个数 资源类型 fopen() 大写转小写 strtolower()小写转大 ...
- nio简介
上一篇 Java I/O演进与Linux网络I/O模型 一.传统BIO java传统bio编程概念: http://www.cnblogs.com/carl10086/p/6034563.html# ...