Linux环境下搭建MySQL服务安装MySQL
关闭防火墙
MySQL主从集群搭建master配置
slave配置
MySQL主从集群半同步复制机制master配置
slave配置
MHA(Master High Availability)master/slave配置文件修改
节点之间ssh通信配置
MHA安装与配置
MHA高可用测试Linux环境下安装MySQL
//上传安装包,并解压
[root@centos-linux--1- ~]# tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
//查看是否安装mariadb
[root@centos-linux--1- ~]# rpm -qa|grep mariadb
//删除安装的mariadb
[root@centos-linux--1- ~]# rpm -e mariadb-libs-5.5.65-1.el7.x86_64 --nodeps
//再次确认是否删除mariadb
[root@centos-linux--1- ~]# rpm -qa|grep mariadb
//安装Mysql,按下列命令依次执行
[root@centos-linux--1- ~]# rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
[root@centos-linux--1- ~]# rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
[root@centos-linux--1- ~]# rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
[root@centos-linux--1- ~]# rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
[root@centos-linux--1- ~]# rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
[root@centos-linux--1- ~]# rpm -ivh mysql-community-devel-5.7.28-1.el7.x86_64.rpm
//初始化Mysql,并创建用户
[root@centos-linux--1- ~]# mysqld --initialize --user=mysql
//查看日志,查找初始化密码
[root@centos-linux--1- ~]# cat /var/log/mysqld.log
//启动mysql服务
[root@centos-linux--1- ~]# systemctl start mysqld.service
//客户端连接
[root@centos-linux--1- ~]# mysql -u root -p
//修改连接密码,并退出
mysql>set password=password('root');
mysql>quit;
//关闭防火墙,按如下命令依次执行
[root@centos-linux--1- ~]# systemctl stop iptables
[root@centos-linux--1- ~]# systemctl stop firewalld
//关闭机器重启防火墙自动启动功能
[root@centos-linux--1- ~]# systemctl disable firewalld.serviceMySQL主从集群搭建master配置
//修改配置文件
[root@centos-linux--1- etc]# vim /etc/my.cnf
[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
# 开启binlog日志功能,并重命名日志文件名称
log_bin=mysql-bin
#集群服务唯一标示
server-id=1
#binlog日志磁盘同步
sync-binlog=1
#指定不需要同步的表
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
binlog-ignore-db=sys
#指定需要同步的表
#binlog-do-db=test
......
//重启mysql服务
[root@centos-linux--1- etc]# systemctl restart mysqld
//连接Mysql,对slave从服务root用户进行授权
[root@centos-linux--1- etc]# mysql -uroot -p
mysql> grant replication slave on *.* to 'root'@'%' identified by 'root';
mysql> grant all privileges on *.* to 'root'@'%' identified by 'root';
mysql> flush privileges;
//查看配置信息
mysql> show master status \G;
mysql> quit;
2.slave配置
//修改配置文件
[root@centos-linux--1- etc]# vim /etc/my.cnf
[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
# 集群Mysql服务器唯一标示
server-id=2
#relaylog配置文件
relay_log=mysql-relay-bin
#限定从库只读
read_only=1
......
//重启mysql服务器
[root@centos-linux--2- ~]# systemctl restart mysqld
[root@centos-linux--2- ~]# mysql -uroot -p
//将slave与master关联
mysql> change master to master_host='10.211.55.4',master_port=3306,master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=869;
//启动从库
mysql> start slave;
//查看slave与master关联信息
mysql> show slave status \G;MySQL集群半同步复制机制降低主从复制延迟
1.master配置
//查看动态安装插件是否开启
mysql> select @@have_dynamic_loading;
//查看已安装的插件
mysql> show plugins;
//安装master半同步复制机制需要的插件
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
//配置半同步机制参数
mysql> set global rpl_semi_sync_master_enabled=1;
mysql> set global rpl_semi_sync_master_timeout=1000;
//查看是否生效
mysql> show variables like '%semi%';
2.slave配置
//查看动态安装插件是否开启
mysql> select @@have_dynamic_loading;
//查看已安装的插件
mysql> show plugins;
//安装slave半同步复制机制需要的插件
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
//配置半同步机制参数
mysql> set global rpl_semi_sync_slave_enabled=1;
//查看是否生效
mysql> show variables like '%semi%';
//重启
mysql> stop slave;
mysql> start slave;MHA(Master High Availability)
MHA(Master High Availability)是一款开源的MySQL的高可用程序,它为 MySQL 主从复制架构提供了 自动主故障转移(automating master failover)功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点。在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了master节点的在线切换功能,即按需切换master/slave节点,通常只需0.5-2秒。
MHA 是由日本人yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的MySQL高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器。
1.配置文件修改
//master添加配置
#开启中继日志
relay_log=mysql-relay-bin
#是否自动清空不再需要中继日志
relay_log_purge=0
#使得更新的数据写入二进制日志中
log_slave_updates=1
//slave添加配置
# 开启二进制日志
log_bin=mysql-log
#是否自动清空不再需要中继日志
relay_log_purge=0
#关闭名称解析(非必须)
skip_name_resolve
#使得更新的数据写入二进制日志中
log_slave_updates=1
//master主机进行授权
mysql> grant all on *.* to 'mhaadmin'@'%' identified by 'mhapass';
2.节点间ssh通信配置
MHA集群中的各节点彼此之间均需要基于ssh互信通信,以实现远程控制及数据管理功能。简单起见,可在Manager节点生成密钥对儿,并设置其可远程连接本地主机后, 将私钥文件及authorized_keys文件复制给余下的所有节点即可。所有节点按如下命令操作:
[root@centos-linux ~]# ssh-keygen -t rsa
[root@centos-linux ~]# ssh-copy-id -i .ssh/id_rsa.pub root@'10.211.55.9'
//在MHA Manager上查看
[root@centos-linux .ssh]# cat .ssh/authorized_keys
所有机器的公钥都已经在authorized_keys这个文件中了,把这个文件发送至其他机器就可以实现ssh无密码互通了。
[root@centos-linux ~]# scp .ssh/authorized_keys root@'10.211.55.4':~/.ssh/
[root@centos-linux ~]# scp .ssh/authorized_keys root@'10.211.55.6':~/.ssh/
[root@centos-linux ~]# scp .ssh/authorized_keys root@'10.211.55.8':~/.ssh/
3.MHA安装与配置
//所有机器安装
[root@centos-linux ~]# yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
//只在MHA Manager安装,第一步是安装需要的依赖,不然会报下图错误
[root@centos-linux ~]# yum install epel-release
[root@centos-linux ~]# yum install -y mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
//MHA配置
[root@centos-linux ~]# vim /etc/masterha_default.cnf
[server default]
# mha管理用戶名
user=mhaadimn
password=mhapass
# ssh免密钥登录的帐号名
ssh_user=root
# mysql复制帐号,用来在主从机之间同步二进制日志等
repl_user=root
repl_password=root
# ping间隔,用来检测master是否正常
ping_interval= 1
# 文件配置
manager_workdir=/etc/mha
manager_log=/etc/mha/manager.log
remote_workdir=etc/mhadata
[server1]
hostname=10.211.55.4
ssh_port=22
#是否可以成为master候选节点
candidate_master=1
[server2]
hostname=10.211.55.6
ssh_port=22
candidate_master=1
[server3]
hostname=10.211.55.8
ssh_port=22
#不能成为master候选节点
no_master=1
......
//对节点进行检测
//检测各节点间ssh互信通信配置是否ok
[root@centos-linux ~]# masterha_check_ssh -conf=/etc/masterha_default.cnf
//检查管理的MySQL复制集群的连接配置参数是否OK,可能会报下图错误,要求所有节点binlog-do-db与binlog-ignore-db配置要相同
[root@centos-linux ~]# masterha_check_repl -conf=/etc/masterha_default.cnf
4.MHA启动、关闭及状态查看
//启动MHA
[root@centos-linux ~]# masterha_manager -conf=/etc/masterha_default.cnf &
//查看启动状态
[root@centos-linux ~]# masterha_check_status -conf=/etc/masterha_default.cnf
//关闭MHA
[root@centos-linux ~]# masterha_stop -conf=/etc/masterha_default.cnf
5.测试
关闭Mysql集群master节点,查看MHA日志,如下代表成功。
6.新增节点流程
备份现master节点二进制数据日志-->同步日志到新增节点-->将新增节点设置为slave-->修改MHA配置并重启。
//新选举的master节点机器
[root@centos-linux--2- ~]# mkdir /backup
[root@centos-linux--2- ~]# mysqldump --all-database > /backup/mysql-backup-`date +%F-%T`-all.sql
//将数据日志文件发送到新增节点
[root@centos-linux--2- ~]# scp /backup/mysql-backup-2020-09-29-09:57:09-all.sql root@‘10.211.55.4‘:~
//新增节点机器
//上新增节点恢复历史数据
[root@centos-linux--1- ~]# mysql < mysql-backup-2020-09-29-09:57:09-all.sql
[root@centos-linux--1- ~]# mysql -uroot -p
mysql> change master to master_host='10.211.55.6',master_port=3306,master_user='root',master_password='root',master_log_file='mysql-bin.000003', master_log_pos=742;
mysql> stop slave;
mysql> start slave;
mysql> show slave status\G;
//MHA机器
//关闭MHA
[root@centos-linux ~]# masterha_stop -conf=/etc/masterha_default.cnf
//启动MHA
[root@centos-linux ~]# masterha_manager -conf=/etc/masterha_default.cnf &
//查看启动状态
[root@centos-linux ~]# masterha_check_status -conf=/etc/masterha_default.cnf