MySQL Galera Cluster集群搭建

MySQL Galera Cluster集群搭建

Galera Cluster是由Codership开发的MySQL多主结构集群,这些主节点互为其它节点的从节点。不同于MySQL原生的主从异步复制,Galera采用的是多主同步复制,并针对同步复制过程中,会大概率出现的事务冲突和死锁进行优化,就是复制不基于官方binlog而是Galera复制插件,重写了wsrep api。

一.下载

    需要从galera官网下载重写了wsrep api版本的MySQL,至少需要三个节点,这里用三台CentOS7的虚拟机为例安装。

https://galeracluster.com/downloads/

最后一个test可以不用。

  • 二. 安装配置集群

2.1配置SELinux

        如果在服务器上启用了SELinux(增强安全性的Linux),则它可能会阻止mysqld执行所需的操作。

su
gedit /etc//selinux/config

或者用下面语句直接修改

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

需重启生效。

2.2 关闭防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service

2.3 安装

如果系统已装MySQL或mariadb,需要先卸载掉。CentOS7默认有装mariadb的。

systemctl stop mariadb
rpm -qa |grep mariadb
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

如果装有mysql也用同样的方法卸载掉。

systemctl stop mysqld
rpm -qa |grep mysql

卸载完后删掉以前的数据和配置文件。

rm -rf /etc/my.cnf.rpmsave;
rm -rf /etc/my.cnf.d/;
rm -rf /var/log/mysqld.log;
rm -rf /var/lib/mysql/;

先安装依赖包

yum -y install socat stunnel

我在centos7上需要依赖这两个包,具体也可以根据后面安装MySQL时提示依赖包在进行安装。

有的包有依赖关系,按下面顺序安装即可。

rpm -ivh mysql-wsrep-common-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh mysql-wsrep-libs-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh mysql-wsrep-client-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh mysql-wsrep-libs-compat-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh mysql-wsrep-server-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh mysql-wsrep-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh mysql-wsrep-devel-5.7-5.7.43-25.35.el7.x86_64.rpm;
rpm -ivh galera-3-25.3.37-1.el7.x86_64.rpm;

systemctl start mysqld

安装完后即可启动服务,需要的话也可以用以下设置开机启动systemctl enable mysqld

2.4 修改root密码

Mysql安装后自动给root生成一个随机密码,保存在/var/log/mysqld.log

输入cat /var/log/mysqld.log | grep password查看

mysql -uroot -p’ pglor5E#XX>6’

进入MySQL管理命令,修改密码策略

set global validate_password_policy=0;
set global validate_password_length=0;
alter user 'root'@'localhost' identified by '123456';

2.5 新建同步用户

由于MySQL默认的root用户只是用来修改本机配置,我们需要新建一个用户用来同步数据。

create user 'vivi'@'%' IDENTIFIED BY '123456';

授予权限

grant all on *.* to 'vivi'@'%';

2.6 配置galera集群

编辑/etc/my.cnf,三台服务器配置是不同的

服务器1

server_id=1
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2

wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://'
wsrep_node_name='node1'
wsrep_node_address='192.168.79.130'
wsrep_sst_auth=vivi:123456
wsrep_sst_method=rsync

服务器2

server_id=2
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2

wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://'
wsrep_node_name='node2'
wsrep_node_address='192.168.79.146'
wsrep_sst_auth=vivi:123456
wsrep_sst_method=rsync

服务器3

server_id=3
binlog_format=row
default_storage_engine=InnoDB
innodb_file_per_table=1
innodb_autoinc_lock_mode=2

wsrep_on=ON
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://'
wsrep_node_name='node3'
wsrep_node_address='192.168.79.150'
wsrep_sst_auth=vivi:123456
wsrep_sst_method=rsync

其中

server_id每台都不重复

wsrep_cluster_name一个集群用同一个名字

wsrep_node_name每台都不重复

wsrep_node_address本机IP地址

wsrep_sst_auth前面创建的用于同步的用户名和密码

wsrep_cluster_address这个比较重要,服务器1设置为'gcomm://'即可,服务器2和3需等1开启之后,再去设置成除本机之外的另外两台IP地址

服务器2设置为'gcomm:// 192.168.79.130, 192.168.79.150'

服务器3设置为'gcomm:// 192.168.79.130, 192.168.79.146'

2.7 启动集群

启动第一个节点

启动第一个节点以前,其节点的配置文件里面,不能配置其它节点的ip,即 wsrep_cluster_address=gcomm:// 这样就行了,否则会导致启动报错。待集群启动后,再修改它的配置文件,把其他节点的ip补充上去。

启动第一个节点,该命令会启动本机的 mysqld 服务,命令只在集群第一个节点启动时使用,因为该脚本中带有一个参数:–wsrep-new-cluster,代表新建集群。

/usr/bin/mysqld_bootstrap

启动其它节点

先配置其他节点的wsrep_cluster_address,确保节点1开启之后,再去设置成除本机之外的另外两台IP地址

服务器2设置为'gcomm:// 192.168.79.130, 192.168.79.150'

服务器3设置为'gcomm:// 192.168.79.130, 192.168.79.146'

逐个启动其它节点的服务。

systemctl restart mysqld

2.8 查看集群状态

mysql -uroot -p123456

登录MySQL

show status like 'wsrep%';

其中

wsrep_local_state_comment Synced已同步

wsrep_cluster_size 3 集群服务器数量3

说明启动成功

2.9 数据同步验证

在节点1

create database test1;
show databases;

然后在节点2和3查看

show databases;

结果一致。

继续在节点2操作

use test1;
create table t1(a int);
insert into t1 values(1);

然后在节点1和3查看

select * from test1.t1;

数据一致。

Enjoy it!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值