Mysql5.6-galera(centos7.2)集群搭建

Mysql5.6-galera(centos7.2)集群搭建

一、基础环境准备(三台相同配置)

1、安装环境介绍

安装系统:Centos7.2
软件版本:Galera Cluster5.6.46(MySql5.6.46)
服务器地址(添加hosts解析):
172.18.18.4 mysql-1.dayan.com mysql-1
172.18.18.5 mysql-2.dayan.com mysql-2
172.18.18.6 mysql-3.dayan.com mysql-3
关闭防火墙,或者放行端口3306
开机关闭firewalld:
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service
关闭selinux
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config

2、下载galeracluster

下载地址http://galeracluster.com/downloads/
Mysql5.6-galera(centos7.2)集群搭建
环境安装需求:
安装前需卸载原有mysql,删除相关文件夹
卸载Postfix,这个可能跟MySQL配置有冲突: yum remove postfix –y
rpm -e mariadb-libs-5.5.44-2.el7.centos.x86_64
rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64
rpm -e postfix-2.10.1-6.el7.x86_64

Galera cluster需要以下安装包(拷贝到每台服务器中):
Mysql5.6-galera(centos7.2)集群搭建
安装需要外网环境

3、Yum源配置

设置galera的yum源(vim /etc/yum.repos.d/galera.repo):
[galera]
name = Galera
baseurl = http://releases.galeracluster.com/galera-3/centos/7/x86_64
gpgkey = http://releases.galeracluster.com/GPG-KEY-galeracluster.com
gpgcheck = 1

[mysql-wsrep]
name = MySQL-wsrep
baseurl = http://releases.galeracluster.com/mysql-wsrep-5.6/centos/7/x86_64
gpgkey = http://releases.galeracluster.com/GPG-KEY-galeracluster.com
gpgcheck = 1

二、安装依赖包及配置(三台相同配置)

yum安装以下包:
yum install mysql-server mysql-client galera -y
yum install gcc gcc-c++ perl-devel bison bison-devel ncurses-devel cmake autoconf -y
升级:yum -y upgrade openssl(不升级启动会报错)

Yum 安装后需要说动安装以下安装包:
rpm -ivh mysql-wsrep-devel-5.6-5.6.46-25.28.el7.x86_64.rpm
rpm -ivh mysql-wsrep-shared-5.6-5.6.46-25.28.el7.x86_64.rpm
rpm -ivh mysql-wsrep-test-5.6-5.6.46-25.28.el7.x86_64.rpm
rpm -qa | grep mysql
rpm -qa | grep galera
Mysql5.6-galera(centos7.2)集群搭建

1、创建相关应用目录

创建数据库data目录:
逻辑卷创建:
mkdir /data
pvcreate /dev/vdb1
vgcreate myvg1 /dev/vdb1
lvcreate -L 199G -n mylvm1 myvg1
mkfs.xfs /dev/mapper/myvg1-mylvm1
mount /dev/myvg1/mylvm1 /data
echo “/dev/mapper/myvg1-mylvm1 /data xfs defaults 1 2” >> /etc/fstab

sudo mkdir /data/
Mysql5.6-galera(centos7.2)集群搭建

创建用户:
sudo groupadd mysql
sudo useradd -g mysql mysql -d /home/mysql -s /sbin/nologin
sudo mkdir /data/mysql/data -p #数据存放目录
sudo chown -R mysql:mysql /data/mysql/data/
sudo mkdir /mysql ##套接字产生路径
chown mysql.mysql /mysql/

mkdir /etc/my.cnf.d/
cp /usr/share/doc/mysql-wsrep-server-5.6-5.6.46/wsrep.cnf /etc/my.cnf.d/
touch /etc/my.cnf
chown mysql.mysql /etc/my.cnf.d/wsrep.cnf
chown mysql.mysql /etc/my.cnf

2、mysql集群相关配置文件

三台节点配置文件相同(vim /etc/my.cnf)
三台节点配置文件不同(vim /etc/my.cnf.d/wsrep.cnf)

(1)、vim /etc/my.cnf

#For advice on how to change settings please see
#http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]

#Remove leading # and set to the amount of RAM for the most important data
#cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
#innodb_buffer_pool_size = 128M

#Remove leading # to turn on a very important data integrity option: logging
#changes to the binary log between backups.
#log_bin

#Remove leading # to set options mainly useful for reporting servers.
#The server defaults are faster for transactions and fast SELECTs.
#Adjust sizes as needed, experiment to find the optimal values.
#join_buffer_size = 128M
#sort_buffer_size = 2M
#read_rnd_buffer_size = 2M
#datadir=/usr/local/mysql
#socket=/usr/local/mysql/mysql.sock

