(八) 数据库集群技术—Galera Cluster安装与配置

学习预览:

(一)mysql 运维基础篇(Linux云计算从入门到精通)

(二)mysql 索引和视图(数据库运维基础补充)

(三)mysql 触发器、存储过程和函数(数据库运维基础补充)

(四)MySQL安全机制和日志管理(mysql运维)

(五)mysql数据备份—物理备份(完备+lvm快照+xtrabackup)+逻辑备份(mysqldump+导入导出)

(六)mysql复制技术—M-S主从配置(传统+GTID)+M-M-S-S主从配置(GTID)

(七)mysql中间件mycat配置和部署(基于M-M-S-S)

(八) 数据库集群技术—Galera Cluster安装与配置

(九)数据库集群技术Galera+mycat(数据库运维学习终章)


CONTENT

8.1 Galera Cluster概述

8.2 安装Galera Cluster

8.2.1 前期准备

8.2.2 下载并安装Galera

8.3 配置Galera replication

8.3.1 创建数据同步的用户

8.3.2 文件my.cnf配置

8.4 验证Galera

8.4.1 各台插入数据并查看

8.4.2 重启服务器


8.1 Galera Cluster概述

Galera Cluster就是集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有两个版本,分别是Percona Xtradb Cluster及MariaDB Cluster,都是基于Galera的。

为什么使用Galera集群呢?因为MySQL的主从模式,天生的不能完全保证数据一致,这就需要一个新型的架构来解决这个问题。所以Galera集群就产生了。

相比传统的主从复制架构,Galera Cluster解决的最核心问题是,在三个实例(节点)之间,它们的关系是对等的,multi-master架构的,在多节点同时写入的时候,能够保证整个集群数据的一致性,完整性与正确性。

 

上图中有三个实例,组成了一个集群,而这三个节点与普通的主从架构不同,它们都可以作为主节点,三个节点是对等的,这种一般称为multi-master架构,当有客户端要写入或者读取数据时,随便连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不共享任何数据,是一种高冗余架构。

这个架构支持多点写入,完全避免了主从复制经常出现的数据不一致的问题,从而可以做到主从读写切换的高度优雅,在不影响用户的情况下,离线维护等工作,保持MySQL的高可用性。

8.2  安装Galera Cluster

8.2.1 前期准备

在安装Galera Cluster之前介绍一下mysql的结构,总共四台数据库服务器,实际生产过程中会不一样,根据需要进行改动。

三台主机添加各自的主机解释,关掉防火墙,卸载掉之前安装的mysql,因为要重新下载带有补丁的mysql包。

8.2.2 下载并安装Galera

(1)官网下载链接:https://galeracluster.com/downloads/

我选择的是稳定版本5.7,这个安装包很全面:

(2)打开7版本,发现这就是yum仓库,下面配置yum仓库来安装它。(复制好网页链接)

 

(3)配置yum仓库,并开始安装;并配置本地yum仓库,方便其他三台主机下载。

#1、配置yum仓库
vim /etc/yum.repos.d/galera.repo 
[galera]
name=galera
baseurl=http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
gpgcheck=0

#2、打开缓存,只需要修改keepcache=1。
#这样可以缓存下载的Galera软件包,这样我们就可以自建一个yum本地仓库让其他三台主机下载
vim /etc/yum.conf 
keepcache=1

#3、开始安装
yum repolist
yum install mysql-wsrep-5.7.x86_64 galera.x86_64 -y

#4、查看是否安装好
[Root@galera1 ~]# rpm -qa | grep mysql
mysql-wsrep-libs-compat-5.7-5.7.29-25.21.el7.x86_64
mysql-wsrep-common-5.7-5.7.29-25.21.el7.x86_64
mysql-wsrep-client-5.7-5.7.29-25.21.el7.x86_64
mysql-wsrep-server-5.7-5.7.29-25.21.el7.x86_64
mysql-wsrep-5.7-5.7.29-25.21.el7.x86_64
mysql-wsrep-libs-5.7-5.7.29-25.21.el7.x86_64

#5、自建yum本地仓库
mkdir galera
find /var/cache/yum/x86_64/7/ -iname '*.rpm' -exec cp -a {} galera \; 
ll galera/
yum install vsftpd createrepo -y
cp -r galera /var/ftp/
ls /var/ftp/galera/
createrepo /var/ftp/galera/
systemctl start vsftpd;systemctl enable vsftpd

#6、其它三台主机开始配置yum本地源,指向Galera1的ftp
#Galera2配置

vim /etc/yum.repos.d/galera.repo

[garela]
name=galera
baseurl=ftp://galera1/galera
gpgcheck=0

#copy到其他两台机器上
scp -r /etc/yum.repos.d/galera.repo galera3:/etc/yum.repos.d/
scp -r /etc/yum.repos.d/galera.repo galera4:/etc/yum.repos.d/

