文档章节

mysql 数据库集群搭建:(三)CentOS 7.2 MariaDB 10.2 galera 集群安装

b
 binux
发布于 2017/07/20 18:17
字数 2309
阅读 346
收藏 0

《mysql 数据库集群搭建:(一)VirtualBox中多台CentOS虚拟机间和windows主机间互通以及访问互联网设置》
《mysql 数据库集群搭建:(二)3台CentOS-7安装Percona-XtraDB-Cluster-57集群》
《mysql 数据库集群搭建:(三)CentOS 7.2 MariaDB 10.2 galera 集群安装》
《mysql 数据库集群搭建:(四)pacemaker管理三台maxscale集群,搭建mariadb读写分离中间层集群》

本文中的集群都是在VirtualBox中安装的,所以首先需要保证VirtualBox创建的几台服务器能够互通并且在同一网段中,每台虚机能够通过主机互联网安装软件,可以参考我之前些的一片文章《VirtualBox中多台CentOS虚拟机间和windows主机间互通以及访问互联网设置》
每台服务器安装CentOS 7.2 Minimal 版本,安装后使用yum update更新一下最新的系统内核和相关配置参数。MariaDB galera集群建议最少3台服务器,2台无法保证数据完整性。
几台虚拟机ip设置如下:

节点名称   IP地址
cluster1    192.168.56.21
cluster2    192.168.56.22
cluster3    192.168.56.23

1.删除CentOS自带的老版本mariadb lib文件
1.1查找安装的mariadb

sudo rpm -qa | grep mariadb

1.2删除查找到的lib文件
 

sudo rpm -e --nodeps (这里是查找到的mariadb lib 文件)


2.因为安装mariadb galera 需要打开 3306、4444、4567、4568四个端口,而且要降低安全审核级别。
2.1 使用以下命令设置防火墙开放这几个端口:
(3306是MariaDB/mysql的服务端口,这个都不开那就不用跑MariaDB/MySQL服务了,需要开TCP端口;
 4567是Galera做数据复制的通讯和数据传输端口,需要在防火墙放开TCP和UDP;
 4568是Galera做增量数据传输使用的端口(Incremental State Transfer, IST),需要防火墙放开TCP;
 4444是Galera做快照状态传输使用的端口(State Snapshot Transfer, SST),需要防火墙放开TCP。)

sudo firewall-cmd --permanent --zone=public --add-port=4567/tcp
sudo firewall-cmd --permanent --zone=public --add-port=4567/udp
(其它几个端口效仿以上命令完成,不需要开udp端口的只设置tcp就可以了)
sudo firewall-cmd --reload (重新加载防火墙使修改生效)

2.2 在CentOS的SELinux配置文件中降低SELinux的安全审核级别,让mysqld可以正常运行,否则SELinux会限制集群数据传输
(setenforce 0 命令只能设置运行时的安全级别,想要完全设置安全级别,需要在SELinux的配置文件中进行配置更改)
2.2.1 使用vi 打开/etc/selinux/config配置文件,设置SELINUX=permissive  或者键入命令 semanage permissive -a mysqld_t
 

sudo vi /etc/selinux/config



2.2.2 使用reboot命令重启服务器使SELinux安全级别更改生效

3.前往官网获得适合操作系统的最新下载地址并配置yum,官网地址 https://downloads.mariadb.org/
3.1选择最新稳定版本 MariaDB Galera Cluster 10.2 Series 选择 "The MariaDB repository configuration tool is here."中的here点击进入

3.2选择"CentOS"->"CentOS7"->"1.2[stable]"

3.3在系统/etc/yum.repos.d/文件夹下新建 MariaDB.repo文件

sudo vi MariaDB.repo

写入以下源信息

[mariadb]
name = MariaDB
# baseurl = http://yum.mariadb.org/10.2/centos7-amd64 (原有下载地址太慢,需要换成国内的镜像地址)
# gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB(原有下载地址太慢,需要换成国内的镜像地址)
baseurl = http://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64/ (如果版本有变,请根据新的版本修改链接地址)
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1


3.4因为从10.1开始galera默认在server中包含,因此安装server和client就可以了

sudo yum install -y MariaDB-server MariaDB-client

4.mariadb默认使用rsync进行节点间数据同步,单rsync同步的时候会锁住节点,没有Percona提供的XtraBackup顺畅,因此这里使用推荐的XtraBackup,需要下载安装
4.1安装Percona XtraBackup 的yum安装源

sudo yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

4.2在yum中查找最新版本进行安装

yum list | grep percona-xtrabackup

4.3启动安装

sudo yum install -y percona-xtrabackup-24

5.安装socat,否则xtrabackup备份同步方式在单节点故障后重启后在.err错误日志中会报类似以下错误

----------------------------------------------------------------------------------

