MariaDB Galera Cluster环境搭建

MariaDB Galera Cluster原理

Galera Cluster与传统的复制方式不同,不通过I/O_thread和sql_thread进行同步,而是在更底层通过wsrep实现文件系统级别的同步,可以做到几乎实时同步,而其上的MySQL对此一无所知这就要求MySQL能够调用wsrep提供的API来完成,在Mariadb10.1之前的版本,支持Galera Cluster的版本是与Mariadb分开发行的,其版本名称就成为Mariadb-Galera,Mariadb10.1以后的版本中MariaDB Galera Cluste不再单独发行,而是以galera-25.3.12-2.el7.x86_64包的形式出现

MariaDB Galera Cluster主要功能:

  • 同步复制
  • 真正的multi-master,即所有节点可以同时读写数据库
  • 自动的节点成员控制,失效节点自动被清除
  • 新节点加入数据自动复制
  • 真正的并行复制,行级
  • 用户可以直接连接集群,使用感受上与MySQL完全一致

同步流程

当client端执行dml操作时,将操作发给server,server将数据库所做的更改收集到一个写集中发给group(cluster),
cluster中每个动作对应一个GTID,其它server接收到并通过验证(合并数据)后,执行appyl_cb动作和commit_cb动作,若验证没通过,则会退出处理
当前server节点验证通过后,执行commit_cb,并返回,若没通过,执行rollback_cb。
只要当前节点执行了commit_cb和其它节点验证通过后就可返回。

准备实验环境

Galera Cluster需要至少三个节点,在此次实验过程中,三个节点IP地址:

Master:192.168.161.93(MariaDB01)
Slave1:192.168.161.94(MariaDB02)
Slave2:192.168.161.95(MariaDB03)

服务器配置:
4G 内存,2核CPU,20G数据磁盘空间。

关闭SELinux:

/etc/selinux/config中的SELINUX=disabled

关闭防火墙:

 

systemctl stop firewalld

分别修改主机名

# 在Master上操作
vi /etc/hostname
MariaDB01
systemctl restart systemd-hostnamed
# 在Slave1上操作
vi /etc/hostname
MariaDB02
systemctl restart systemd-hostnamed
# 在Slave2上操作
vi /etc/hostname
MariaDB03
systemctl restart systemd-hostnamed

三台主机上分别加入/etc/hosts,相互解析

192.168.161.93	MariaDB01
192.168.161.94	MariaDB02
192.168.161.95	MariaDB03

三台主机上分别安装依赖

yum install -y rsync lsof
# 集群数据同步需要用到

MariaDB Galera Cluster二进制安装

官网下载:https://downloads.mariadb.org/mariadb/10.4.13/

Master节点配置

解压,并移动至安装目录

tar xvf mariadb-10.4.13-linux-x86_64.tar
mv mariadb-10.4.13-linux-x86_64 /usr/local/mariadb

新建启动数据库服务的用户和组-mysql

useradd -r mysql

新建数据目录,并设置权限

mkdir -p /data/mysql
chown -R mysql. /data/mysql

添加系统启动文件及可执行权限

cd /usr/local/mariadb
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld

编辑配置文件-my.cnf

vim /usr/local/mariadb/my.cnf
#添加以下内容

[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8
 
[mysqld]
port = 3306
socket = /tmp/mysql.sock
 
basedir = /usr/local/mariadb/
datadir = /data/mysql/
pid-file = /data/mysql/mysql.pid
user = mysql
bind-address = 0.0.0.0
server-id = 1
 
init-connect = 'SET NAMES utf8'
character-set-server = utf8
 
#skip-name-resolve
#skip-networking
back_log = 300
 
max_connections = 1000
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128
max_allowed_packet = 4M
binlog_cache_size = 1M
max_heap_table_size = 8M
tmp_table_size = 16M
 
read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 8M
key_buffer_size = 4M
 
thread_cache_size = 8
 
query_cache_type = 1
query_cache_size = 8M
query_cache_limit = 2M
 
ft_min_word_len = 4
 
log_bin = mysql-bin
binlog_format = row
expire_logs_days = 30
 
log_error = /data/mysql/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/mysql-slow.log
 
performance_schema = 0
explicit_defaults_for_timestamp
 
#lower_case_table_names = 1
 
skip-external-locking
 
default_storage_engine = InnoDB
#default-storage-engine = MyISAM
innodb_file_per_table = 1
innodb_open_files = 500
innodb_buffer_pool_size = 64M
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_thread_concurrency = 0
innodb_purge_threads = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 2M
innodb_log_file_size = 32M
innodb_log_files_in_group = 3
inno
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值