#Disabling symbolic-links is recommended to prevent assorted security risks
#symbolic-links=0

#log-error=/data/mysql/log/error.log
#pid-file=/usr/local/mysql/mysqld.pid
!includedir /etc/my.cnf.d/

(2)、vim /etc/my.cnf.d/wsrep.cnf

第一台节点配置文件(vim /etc/my.cnf.d/wsrep.cnf):
[client]
port=3306
socket=/mysql/mysql.sock

[mysqld]
server-id=101
character-set-server=utf8 #字符集utf-8
collation-server=utf8_general_ci
explicit_defaults_for_timestamp=true
skip-name-resolve ##跳过主机名
user=mysql
port=3306 ##端口
datadir=/data/mysql/data/ ###数据存放路径
tmpdir=/tmp/mysql/ ###临时目录
socket=/mysql/mysql.sock ##套接字产生路径

binlog_rows_query_log_events=OFF ###这个选项应该关掉,否则会产生内部错误
wsrep_on=on
wsrep_provider=/usr/lib64/galera/libgalera_smm.so #插件
wsrep_cluster_name=‘my-galera’ ##集群名称
#wsrep_cluster_address=‘gcomm://’ ##首次作为发起人,此处为空,不向任何人同步数据。
wsrep_cluster_address=“gcomm://mysql-1,mysql-2,mysql-3”
wsrep_node_name=‘server-A’
wsrep_node_address=‘172.18.18.4’
wsrep_sst_auth=galera:galera123123 ##同步数据时,使用的账号密码,各个集群节点应该一致。
wsrep_provider_options=“base_port=4567;” #同步的专用端口
wsrep_sst_method=rsync ##同步数据时使用的工具。
#skip-grant-tables ##跳过授权表

[mysqld_safe]
log-error=/var/log/mysqld.log
第二台节点配置文件(vim /etc/my.cnf.d/wsrep.cnf):
[client]
port=3306
socket=/mysql/mysql.sock

[mysqld]
server-id=102
character-set-server=utf8 #字符集utf-8
collation-server=utf8_general_ci
explicit_defaults_for_timestamp=true
skip-name-resolve ##跳过主机名
user=mysql
port=3306 ##端口
datadir=/data/mysql/data/ ###数据存放路径
tmpdir=/tmp ###临时目录
socket=/mysql/mysql.sock ##套接字产生路径
#innodb_buffer_pool_size = 4096M
#max_allowed_packet = 500M

binlog_rows_query_log_events=OFF ###这个选项应该关掉,否则会产生内部错误
wsrep_on=on
wsrep_provider=/usr/lib64/galera/libgalera_smm.so #插件
wsrep_cluster_name=‘my-galera’ ##集群名称
#wsrep_cluster_address=‘gcomm://mysql-1’ ##首次作为发起人,此处为空,不向任何人同步数据。
#wsrep_cluster_address=‘gcomm://mysql-1,mysql-3’
wsrep_cluster_address=“gcomm://mysql-1,mysql-2,mysql-3”
wsrep_node_name=‘server-B’
wsrep_node_address=‘172.18.18.5’
wsrep_sst_auth=galera:galera123123 ##同步数据时,使用的账号密码,各个集群节点应该一致。
wsrep_sst_method=rsync ##同步数据时使用的工具。
#skip-grant-tables ##跳过授权表

[mysqld_safe]
log-error=/var/log/mysqld.log

第三台节点配置文件(vim /etc/my.cnf.d/wsrep.cnf):
[client]
port=3306
socket=/mysql/mysql.sock

[mysqld]
server-id=103
character-set-server=utf8 #字符集utf-8
collation-server=utf8_general_ci
explicit_defaults_for_timestamp=true
skip-name-resolve ##跳过主机名
user=mysql
port=3306 ##端口
datadir=/data/mysql/data/ ###数据存放路径
tmpdir=/tmp ###临时目录
socket=/mysql/mysql.sock ##套接字产生路径
#innodb_buffer_pool_size = 4096M
#max_allowed_packet = 500M

binlog_rows_query_log_events=OFF ###这个选项应该关掉,否则会产生内部错误
wsrep_on=on
wsrep_provider=/usr/lib64/galera/libgalera_smm.so #插件
wsrep_cluster_name=‘my-galera’ ##集群名称
#wsrep_cluster_address=‘gcomm://’ ##首次作为发起人,此处为空,不向任何人同步数据。
#wsrep_cluster_address=‘gcomm://mysql-1,mysql-2’
wsrep_cluster_address=“gcomm://mysql-1,mysql-2,mysql-3”
wsrep_node_name=‘server-C’
wsrep_node_address=‘172.18.18.6’
wsrep_sst_auth=galera:galera123123 ##同步数据时,使用的账号密码,各个集群节点应该一致。
wsrep_sst_method=rsync ##同步数据时使用的工具。
#skip-grant-tables ##跳过授权表

