搭建基于Galera的MySql集群
CentOS7环境下部署Mariadb-Galera集群
##mariadb-galera官网包:https://mariadb.com/kb/en/mariadb/yum/
##mariadb-server官网包:http://yum.mariadb.org/10.1/centos7-amd64/rpms/
##mysql-galera官网包:http://releases.galeracluster.com/centos/6/x86_64 #这里的centos/6/x86_64需要根据你的系统自行修改
##galera源码包:https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/
##博客:http://blog.sina.com.cn/s/blog_8ea8e9d50102ws4x.html
说明:mariadb-10.1.x版本,galera wsrep(Write Set replication)API库已经内嵌到版本中,
而10.0.x的版本是分开的两个包mariadb-galera(mariadb的galera版本),galera(提供wsrep API的库libgalera_smm.so)。
galera官方安装说明(标准文档,首选的参考方案):https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/
主题开始:
现在线上项目的MYSQL数据库集群很多采用Galera Cluster的技术来搭建,以前很多互联网公司采用MySql官方提供的主从集群,而Galera的集群解决方案则没有主从限制,每个单独的点都可以使用,还是比较独特的,就自己搭了三台虚拟机实现了下。
Galera Cluster for MySQL是一套基于同步复制的多主MySQL集群解决方案,使用简单,没有单点故障,可用性高,能很好保证业务不断增长时我们数据的安全和随时的扩展。
galera群集的主要特点:
多主机数据同步复制
多主服务器的拓扑结构
每个node节点都是主服务器,每个node都有全部数据.
每个节点都可以提供写和读
数据复制只支持InnoDB引擎.
所有node节点同步数据通过wsrep接口
每个节点下线后,自动从集群中下线
自动剔除故障节点
自动加入新节点
真正行级别的并发复制
客户端连接跟操作单台MySQL数据库的体验一致
Galera本质是一个wsrep提供者(provider),运行依赖于wsrep的API接口。Wsrep API定义了一系列应用回调和复制调用库,来实现事务数据库同步写集(writeset)复制以及相似应用。目的在于从应用细节上实现抽象的,隔离的复制。虽然这个接口的主要目标是基于认证的多主复制,但同样适用于异步和同步的主从复制。
项目的系统环境:
CentOS6 64位
MariaDB版本:
版本一:MariaDB-Galera-server10.0.14
安装方法: yum install MariaDB-Galera-server MariaDB-client galera mlocate createrepo -y
版本二:MariaDB-Galera-server10.1或10.3
yum install MariaDB-server MariaDB-client galera mlocate createrepo -y
galera集群配置思路:
1、在每台主机上停止运行mysqld或mariadb服务。并设置服务为开机不启动。
2、在每台主机上安装galera软件,并启动mysql服务(此处是galera的服务)。
3、在每台主机上创建用于galera同步数据的用户账号,停止mysql服务(此处是galera的服务)。
4、设置每台galera主机的配置文件/etc/my.cnf.d/server.cnf,保证设置正确。
5、初始化启动第1台galera主机的集群环境:
service mysql stop
service mysql start --wsrep-new-cluster
mysql -uroot -p -e "show status like 'wsrep_%';"
6、启动其他galera主机,验证集群状态:mysql -uroot -p -e "show status like 'wsrep_%';"
项目的准备工作
最少三台机器,当然两台也可以,但是两台的话需要额外配置(见官方说明),一般应该也不会少于三台吧。
系统 ip角色
CentOS 6.5192.168.100.71Node1
CentOS 6.5192.168.100.72Node2
CentOS 6.5192.168.100.72Node3
配置防火墙规则,参考官方的说明,我这里偷懒就直接关闭了防火墙。
service firewalld stop
chkconfig firewalld off
setenforce 0
getenforce
sed -i '/^SELINUX=/s/enforcing/permissive/' /etc/selinux/config
修改每台机器/etc/sysconfig/selinux配置,将SELINUX=enforcing改为SELINUX=disabled,这一步很重要,不然后面一切都白费。
修改系每台主机的hosts文件,实现本地域名解析(选做,不做也不影响):
vi /etc/hosts 添加如下内容
192.168.100.71node1
192.168.100.72node2
192.168.100.72node3
后期用root登录galera集群查状态:
mysql -uroot -p
show status like 'wsrep%';(首选)
SHOW STATUS LIKE 'wsrep_cluster_size';
show global status like 'ws%';
SHOW VARIABLES LIKE 'wsrep_cluster_address'; 查集群中的主机地址
show status like 'wsrep_ready'; 查wsrep状态
下载安装
###galera-10.0.31官方rpm包下载(以下实验首选):
centos6版的galera-10.0.31软件(首选):http://yum.mariadb.org/10.0.31/centos6-amd64/rpms/
centos7版的galera-10.0.31软件(首选):http://yum.mariadb.org/10.0.31/centos7-amd64/rpms/
###galera-10.3官方rpm包下载(已测试OK):
centos6版的galera-10.3软件http://yum.mariadb.org/10.3/centos6-amd64/rpms/
使用yum安装galera-10.0.31版:
添加galera的资源仓库,在/etc/yum.repos.d/目录下新增galera.repo文件,并编辑文件添加如下内容:
金的本地galera源(很快,首选),网络yum源很慢,建议先到官网下载rpm软件包,再用配置本地yum源安装。
vi /etc/yum.repos.d/galera.repo 配置文件如下:
[galera]
name=galera
baseurl=file:///root/7galera
#baseurl=http://yum.mariadb.org/10.0.31/centos6-amd64/
enabled=1
gpgcheck=0
金安装方法:
2. 开始安装(金已测OK)
yum install MariaDB-Galera-server MariaDB-client galera mlocate createrepo -y
rpm -q MariaDB-Galera-server MariaDB-client galera
安装完后,查看ls /etc/my.cnf.d/下的文件是否为如下:
mariadb-client.conf
server.conf
tokudb.conf
查galera的动态链接库文件路径:
updatedb
locate libgalera_smm.so
补充说明:
使用yum安装galera-10.3版(测试OK):yum install MariaDB-server MariaDB-client galera mlocate createrepo -y (配置方法同下)
3. 在三台主机上初始化mariadb,并且创建集群账户。(金测OK)
启动mysql服务:
service mysql start
(不用做)新版本的mysql必须使用初始密码登录了,无法本地匿名或admin方式初始化密码了,初始化密码一般存放在errlog里可以通过
ps -ef | grep mysql
来查询errlog位置,然后再通过
cat /var/log/mysqld.log | grep "temporary password"
来查看你的初始密码,第一次登录后会强制你修改密码的。
##(选做)ALTER USER 'root'@'localhost' IDENTIFIED BY '1qaz!QAZ'; #新版本对密码强度有要求了,不然会报错
(必做)#创建新用户
说明:以下是在本地用root登录到mariadb服务器,创建一个新管理员账号,用于galera数据同步身份认证。
mysql -uroot
grant all PRIVILEGES on *.* to myroot@'%' identified by 'reppass';
FLUSH PRIVILEGES;
select user,host,password from mysql.user;
exit
配置
编辑vi /etc/my.cnf.d/server.cnf 在[galera]内部增加如下内容(可以直接复制以下代码):
wsrep_on=ON
binlog_format=ROW
bind-address=0.0.0.0
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
wsrep_cluster_name=MyCLuster
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://"
##wsrep_cluster_address="gcomm://192.168.100.71,192.168.100.72,192.168.100.73"
wsrep_node_name=node1
wsrep_node_address=192.168.100.71
wsrep_sst_method=rsync
wsrep_sst_auth=myroot:reppass
查看cat /etc/my.cnf.d/server.cnf 配置文件功能解释:
wsrep_on=ON //启用wsrep功能,必选
binlog_format=ROW //二进制日志文件格式为ROW,还可以是mix
bind-address=0.0.0.0 //监听端口
default_storage_engine=innodb //默认存储引擎为innodb
innodb_autoinc_lock_mode=2 //innodb锁的模式
innodb_flush_log_at_trx_commit=0 //每隔0秒同步刷新数据
wsrep_cluster_name=MyCLuster //wsrep集群名称
wsrep_provider=/usr/lib64/galera/libgalera_smm.so //wsrep集群服务的库文件
wsrep_cluster_address="gcomm://" //用于第一台galera集群主机
##wsrep_cluster_address="gcomm://192.168.100.71,192.168.100.72,192.168.100.73" //用于其他galera集群主机
wsrep_node_name=node1 //当前集群主机名
wsrep_node_address=192.168.100.71 //当前集群主机ip地址
wsrep_sst_method=rsync //wsrep_sst方法为同步
wsrep_sst_auth=myroot:reppass //同步的账号myroot,密码reppass,需要用grant创建此账号。
说明:如果不想使用用户名和密码验证,然后再进行数据同步复制,那么可以注释掉wsrep_sst_aut这行代码,但是这样不安全。
启动第一台机器(192.168.100.71):
service mysql stop
service mysql restart (首选此方法,启动第1台galera集群服务,其他galera主机也用此方法)
service mysql start --wsrep-new-cluster (备选方法,很多贴子说在第一台galera集群主机必须用此方法运行,其实并不是)
其中--wsrep-new-cluster只要在初始化集群的时候才能用,后面服务重启都不要用,这时候可以查看集群状态了:
mysql -uroot -p -e "show status like 'wsrep_%';"
如果一切正常的话可以看到下面信息,说明当前节点已经启动成功。(金测OK)
| wsrep_incoming_addresses | 192.168.100.71:3306 |
| wsrep_cluster_size | 3 |
---------------
启动其他节点:
第2台galera主机(192.168.100.72):
第1步:配置mariadb-galera的yum源,安装软件。
yum install MariaDB-Galera-server MariaDB-client galera mlocate createrepo -y
rpm -q MariaDB-Galera-server MariaDB-client galera
安装完后,查看ls /etc/my.cnf.d/下的文件是否为如下:
mariadb-client.conf
server.conf
tokudb.conf
查galera的动态链接库文件路径:
updatedb
locate libgalera_smm.so
第2步:启动mysql服务,创建用于galera同步的用户账号。
service mysql start
mysql -uroot
grant all PRIVILEGES on *.* to myroot@'%' identified by 'reppass';
FLUSH PRIVILEGES;
select user,host,password from mysql.user;
exit
第3步:修改/etc/my.cnf.d/server.cnf 在[galera]内部增加如下内容:
wsrep_on=ON
binlog_format=ROW
bind-address=0.0.0.0
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
wsrep_cluster_name=MyCLuster
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
##wsrep_cluster_address="gcomm://" //用于第一台galera集群主机
wsrep_cluster_address="gcomm://192.168.100.71,192.168.100.72,192.168.100.73" //用于其他galera集群主机
wsrep_node_name=node2 //当前集群主机名
wsrep_node_address=192.168.100.72 //当前集群主机ip地址
wsrep_sst_method=rsync
wsrep_sst_auth=myroot:reppass //同步的账号myroot,密码reppass
第3步:启动第2台galera主机的服务
service mysql start
再次查看集群信息:mysql -uroot -p -e "show status like 'wsrep_%';"
| wsrep_incoming_addresses | 192.168.100.71:3306,192.168.100.72:3306 |
| wsrep_cluster_size | 2 |
至此,整个集群中的2台galera主机就搭建好了,测试一下,在任意一个节点创建一个库:
mysql -uroot -p -e "create database pfma_test"
在本机和其他节点查看:
mysql> show databases;
附加任务:在galera集群中再添加192.168.100.73这台主机,直接参照第2台galera主机(192.168.100.72)的安装和配置方法。
再次查看集群信息:mysql -uroot -p -e "show status like 'wsrep_%';"
| wsrep_incoming_addresses | 192.168.100.71:3306,192.168.100.72:3306,192.168.100.73:3306 |
| wsrep_cluster_size | 3 |
至此,整个集群就搭建好了,测试一下,在任意一个节点创建一个库:
========
galera集群部署的方法二:
网上的galera的yum源(很慢,不采用)
[galera]
name = Galera
baseurl = http://releases.galeracluster.com/centos/6/x86_64#这里的centos/6/x86_64需要根据你的系统自行修改
gpgkey = http://releases.galeracluster.com/GPG-KEY-galeracluster.com
gpgcheck = 1
之后
yum update
yum install galera-3 mysql-wsrep-5.7
手动下载安装
因为墙的原因,我们经常会发现无法直接用yum安装,可以挂代理后手动安装,根据你的系统打开对应网址,譬如我的64位centos6.5就打开http://releases.galeracluster.com/centos/6/x86_64/,下载如下几个文件:
mysql-wsrep-libs-compat-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm
mysql-wsrep-common-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm
mysql-wsrep-libs-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm
mysql-wsrep-shared-5.6-5.6.35-25.18.20170106.1f9ae89.el6.x86_64.rpm
galera-3-25.3.20-2.el6.x86_64.rpm
mysql-wsrep-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm
mysql-wsrep-client-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm
mysql-wsrep-server-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm
安装前需要检查是否已经有mysql存在,以免后续产生冲突:
rpm -qa|grep -i mysql
rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64 #卸载后面会冲突的包
如果存在则全部卸载后就可以安装了,其中galera-3依赖boost-program-options,需要提前安装好:
yum install boost-program-options
rpm -ivh mysql-wsrep-common-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm
rpm -ivh mysql-wsrep-libs-compat-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm
rpm -ivh mysql-wsrep-libs-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm
rpm -ivh mysql-wsrep-shared-5.6-5.6.35-25.18.20170106.1f9ae89.el6.x86_64.rpm
rpm -ivh galera-3-25.3.20-2.el6.x86_64.rpm
rpm -ivh mysql-wsrep-client-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm
rpm -ivh mysql-wsrep-server-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm
rpm -ivh mysql-wsrep-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm
启动mysql
service mysqld start
新版本的mysql必须使用初始密码登录了,无法本地匿名或admin方式初始化密码了,初始化密码一般存放在errlog里可以通过
ps -ef | grep mysql
来查询errlog位置,然后再通过
cat /var/log/mysqld.log | grep "temporary password"
来查看你的初始密码,第一次登录后会强制你修改密码的。
ALTER USER 'root'@'localhost' IDENTIFIED BY '1qaz!QAZ';#新版本对密码强度有要求了,不然会报错
grant all PRIVILEGES on *.* to myroot@'%' identified by 'reppass';#创建新用户
FLUSH PRIVILEGES;
配置
编辑/etc/my.cnf在[mysqld]内部增加如下内容:
binlog_format=ROW
bind-address=0.0.0.0
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
wsrep_cluster_name=MyCLuster#你的cluster名,每台机器上的要相同
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so#不同版本这个路径可能不同,需要自行确定
wsrep_cluster_address="gcomm://"#第一台机器需要这样配置
#wsrep_cluster_address="gcomm://192.168.80.136,192.168.80.137,192.168.80.138"#其他机器需要配置同步源路径
wsrep_node_name=node1#当前机器的节点名
wsrep_node_address=192.168.80.136#当前机器ip
wsrep_sst_method=rsync#同步方式
wsrep_sst_auth=myroot:reppass
启动第一台机器:
service mysqld start --wsrep-new-cluster
其中--wsrep-new-cluster只要在初始化集群的时候才能用,后面服务重启都不要用,这时候可以查看集群状态了:
mysql -uroot -p -e "show status like 'wsrep_%'"
如果一切正常的话可以看到下面信息,说明当前节点已经启动成功。
| wsrep_incoming_addresses | 192.168.80.136:3306 |
| wsrep_cluster_size | 3 |
启动其他节点
service mysqld start
再次查看集群信息:
mysql -uroot -p -e "show status like 'wsrep_%'"
| wsrep_incoming_addresses | 192.168.80.139:3306,192.168.80.138:3306,192.168.80.137:3306 |
| wsrep_cluster_size | 3 |
至此,整个集群就搭建好了,测试一下,在任意一个节点创建一个库:
mysql -uroot -p -e "create database pfma_test"
在其他节点查看:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| pfma_test |
| sys |
+--------------------+
5 rows in set (0.07 sec)
可以发现确实有正常地同步了其他节点的操作。
======================================
MySQL高可用架构之Galera Cluster
[日期:2017-04-06] 来源:Linux社区
MySQL高可用架构之Galera Cluster
1、实验准备及拓扑
至少需要三个节点
node1 192.168.150.137
node2 192.168.150.138
node3 192.168.150.139
mariadb版本为mariadb的支持galera cluster的分支版本
MariaDB-Galera-server-5.5.46
实验前准备:
1、HA环境首要条件:时间同步
三个节点添加对时脚本
[root@localhost ~]# crontab -l
*/5 * * * * /usr/sbin/ntpdate 1.cn.pool.ntp.org
2、三个几点均配置MariaDB-Galera的本地yum仓库,我尝试使用mariadb官方提供的yum仓库,天朝的网会气死你
[root@localhost ~]# cat /etc/yum.repos.d/galera.repo
[galera]
name=galera
baseurl=file:///root/galera_cluster
gpgcheck=0
enable=1
3、yum安装,仅需安装MariaDB-Galera-server,其余的均会依赖安装
yum -y install Mariadb-Galera-server
2、配置
1、查看galera所需调用的库的位置
rpm -ql galera | grep -i smm.so
/usr/lib64/galera/libgalera_smm.so
2、修改配置文件,三节点同步修改
[root@localhost yum.repos.d]# cat /etc/my.cnf.d/server.cnf
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
#
# * Galera-related settings
#
[galera]
# Mandatory settings
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.150.137,192.168.150.138,192.168.150.139"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_cluster_name='mycluster'
#
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0
# this is only for embedded server
[embedded]
# This group is only read by MariaDB-5.5 servers.
# If you use the same .cnf file for MariaDB of different versions,
# use this group for options that older servers don't understand
[mysqld-5.5]
# These two groups are only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]
[mariadb-5.5]
3、节点1进行mysql及cluster开启
[root@localhost ~]# /etc/rc.d/init.d/mysql start --wsrep-new-cluster
Starting MySQL.... SUCCESS!
4、其它两个节点进行正常的mysql开启
[root@localhost ~]# service mysql start
Starting MySQL....SST in progress, setting sleep higher. SUCCESS!
此时已配置完成。。。。。。
3、功能验证
1、节点1创建数据库,节点2 3均可正常查看
节点1:[root@localhost ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 5.5.46-MariaDB-wsrep MariaDB Server, wsrep_25.12.r4f81026
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE mydb;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| performance_schema |
| test |
+--------------------+
节点2 3:
[root@localhost ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 5.5.46-MariaDB-wsrep MariaDB Server, wsrep_25.12.r4f81026
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.01 sec)
2、节点2数据库中创建表,节点1 2均可正常查看
节点2:
MariaDB [(none)]> use mydb;
Database changed
MariaDB [mydb]> CREATE TABLE tb1 (id int,name char(10));
Query OK, 0 rows affected (0.01 sec)
节点1 3:
MariaDB [(none)]> use mydb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mydb]> SHOW TABLES
-> ;
+----------------+
| Tables_in_mydb |
+----------------+
| tb1 |
+----------------+
1 row in set (0.00 sec)
MariaDB [mydb]> DESC tb1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(10) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.02 sec)
3、自增栏位的测试,每个几点会跳着进行自增,同时插入时例如1节点1 4 7;2节点2 5 8;三节点3 6 9。
节点1:
MariaDB [mydb]> CREATE TABLE tb2(id int UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,name char(30)
uery OK, 0 rows affected (0.01 sec)
MariaDB [mydb]> INSERT INTO tb2 (name) VALUES ('void'),('yao');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
节点2:
MariaDB [mydb]> select * from tb2;
+----+------+
| id | name |
+----+------+
| 1 | void |
| 4 | yao |
+----+------+
2 rows in set (0.01 sec)
MariaDB [mydb]> INSERT INTO tb2 (name) VALUES ('amy'),('apple');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
MariaDB [mydb]> select * from tb2;
+----+-------+
| id | name |
+----+-------+
| 1 | void |
| 4 | yao |
| 5 | amy |
| 8 | apple |
+----+-------+
4 rows in set (0.00 sec)
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142563.htm
本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1953479,如需转载请自行联系原作者