环境
[root@db-air-01 ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
[root@db-air-01 ~]# mysql -V
mysql Ver 14.14 Distrib 5.7.25, for Linux (x86_64) using EditLine wrapper
环境简介
3台服务器已经部署好 Galera Cluster
新加一台服务器做从属服务器
第一步:配置 Master 服务器(Galera Cluster)
1.编辑 my.cnf 并添加以下参数(3台Galera Cluster)
## 开启 GTID 模式
gtid_mode=ON
## 强制执行 GTID 一致性
enforce_gtid_consistency
[galera]
## 在所有节点启动
wsrep_gtid_mode=ON
## 在所有节点设置相同的值
wsrep_gtid_domain_id=236237238
## 为每个节点设置不同的值
gtid_domain_id=236
2.重启 MySQL服务(3台Galera Cluster)
systemctl restart mysqld
systemctl status mysqld
3.备份数据库
mysqldump -uroot -pXiaoliu123! \
--all-databases \
--single-transaction \
--triggers \
--routines \
--events > test.sql
4.创建同步用账号
GRANT ALL PRIVILEGES ON *.* TO 'slave'@'192.168.20.%' IDENTIFIED BY 'Xiaoliu123!' WITH GRANT OPTION;
第二步:配置从属服务器
1.编辑 my.cnf 并添加以下参数
## 开启 GTID 模式
gtid_mode=ON
## 开启二进制日志
log_bin=binlog
## 将从主服务器同步过来的数据写入二进制日志
log_slave_updates
## 强制执行 GTID 一致性
enforce_gtid_consistency
## 日志最多保留7天
expire_logs_days=7
## 设置唯一的 Server ID
server_id=240
## 基于行的日志
binlog_format=ROW
2.重启 MySQL 服务
systemctl restart mysqld
systemctl status mysqld
3.恢复从主服务器上备份的数据
mysql -uroot -pXiaoliu123! < /home/test.sql
4.设置同步
CHANGE MASTER TO MASTER_HOST = '192.168.20.236', \
MASTER_PORT = 3306, \
MASTER_USER = 'slave', \
MASTER_PASSWORD = 'Xiaoliu123!', \
MASTER_AUTO_POSITION = 1;
5.开始同步并查看同步状态
START SLAVE;
SHOW SLAVE STATUS\G
第三步:验证
1.验证数据
在任意一台 Galera Cluster 创建数据库、创建表并写入数据新从服务器的数据都将同步更新。
2.验证性能
mysqlslap -uroot -pXiaoliu123! \
--auto-generate-sql \
--auto-generate-sql-load-type=read \
--number-char-cols=10 \
--number-int-cols=5 \
--number-of-queries=10000 \
--concurrency=300 \
--iterations=10
mysqlslap -uroot -pXiaoliu123! \
--auto-generate-sql \
--auto-generate-sql-load-type=write \
--number-char-cols=10 \
--number-int-cols=5 \
--number-of-queries=10000 \
--concurrency=300 \
--iterations=10
附录:
Configuring MariaDB Replication between MariaDB Galera Cluster and MariaDB Server:https://mariadb.com/kb/en/library/using-mariadb-replication-with-mariadb-galera-cluster-configuring-mariadb-r/
Replicate from a MySQL Server into a Galera Cluster:https://severalnines.com/blog/replicate-mysql-server-galera-cluster
附录:Galera Cluster 服务器完整配置文件
# 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=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 设置服务器编码
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
# 跳过mysql程序起动时的字符参数设置 ,使用服务器端字符集设置
skip-character-set-client-handshake
# 最大数据包
max_allowed_packet=200M
# 不区分大小写
lower_case_table_names= 1
# 最大连接数
max_connections = 20000
# 最大错误连接数
max_connect_errors = 3000
# https://www.cnblogs.com/mydriverc/p/8296814.html
# show variables like 'back_log';
# 禁止DNS查询
skip-name-resolve
# 解决errro_logs时间戳与linux系统时间不一致问题
log_timestamps = SYSTEM
# mysql总共能够打开的文件的数量
# show variables like 'open%';
#open_files_limit= 59000
# STRICT_TRANS_TABLES:在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做任何限制
# NO_AUTO_CREATE_USER:防止GRANT自动创建新用户,除非还指定了密码。
# NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
wsrep_cluster_name=MyCluster
wsrep_provider = /usr/lib64/galera-3/libgalera_smm.so
# 这里也可以写成IP地址
wsrep_cluster_address = "gcomm://192.168.20.236,192.168.20.237,192.168.20.238"
wsrep_node_name = db-air-03
wsrep_node_address = 192.168.20.238
## 设置 server id
server_id=238
## 开启二进制日志
log-bin=mysql-bin
## 如果原数据库为Galera Cluster,请开启此选项,将同步过来的数据写入二进制日志
log-slave-updates
## 如果原数据库为Galera Cluster,请务必打开此选项,否则写入性能严重下降
## 普通单点或基于二进制主从复制架构不受此影响
sync_binlog=0
## 跳过主键重复错误
slave_skip_errors=1062
## 只保留最近7天日志
expire_logs_days=7
###################################以下设置参考自官方######################################
# http://galeracluster.com/documentation-webpages/configuration.html#configuring-swap-space
# 确保mysqld未绑定到127.0.0.1
# 确保将二进制日志格式设置为使用行级复制,而不是语句级复制。
# 请勿更改此值,因为它会影响性能和一致性。二进制日志只能使用行级复制。
binlog_format=ROW
# 确保默认存储引擎是InnoDB
# Galera Cluster不能与MyISAM或类似的非事务存储引擎一起使用
default_storage_engine=InnoDB
# 确保用于生成自动增量值的InnoDB锁定模式设置为交错锁定模式,该模式由2值指定。
# 不要更改此值。其他模式可能导致INSERT具有AUTO_INCREMENT列的表失败。
innodb_autoinc_lock_mode=2
# 该参数控制重做日志写入磁盘的过程 该参数的有效值有 0、1、2
# 确保将InnoDB日志缓冲区每秒写入文件一次,而不是每次提交,以提高性能。
# 注意 警告:在将innodb_flush_log_at_trx_commit设置为值0或2提高性能时,它还会引入某些危险。
# 操作系统崩溃或断电可能会消除最后一秒的交易。
# 虽然通常可以从另一个节点恢复此数据,但在群集同时关闭的情况下(例如,在数据中心停电的情况下),它仍然可能完全丢失。
innodb_flush_log_at_trx_commit = 0
# InnoDB缓冲池 建议为物理内存的3/4或4/5
innodb_buffer_pool_size = 5G
## 需要测试加大,对性能影响较大
## http://galeracluster.com/documentation-webpages/performance.html
## wsrep_slave_threads=40
wsrep_sst_method=rsync
## wsrep_provider_options="gcache.size=300M; gcache.page_size=300M"
open_files_limit= 30000
innodb_open_files=60000
innodb_lock_wait_timeout=500
back_log = 500
key_buffer_size = 124M
read_buffer_size = 16M
read_rnd_buffer_size = 2M
## 已弃用
## innodb_thread_concurrency = 8
# 打开慢日志查询
slow_query_log = 1
# 设置慢查询阈值
long_query_time = 2
gtid_mode=ON
enforce_gtid_consistency
[galera]
## 在所有节点启动
wsrep_gtid_mode=ON
### 在所有节点设置相同的值
wsrep_gtid_domain_id=236237238
### 为每个节点设置不同的值
gtid_domain_id=238
网友评论