#下面在这三台机器上安装,是不是很快呢
yum install mysql-wsrep-5.7.x86_64 galera.x86_64 -y

8.3 配置Galera Replication

8.3.1 创建数据同步的用户

#启动数据库
systemctl start mysqld;systemctl enable mysqld

#修改密码
newpass=`grep 'temporary passsword' /var/log/mysqld.log | awk '{print $NF}'`
mysqladmin -p'$newpass' password Root@123

#创建用于同步数据的账号,每个主机都要设置
mysql> grant all on *.* to 'sst'@'192.168.119.%' identified by 'Galera@123';
mysql> flush privileges;

8.3.2 文件my.cnf配置

#Galera1配置,其他三台主机也是一样,my.cnf里面的文件稍作修改就好了
vim /etc/my.cnf
---------------------------------------------------------------
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/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://'  #Galera1是主的,所以这边不用配置
wsrep_node_name='galera1'
wsrep_node_address='192.168.119.163'
wsrep_sst_auth=sst:Galera@123
wsrep_sst_method=rsync
---------------------------------------------------------------

systemctl restart mysqld

ss -tnlp | egrep '3306|4567'  #检测端口是否打开
LISTEN     0      128          *:4567                     *:*                   users:(("mysqld",pid=38838,fd=12))
LISTEN     0      80          :::3306                    :::*                   users:(("mysqld",pid=38838,fd=38))

mysql> show status like 'wsrep%';  #这时候只开启了Galera1,所以只有1个集群
-----------------------------------------------------------------------
| wsrep_incoming_addresses     | 192.168.119.163:3306                 |
| wsrep_evs_delayed            |                                      |
| wsrep_evs_evict_list         |                                      |
| wsrep_evs_repl_latency       | 0/0/0/0/0                            |
| wsrep_evs_state              | OPERATIONAL                          |
| wsrep_gcomm_uuid             | dc83dbfb-83b7-11ea-9c4c-37b1d187d984 |
| wsrep_cluster_conf_id        | 1                                    |
| wsrep_cluster_size           | 1                                    |
-----------------------------------------------------------------------

#把Galera1的my.cnf文件拷给其他三台文件,改一下server-id,主机名和IP以及集群
for i in {2..4}; do scp -r /etc/my.cnf galera$i:/etc; done

#在举出一个Galera2的配置情况,其他模仿就好了,配置重启mysqld
vim /etc/my.cnf
----------------------------------------------------------------------------------------
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/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://galera1,galera3,galera4'  #这边需要假如其他三位主机,防止有机器down掉
wsrep_node_name='galera2'
wsrep_node_address='192.168.119.160'
wsrep_sst_auth=sst:Galera@123
wsrep_sst_method=rsync
----------------------------------------------------------------------------------------

#等所有的Mysqld服务器配置好之后,再看一下集群状态,成功的状态应该是四个哦
mysql> show status like 'wsrep%'; 

--------------------------------------------------------------------------------------
| wsrep_incoming_addresses     | 192.168.119.161:3306,192.168.119.162:3306,192.168.119.160:3306,192.168.119.163:3306 |
| wsrep_evs_delayed            |                                                                                     |
| wsrep_evs_evict_list         |                                                                                     |
| wsrep_evs_repl_latency       | 0.000933283/0.16847/1.00222/0.372863/6                                              |
| wsrep_evs_state              | OPERATIONAL                                                                         |
| wsrep_gcomm_uuid             | 73a7b43d-83ba-11ea-bcdd-1ed6d698c92d                                                |
| wsrep_cluster_conf_id        | 4                                                                                   |
| wsrep_cluster_size           | 4                                                                      
--------------------------------------------------------------------------------------

 

8.4 验证Galera

8.4.1 各台插入数据并查看

#Galera1创建数据库、表并插入数据
mysql> create database testdb;
mysql> create table testdb.t1(id int,name varchar(50));
mysql> insert into testdb.t1 values (1,'galera1');

#Galera2插入数据
insert into testdb.t1 values (2,'galera2');

#Galera3插入数据
mysql> insert into testdb.t1 values (3,'galera3');

#Galera4插入数据并查看表t1
mysql> insert into testdb.t1 values (4,'galera4');
mysql> select * from testdb.t1;
+------+---------+
| id   | name    |
+------+---------+
|    1 | galera1 |
|    2 | galera2 |
|    3 | galera3 |
|    4 | galera4 |
+------+---------+

8.4.2 重启服务器

这个就要注意了,重启Galera2、Galera3和Galera4没有问题,但是重启Galera1就有问题咯,因为在Galera1的my.cnf文件中,它并没有加入其它任意一个集群,所以就出现问题了。

所以只要在my.cnf中加入其它任意一台mysql服务器就可以了。这个我就不演示啦。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬核的无脸man~

你的鼓励是我创作的最大功力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值