[高可用]Ubuntu搭建高可用的MariaDB Galera数据库集群
2015-07-20 09:57
916 查看
基于OpenStack的搭建过程中,所有的组件都是存储在MySQL数据库中,既然要考虑到整个OpenStack的高可用性,我们需要对每一个组件、节点进行考虑,今天就先对MySQL数据库的集群进行实验。
搭建MySQL的集群,参考了比较常用的MariaDB Galera集群方案,由于Oracle公司收购了MySQL,很多开源爱好者担心Oracle公司随时有闭源的可能,所以MariaDB是MySQL开发的一个分支,在使用过程中可以把它当成MySQL,任何命令都没有任何变化,只是名称有所改变。
对于OpenStack来说,在Icehouse版本还沿用了MySQL数据库,但是在Juno版本,已经沿用了MariaDB,可见OpenStack也随时考虑自己的完全开源的问题。
关于MariaDB Galera集群的特点:
同步复制
多个主服务器的拓扑结构
可以在任意节点上进行读写
自动控制成员
自动删除故障节点
自动加入节点
真正给予行级别的并发复制
调度客户连接
也具有下列的相关优势
没有Slave延迟
不会丢失数据
读取和写入的可扩展性
客户端延迟较小
一般情况下,大家看到的经典的MariaDB Galera集群架构图都是至少包含三个节点
为什么至少要三个节点呢?因为如果只有两个节点,一旦出现数据不统一,会发生脑裂现象,也就是系统并不知道到底以哪一个节点的结果为正确的结果,引入第三个节点,提供一个仲裁功能,确保了数据的准确性和统一性参考性。
我的实验测试环境也为三个节点,操作系统为Ubuntu 14.04
1、python1:192.168.3.108
2、Python2:192.168.3.107
3、Python3:192.168.3.133
需要注意的是:
1、服务器最好有交换分区,特别是在数据库状态转移期间,是需要缓存的
2、服务器设置的日志类型必须是文件类型,不能是CSV或者其他,而且Query cache必须禁用。
然后添加MariaDB的仓库镜像,本例使用的清华的镜像,具体配置如下
添加配置源到/etc/apt/source.list文件中
查看一下添加后的源列表信息
接下来,更新一下源列表信息
安装MariaDB数据库和rsync软件
注意:mariadb应该安装集成galera的版本,rsync是用来同步数据库所使用的工具。
2、设置Galera(三个节点都需要操作)
创建文件sudo vi /etc/mysql/conf.d/galera.cnf,该文件需要自己创建,原来不存在,然后输入以下内容
注意:需要更新自己的MySQL集群节点IP地址和集群名称
1、启动第一个节点,第一个节点启动服务,必须添加-wsrep-new-cluster选项,以创建集群
2、验证集群
陆续启动其他节点集群,再次验证
然后在节点2查看该数据库是否已经同步到节点2
然后在节点3删除这个数据库
然后在节点2查看这个数据库
在节点2查看集群节点数量
节点3创建数据库
启动节点1服务,查看新创建的数据库是否同步过来
搭建MySQL的集群,参考了比较常用的MariaDB Galera集群方案,由于Oracle公司收购了MySQL,很多开源爱好者担心Oracle公司随时有闭源的可能,所以MariaDB是MySQL开发的一个分支,在使用过程中可以把它当成MySQL,任何命令都没有任何变化,只是名称有所改变。
对于OpenStack来说,在Icehouse版本还沿用了MySQL数据库,但是在Juno版本,已经沿用了MariaDB,可见OpenStack也随时考虑自己的完全开源的问题。
关于MariaDB Galera集群的特点:
同步复制
多个主服务器的拓扑结构
可以在任意节点上进行读写
自动控制成员
自动删除故障节点
自动加入节点
真正给予行级别的并发复制
调度客户连接
也具有下列的相关优势
没有Slave延迟
不会丢失数据
读取和写入的可扩展性
客户端延迟较小
一般情况下,大家看到的经典的MariaDB Galera集群架构图都是至少包含三个节点
为什么至少要三个节点呢?因为如果只有两个节点,一旦出现数据不统一,会发生脑裂现象,也就是系统并不知道到底以哪一个节点的结果为正确的结果,引入第三个节点,提供一个仲裁功能,确保了数据的准确性和统一性参考性。
我的实验测试环境也为三个节点,操作系统为Ubuntu 14.04
1、python1:192.168.3.108
2、Python2:192.168.3.107
3、Python3:192.168.3.133
需要注意的是:
1、服务器最好有交换分区,特别是在数据库状态转移期间,是需要缓存的
2、服务器设置的日志类型必须是文件类型,不能是CSV或者其他,而且Query cache必须禁用。
执行过程
1、安装Maria DB Galera软件包(分别在三个节点执行)sudo apt-get install software-properties-common
然后添加MariaDB的仓库镜像,本例使用的清华的镜像,具体配置如下
sm@python1:~$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.jqXpEbuAw5 --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db gpg: requesting key 1BB943DB from hkp server keyserver.ubuntu.com gpg: key 1BB943DB: public key "MariaDB Package Signing Key <package-signing-key@mariadb.org>" imported gpg: Total number processed: 1 gpg: imported: 1
添加配置源到/etc/apt/source.list文件中
sudo add-apt-repository 'deb http://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.0/ubuntu trusty main'
查看一下添加后的源列表信息
sm@python1:~$ sudo cat /etc/apt/sources.list deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.0/ubuntu trusty main # deb-src http://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.0/ubuntu trusty main deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
接下来,更新一下源列表信息
sudo apt-get update
安装MariaDB数据库和rsync软件
sudo apt-get install rsync mariadb-galera-server
注意:mariadb应该安装集成galera的版本,rsync是用来同步数据库所使用的工具。
2、设置Galera(三个节点都需要操作)
创建文件sudo vi /etc/mysql/conf.d/galera.cnf,该文件需要自己创建,原来不存在,然后输入以下内容
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 query_cache_size=0 query_cache_type=0 bind-address = 0.0.0.0 wsrep_provider=/usr/lib/galera/libgalera_smm.so wsrep_cluster_name="mytest_wsrep_cluster" wsrep_cluster_address="gcomm://192.168.3.107,192.168.3.108,192.168.3.133" wsrep_sst_method=rsync
注意:需要更新自己的MySQL集群节点IP地址和集群名称
启动集群
先将所有节点的集群mySQL服务停掉sudo service mysql stop
1、启动第一个节点,第一个节点启动服务,必须添加-wsrep-new-cluster选项,以创建集群
sm@python1:~$ sudo service mysql stop * Stopping MariaDB database server mysqld [ OK ] sm@python1:~$ sudo service mysql start --wsrep-new-cluster * Starting MariaDB database server mysqld [ OK ] * Checking for corrupt, not cleanly closed and upgrade needing tables.
2、验证集群
sm@python1:~$ mysql -uroot -proot -e 'select variable_value from information_schema.global_status where variable_name="wsrep_cluster_size"' +----------------+ | variable_value | +----------------+ | 1 | +----------------+
陆续启动其他节点集群,再次验证
sm@python1:~$ mysql -uroot -proot -e 'select variable_value from information_schema.global_status where variable_name="wsrep_cluster_size"' +----------------+ | variable_value | +----------------+ | 2 | +----------------+ sm@python1:~$ mysql -uroot -proot -e 'select variable_value from information_schema.global_status where variable_name="wsrep_cluster_size"' +----------------+ | variable_value | +----------------+ | 3 | +----------------+
写入测试
我们在节点1创建一个数据库sm@python1:~$ mysql -uroot -proot -e 'show databases' +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ sm@python1:~$ sm@python1:~$ mysqladmin -uroot -proot create mytestdb sm@python1:~$ mysql -uroot -proot -e 'show databases' +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+
然后在节点2查看该数据库是否已经同步到节点2
sm@python2:~$ mysql -uroot -proot -e 'show databases' +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | mytestdb | | performance_schema | +--------------------+
然后在节点3删除这个数据库
sm@python3:~$ mysql -uroot -proot -e 'show databases' +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | mytestdb | | performance_schema | +--------------------+ sm@python3:~$ mysqladmin -uroot -proot drop mytestdb Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'mytestdb' database [y/N] y Database "mytestdb" dropped
然后在节点2查看这个数据库
sm@python2:~$ mysql -uroot -proot -e 'show databases' +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+
故障模拟
停止节点1的服务sm@python1:~$ sudo service mysql stop * Stopping MariaDB database server mysqld [ OK ]
在节点2查看集群节点数量
sm@python2:~$ mysql -uroot -proot -e 'select variable_value from information_schema.global_status where variable_name="wsrep_cluster_size"' +----------------+ | variable_value | +----------------+ | 2 | +----------------+
节点3创建数据库
sm@python3:~$ mysqladmin -uroot -proot create mytestdb2
启动节点1服务,查看新创建的数据库是否同步过来
sm@python1:~$ sudo service mysql start * Starting MariaDB database server mysqld [ OK ] * Checking for corrupt, not cleanly closed and upgrade needing tables. sm@python1:~$ mysql -uroot -proot -e 'select variable_value from information_schema.global_status where variable_name="wsrep_cluster_size"' +----------------+ | variable_value | +----------------+ | 3 | +----------------+ sm@python1:~$ mysql -uroot -proot -e 'show databases' +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | mytestdb2 | | performance_schema | +--------------------+
相关文章推荐
- 远程连接Mariadb数据库
- mariadb galera集群配置
- CentOS 7.0搭建LAMP服务器(Apache+PHP+MariaDB)
- 【原创】CentOS 7.0下安装配置mariaDB
- MySQL/MariaDB/Percona数据库升级脚本
- centos7.0安装mariadb10.0.20
- mariadb 10.0.20安装 并安装 tokudb的引擎
- 基于mariadb的日志服务器及用loganalyzer实现日志的管理分析 推荐
- MariaDB登陆
- MariaDB快速选择最适合您的需要的存储引擎
- MariaDB学习笔记(2)----检索数据
- MariaDB学习笔记(3)--排序检索数据
- FTP服务器及FTP基于MariaDB实现访问控制
- MySQLdb安装|Centos 7 下关联 python 和 MariaDB or MySQL
- centos 下安装MariaDB 及其基本操作指令
- mysql/mariadb主从复制
- 分离式LAMP平台构建
- 15 个有用的 MySQL/MariaDB 性能调整和优化技巧(转载的一篇好文)
- MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)
- MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)