WSREP_SST: [ERROR] socat not found in path: /usr/sbin:/sbin:/usr/local/Percona-XtraDB-Cluster-5.5.34-25.9.607.Linux.i686//bin:/usr/local/xtrabackup/bin:/usr/local/xtrabackup/bin:/usr/local/jdk/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:....

-------------------------------------------------------------------------------------

sudo yum install -y socat

6.本文中选择IP为192.168.56.21的虚机作为演示节点进行配置,mariadb安装后默认服务是启动的
6.1 修改root用户默认密码

mysqladmin -u root password "root的登录密码"  或者 mysql_secure_installation (这种方式初学者可能会选错,所以建议用前一种方式)


6.2 本文使用sst_user用户作为集群的数据同步用户,授予所有权限
6.2.1 进入mysql管理命令

mysql -uroot -p
(输入密码)

MariaDB> CREATE USER 'sst_user'@'localhost' IDENTIFIED BY 'sst_user';
MariaDB> GRANT ALL PRIVILEGES ON *.* TO 'sst_user'@'localhost' IDENTIFIED BY 'sst_user'; (如果想让授权的用户不限制IP并且远程访问,在语句最后加WITH GRANT OPTION)
MariaDB> FLUSH PRIVILEGES;

7.关闭mysql服务,为后续配置做准备

systemctl stop mariadb

8.修改配置文件 /etc/my.cnf.d/server.cnf (mariadb的配置文件很多,我安装之后有/etc/my.cnf /etc/my.cnf.d/mysql-clients.cnf /etc/my.cnf.d/server.cnf,其中/etc/my.cnf文件中包含了后两者,/etc/my.cnf.d/mysql-client.cnf中存放客户端连接时的配置信息,例如[client]和[mysql],/etc/my.cnf.d/server.cnf中存放服务器的配置信息,一般只将信息添加到server.cnf就可以了,没必要分那么细,查找配置文件所在位置以及配置信息的命令 mysqld --help --verbose | more,按空格键下翻)

[client]
port        = 3306
socket        = /var/lib/mysql/mysql.sock
default-character-set = utf8

[mysqld]
port        = 3306
socket        = /var/lib/mysql/mysql.sock

datadir      = /var/lib/mysql/ 
pid_file=mariadb.pid
log_error=mariadb.err
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
thread_cache_size = 8
query_cache_size= 16M
character-set-server = utf8

innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql
innodb_buffer_pool_size = 666M
innodb_log_file_size = 166M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
innodb_doublewrite=1
innodb_flush_log_at_trx_commit=0
bind-address=0.0.0.0

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
default-character-set = utf8

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

[galera]
wsrep_on=ON #(决定是否启动节点间同步)
wsrep_provider=/usr/lib64/galera/libgalera_smm.so (galera 的同步c++库位置)
wsrep_cluster_name="wsrep_cluster" #(整个集群的名称,所有节点一致)
wsrep_cluster_address="gcomm://192.168.56.21,192.168.56.22,192.168.56.23" #(集群中所有节点的地址列表,在Percona中第一个启动的节点必须是空值才能启动,MariaDB已无此限制)
wsrep_node_name=cluster1 #(节点名称,其它两个节点需要修改)
wsrep_node_address=192.168.56.21 #(节点地址,其它两个节点需要修改)
wsrep_slave_threads=1
wsrep_certify_nonPK=1
wsrep_max_ws_rows=131072
wsrep_max_ws_size=1073741824
wsrep_debug=0
wsrep_convert_LOCK_to_trx=0
wsrep_retry_autocommit=1
wsrep_auto_increment_control=1
wsrep_drupal_282555_workaround=0
wsrep_causal_reads=0
wsrep_sst_method=xtrabackup-v2 #(使用安装的xtrabackup进行节点间备份同步)
wsrep_sst_auth=sst_user:pswd

xtrabackup方式的备份同步在单节点故障后重启会查找配置文件中的这个文件夹,否则会报类似以下错误

-----------------------------------------------------------------------------------

.err日志文件错误如下:

rm: cannot remove ‘/var/lib/mysql//innobackup.prepare.log’: No such file or directory
rm: cannot remove ‘/var/lib/mysql//innobackup.move.log’: No such file or directory
WSREP_SST: [INFO] Moving the backup to /var/lib/mysql/ (20170725 11:10:34.925)
WSREP_SST: [INFO] Evaluating innobackupex   --no-version-check   --move-back --force-non-empty-directories ${DATA} &>${DATA}/innobackup.move.log (20170725 11:10:34.928)
WSREP_SST: [ERROR] Cleanup after exit with status:1 (20170725 11:10:34.937)
2017-07-25 11:10:34 140292539795200 [ERROR] WSREP: Process completed with error: wsrep_sst_xtrabackup-v2 --role 'joiner' --address '192.168.56.12' --datadir '/var/lib/mysql/'   --parent '3212'  '' : 1 (Operation not permitted)
2017-07-25 11:10:34 140292539795200 [ERROR] WSREP: Failed to read uuid:seqno and wsrep_gtid_domain_id from joiner script.
2017-07-25 11:10:34 140292899555456 [ERROR] WSREP: SST failed: 1 (Operation not permitted)
2017-07-25 11:10:34 140292899555456 [ERROR] Aborting

