1 MariaDB主从复制原理
在主服务端会开启dump 线程,每个slave的i/o线程对应一个dump线程,用于向其发送binary log events
从服务器会开启i/o 线程 和sql线程 ,i/o线程接受主发来的二进制事件,保存在中继日志中
sql线程读取日志记录,写入从的数据库中
都是基于二进制日志,二进制日志必须开启,同时要改为row记录. 通过MariaDB [(none)]> show processlist或ss -ant查看
2 MariaDB一主一从架构构建,准备两台纯新的CentOS7.6服务器,其中主机称为node1的服务器地址为192.168.130.132,主机称为node2的服务器地址为192.168.130.133
主132:改配置文件
[mysqld]
server-id=2
log-bin=/data/mysql/mysql-bin
binlog-format=row
mkdir -pv /data/mysql ;chown -R mysql.mysql /data/mysql
systemctl enable --now mariadb
登录mysql,查看二进制日志 show master logs;记录下来
用户建立并授权 grant replication slave on *.* to 'repluser'@'192.168.130.%' identified by 'magedu';
从:133 改配置文件
[mysqld]
server-id=3
log-bin=/data/mysql/mysql-bin
read_only
mkdir -pv /data/mysql ;chown -R mysql.mysql /data/mysql
systemctl enable --now mariadb
登录mysql
CHANGE MASTER TO
MASTER_HOST='192.168.130.132',
MASTER_USER='repluser',
MASTER_PASSWORD='magedu',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=329;
start slave;
show slave statusG
3 MariaDB级联复制
上一节中我们完成了一主一从的MariaDB的主从复制架构,但是有的时候,我们期望有一个后备的MariaDB的节点,用只
动词}备份存储数据,不需要对外提供服务。为了实现该功能,我们可以在之前的一主一从架构上进行调整,即将从节点的二进
制文件打开,然后给他配置一个远程同步数据用户,接着使用一台新的服务器做为从服务器的从属,同步从服务器数据的即
柯林斯,下面我们在原来的架构上添加一台新的CentOS7.6,作为节点3,IP地址为192.168.132.134
答:上题中的133变成级联中间点,134连接133
133:在配置文件中 加入 log_slave_updates
systemctl restart mariadb
登录mysql show master logs;
备份一下主库,mysqldump -A -F --single-transaction --master-data=1 > /data/all.sql
scp /data/all.sql 192.168.100.134:/data
134的配置文件
[mysqld]
server-id=34
read-only
systemctl enable --now mariadb
vim /data/all.sql
[root@centos8 ~]#mysql < /data/all.sql
4 MariaDB半同步复制
centos8:
在主从复制的基础上,
主:
vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=83
log-bin
plugin-load-add = semisync_master
rpl_semi_sync_master_enabled=ON
rpl_semi_sync_master_timeout=3000
systemctl restart mariadb
从
vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=84
plugin_load_add = semisync_slave
rpl_semi_sync_slave_enabled=ON
systemctl restart mariadb
centos7:
通过安装半同步插件,主服务器安装主的插件,从服务器安装从的插件.
主服务器配置
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout = 1000;
mysql> SHOW GLOBAL VARIABLES LIKE '%semi%';
mysql> SHOW GLOBAL STATUS LIKE '%semi%';
从服务器配置
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled=1;
show plugins;查看插件是否安装
主从服务器查看状态
SHOW GLOBAL STATUS LIKE '%semi%';
5 MariaDB高可用方案MHA
准备三台新安装的CentOS7.6服务器,并使用yum安装MariaDB10.2.23,主机名分别为node1,node2,node3,
IP地址分别为192.168.130.132-134
1.改主机名
hostnamectl set-hostname manager 192.168.130.131
hostnamectl set-hostname node1 192.168.130.132
hostnamectl set-hostname node2 192.168.130.133
hostnamectl set-hostname node3 192.168.130.134
2.安装 MariaDB10.2.23
vim /etc/yum.repos.d/MariaDB.repo
[mariadb]
name=MariaDB
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.2/centos7-amd64/
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
导入key
rpm --import https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
安装
yum install -y mariadb-server
3.ssh互联
ssh-keygen
ssh-copy-id 192.168.130.131
rsync -av .ssh 192.168.130.132:/root/
rsync -av .ssh 192.168.130.133:/root/
rsync -av .ssh 192.168.130.134:/root/
4.管理节点和node节点安装包
管理 yum install -y mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm
node yum install -y mha4mysql-node-0.56-0.el6.noarch.rpm
5.在管理节点建立配置文件
mkdir /etc/mastermha/
vim /etc/mastermha/app1.cnf
[server default]
user=mhauser
password=magedu
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=repluser
repl_password=magedu
ping_interval=1
master_ip_failover_script=/usr/local/bin/master_ip_failover
report_script=/usr/local/bin/sendmail.sh
check_repl_delay=0
[server1]
hostname=192.168.130.132
[server2]
hostname=192.168.130.133
[server3]
hostname=192.168.130.134
candidate_master=1
6.邮件脚本
cat /usr/local/bin/sendmail.sh
echo "MySQL is down" | mail -s "MHA Warning" 254127092@qq.com
chmod +x /usr/local/bin/sendmail.sh
准备.mailrc文件放到家目录下
7.准备 /usr/local/bin/master_ip_failover 文件
chmod +x /usr/local/bin/master_ip_failover
虚拟ip 192.168.130.120
网关 192.168.130.1
8.实现主从复制
主
vim /etc/my.cnf
[mysqld]
server_id=32
log-bin
skip_name_resolve=1
general_log
mysql>show master logs
mysql>grant replication slave on *.* to repluser@'192.168.130.%' identified by
'magedu';
mysql>grant all on *.* to mhauser@'192.168.130.%' identified by 'magedu';
配置VIP
ifconfig eth0:1 192.168.130.120/24
从1和从2
vim /etc/my.cnf
[mysqld]
server_id=33
log-bin
read_only
relay_log_purge=0
skip_name_resolve=1
CHANGE MASTER TO
MASTER_HOST='192.168.130.132',
MASTER_USER='repluser',
MASTER_PASSWORD='magedu',
MASTER_PORT=3306,
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=329;
start slave;
show slave statusG
检查环境
masterha_check_ssh --conf=/etc/mastermha/app1.cnf
masterha_check_repl --conf=/etc/mastermha/app1.cnf
masterha_manager --conf=/etc/mastermha/app1.cnf
停止主节点上的systemctl stop mariadb
完成一次后,自动退出.
记得,将新主的read-only选项注释掉或者去掉