[mysqld_safe]
log-error=/var/log/mysqld.log

(3)、wsrep配置文件各项配置含义

• wsrep_provider:指定Galera库的路径
• wsrep_cluster_name:Galera集群的名称
• wsrep_cluster_address:Galera集群中各节点地址。地址使用组通信协议gcomm://(group communication)
• wsrep_node_name:本节点在Galera集群中的名称
• wsrep_node_address:本节点在Galera集群中的通信地址
• wsrep_sst_method
:state_snapshot_transfer(SST)使用的传输方法,可用方法有mysqldump、rsync和xtrabackup,前两者在传输时都需要对Donor加全局只读锁(
FLUSH TABLES WITH READ LOCK),xtrabackup则不需要(它使用percona自己提供的backup
lock)。强烈建议采用xtrabackup
• wsrep_sst_auth:在SST传输时需要用到的认证凭据,格式为:“用户:密码”
• pxc_strict_mode:是否限制PXC启用正在试用阶段的功能,ENFORCING是默认值,表示不启用
• binlog_format:二进制日志的格式。Galera只支持row格式的二进制日志
• default_storage_engine:指定默认存储引擎。Galera的复制功能只支持InnoDB
• innodb_autoinc_lock_mode:只能设置为2,设置为0或1时会无法正确处理死锁问题

三、数据库初始化及数据库启动

1、数据库第一台操作

第一台节点初始化数据库,其他节点不需要操作(初始化完成后看一下data中的mysql目录有没有相关内容):
mysql_install_db --user=mysql --datadir=/data/mysql/data/
ll
Mysql5.6-galera(centos7.2)集群搭建

编辑第一台配置文件(vim /etc/my.cnf.d/wsrep.cnf)
#skip-grant-tables ##跳过授权表

重新启动数据库:
systemctl restart mysql
systemctl status mysql

进入mysql,设置root用户密码和权限:
set password for [email protected] = password(‘123456’);

CREATE USER ‘test’@‘localhost’ IDENTIFIED BY ‘123456’;
set password for [email protected] = password(‘123456’);
grant all privileges on . to ‘test’@‘localhost’;
use mysql;
update user set host="%" where user=“test”;
flush privileges;

编辑第一台配置文件(vim /etc/my.cnf.d/wsrep.cnf)
取消skip-grant-tables ##跳过授权表

重新启动数据库:
vim /etc/my.cnf.d/wsrep.cnf
首次作为发起人,此处为空,不向任何人同步数据
Mysql5.6-galera(centos7.2)集群搭建

sudo service mysql restart --wsrep-new-cluster

进入第一节点数据库查看状态:
mysql -uroot -p
查看连接的主机:
show status like “wsrep_incoming_addresses”;
Mysql5.6-galera(centos7.2)集群搭建

查看集群状态:
show status like “wsrep%”;
Mysql5.6-galera(centos7.2)集群搭建
查看集群节点数:
show status like “wsrep_cluster_size”;
SHOW GLOBAL STATUS WHERE Variable_name IN(‘wsrep_ready’,‘wsrep_cluster_size’,‘wsrep_cluster_status’,‘wsrep_connected’);
Mysql5.6-galera(centos7.2)集群搭建

2、数据库第二台操作

启动第二节点(systemctl start mysql):
Mysql5.6-galera(centos7.2)集群搭建
在第一台中查看集群状态(节点二已加入集群):
Mysql5.6-galera(centos7.2)集群搭建

3、数据库第三台操作

启动第三节点(systemctl start mysql):
Mysql5.6-galera(centos7.2)集群搭建
查看集群状态(节点三已加入集群):
Mysql5.6-galera(centos7.2)集群搭建
Mysql5.6-galera(centos7.2)集群搭建

创建复制用户:
CREATE USER ‘galera’@’%’ IDENTIFIED BY ‘galera123123’;

四、galera集群测试

1、节点一创建数据库(galeratest)
create database galeratest;
Mysql5.6-galera(centos7.2)集群搭建
2、其他两个节点查看是否已同步
mysql -uroot -p
show databases;
Mysql5.6-galera(centos7.2)集群搭建

五、Galera集群重启

在集群停止之后重启时,先在每个几点上使用mysqld_safe --wsrep-recover查看节点的Recovered position的 值,选择值最大的一个作为第一个几点启动,如果启动失败,则在将作为第一个启动节点的服务器上编辑grastate.dat文件(可以使用find命令查找位置),将safe_to_bootstrap的值设为1,使用service mysql start --wsrep-new-cluster命令启动该节点,其他节点启动与以前一致。