innobackup.move.log 日志文件错误如下:

Error: datadir must be specified

-----------------------------------------------------------------------------------

9.在其它两个节点上复制配置文件,注意其中的wsrep_node_name和wsrep_node_address需要根据节点实际情况修改

10.使用专有命令启动第一个节点

sudo galera_new_cluster 

(传说中有很多中启动命令,例如 mysqld --wsrep-new-cluster --user=root & 或者 service mysql bootstrap 或者 mysqld_safe --wsrep-new-cluster 或者 service mysql start --wsrep-new-cluster,但其它几种我启动的时候都会报错。该命令暗示现在没有已存在的集群,启动的这台服务器是这个集群中的第一个,会产生新的集群UUID,如果集群已经存在还使用该命令会导致启动的服务器和已存在的集群不在一个集群体系中,因为产生了不一样的集群UUID)

11.在保证第一个节点启动后逐个启动其它节点,不要并行启动,可能会出预料不到的问题,如果第一个节点没启动,其它节点无法正常启动。

systemctl start mariadb

如果中间没出什么状况,这里就启动正常了。如果想验证节点是否启动成功,可以参考我的另一篇文章《3台CentOS-7安装Percona-XtraDB-Cluster-57集群》最下边的部分有提到,也可以使用强大的搜索引擎。

12.一定注意集群中最后关闭的服务器应该是下次启动的第一个服务器,因为集群判断这台服务器最后关闭所以具有最完整的数据,所以会设置在这台服务器之前关闭的服务器无法正常手动启动,如果强制启动需要手动将grastate.dat文件中的safe_to_boostrap设置为1后强行启动。

© 著作权归作者所有

共有 人打赏支持
b
粉丝 1
博文 29
码字总数 49010
作品 0
兰州
程序员
利用MariaDB Galera Cluster实现mariadb的多主复制

利用MariaDB Galera Cluster实现mariadb的多主复制 时间:2014年01月08日 | 分类:MariaDB | 评论:0 条 | 浏览:870 次 一、MariaDB Galera Cluster概要: 1.简述: MariaDB Galera Cluster...

vga
2014/12/13
0
0
如何安装和配置MariaDB Galera CentOS-7集群

192.168.3.130 clustera galera-db01 192.168.3.131 clusterb galera-db02 192.168.3.129 clusterc galera-db03 以下1-3步三台都需要执行 1:卸载mysql(因为mysql与mariaDB与mysql不兼容) ......

3764208
06/13
0
0
高可用的mysql galera集群部署

一:集群机器介绍四台机器:1.balance节点安装haproxy和keepalived机器名:balance01 172.18.48.1balance02 172.18.48.22.galera节点安装mysql数据库和galera机器名:galera01 172.18.48.3g...

双叶天下
2014/05/13
0
0
Linux服务及安全管理第十周作业【Linux微职位】

1、建立samba共享,共享目录为/data,要求:(描述完整的过程) 1)共享名为shared,工作组为magedu; 2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组...

akatsuki1023
06/29
0
0
centos6.x系统安装配置mariaDB集群

系统环境: Mariadb01 192.168.137.21 node01.com centos-6.x 2.6.32-573.el6.x8664 selinux=disabled Mariadb02 192.168.137.22 node02.com centos-6.x 2.6.32-573.el6.x8664 selinux=disab......

3764208
06/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

配置Spring的注解支持

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 配置Spring的注解支持 以上也提到了使用注解来配...

凯哥学堂
29分钟前
0
0
关于Spring Aop存在的一点问题的思考

在本人前面的文章Spring Aop原理之切点表达式解析中讲解了Spring是如何解析切点表达式的,在分析源码的时候,出现了如下将要讲述的问题,我认为是不合理的,后来本人单纯使用aspectj进行试验...

爱宝贝丶
31分钟前
0
0
JavaScript 概述

JavaScript是面向Web的编程语言。绝大多数现代网站都使用了JavaScript,并且所有的现代Web浏览器——基于桌面系统、游戏机、平板电脑和智能手机的浏览器——均包含了JavaScript解释器。这使得...

Mr_ET
今天
0
0
Java Run-Time Data Areas(Java运行时数据区/内存分配)

Java运行时数据区(内存分配) 本文转载官网 更多相关内容可查看官网 中文翻译可参考 2.5. Run-Time Data Areas The Java Virtual Machine defines various run-time data areas that are use...

lichuangnk
今天
0
0
docker learn :services docker-compose.yml

docker-compose.yml定义了服务的运行参数 version: "3" services: web: # replace username/repo:tag with your name and image details image: hub.c.163.com/dog948453219/friendlyhello d......

writeademo
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部