mha mysql 两台机器_MYSQL集群MHA架构(一主两从+高可用)实现手册

资源提取(mysql软件+linux镜像+虚拟机):链接: https://pan.baidu.com/s/1ROPS4S45yoSODDqDzQndGA 提取码: qjs8

一、安装环境及架构

宿主机系统:MacOS版本 10.14.6

虚拟机软件:VirtualBoxVm

虚拟机系统:CentOS7

mysql版本:mysql5.7.28

文件远程传输:iTerm2

虚拟机ip角色描述

192.168.56.101

master

可读可写,mysql主库虚拟机

192.168.56.103

slave1

只读、从库

192.168.56.104

slave2

只读、从库

192.168.56.105

MHA manger

高可用监控

55c5fb339d13230364f60f613a3a6047.png

二、主从搭建

1、共有步骤

首先用iTerm工具使用命令上传mysql到虚拟机

scp -r mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar root@192.168.56.101:/root

scp -r mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar root@192.168.56.103:/root

scp -r mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar root@192.168.56.104:/root

登录CentOS虚拟机系统:关闭防火墙

#关闭防火墙

systemctl stop iptables

systemctl stop firewalld

#设置开机禁止启动防火墙

systemctl disable firewalld.service

在Centos中默认安装mariadb,需要检查如果存在进行删除

# 检查

rpm -qa |grep mariadb

# 移除

rpm -e mariadb-libs-5.5.41-2.el7_0.x86_64 --nodeps

解压缩mysql安装包,如果命令报错gzip: stdin: not in gzip format ,去掉z参数

tar -zxvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

安装准备

# 按顺序安装

rpm-ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm

rpm-ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm

rpm-ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm

rpm-ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm

rpm-ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

# 上述如出现警告xxx,秘钥xxx 在后面添加--force --nodeps 命令

# 安装开发工具,是功能更完整

rpm-ivh mysql-community-devel-5.7.28-1.el7.x86_64.rpm

#实例化mysql,初始化用户mysql

mysqld--initialize --user=mysql

#查看root密码cat /var/log/mysqld.log

#添加系统启动mysql自启动

systemctl start mysqld.service

#登录系统

mysql-uroot -p

#修改密码

set password=password('root');

#查看是否设置成功

systemctl status mysqld.service

2、配置主库的环境

修改/etc/my.cnf文件,添加下面内容

[mysqld]

# 添加,开启binlog,指定忽略库和serverId

log-bin=mysql-bin

server-id=1

sync-binlog=1binlog-ignore-db=performance_schema

binlog-ignore-db=information_schema

binlog-ignore-db=sys

#指定同步库

#binlog-do-db=lagou

保存文件修改重启mysql

systemctl restart mysqld

登录主库为root用户授权

#登录

mysql-uroot -proot

# 授权replication

grant replication slave on*.* to 'root'@'%' identified by 'root';

# 授权privileges

grant all privileges on*.* to 'root'@'%' identified by 'root';

#刷新生效

flush privileges;

#查看主库文件

show master status ;

# 使用上面命令看到master_log_file='mysql-bin.000001',master_log_pos=869信息

3、配置两台从库

修改/etc/my.cnf文件,添加下面内容

# serverid 不同库设置不同即可

server-id=2# binlog设置防止mha时候出问题

log-bin=mysql-binsync-binlog=1binlog-format=ROW

binlog-ignore-db=performance_schema

binlog-ignore-db=information_schema

binlog-ignore-db=sys

#设置relay

relay_log=mysql-relay-bin

#设置只读状态

read_only=1

保存文件修改重启mysql

systemctl restart mysqld

登录mysql,检查slave状态:

#登录

mysql-uroot -proot

# 如果非空开启状态需要stop slave停掉

show slave status \G

# 一下为1条命令,指定主库和同步信息的位置,如果是就库改造,需要同步下原来的数据

change master to master_host='192.168.56.101',master_port=3306,master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=869;

#启动从库

start slave;

#查看状态,Slave_IO_Running和Slave_SQL_Running是否为yes,是正常

show slave status \G

三、半同步和并行复制实现

####1、 半同步设置

主库master

#查看是否支持动态安装插件select@@have_dynamic_loading;

#查看已有插件

show plugins;

# master安装半同步插件,soname重命名install plugin rpl_semi_sync_master soname 'semisync_master.so';

# 查看配置参数

show variables like'%semi%';

#开启半同步

set global rpl_semi_sync_master_enabled=1;

#设置超时时间

set global rpl_semi_sync_master_timeout=1000;

从库slave

#查看是否支持动态安装插件select@@have_dynamic_loading;

#查看已有插件

show plugins;

# master安装半同步插件,soname重命名install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

# 查看配置参数

show variables like'%semi%';

#开启半同步

set global rpl_semi_sync_slave_enabled=1;

#重启slave

stop slave;

start slave;

2、并行复制配置

从库slave有两种方案:一种方案登录mysql动态设置、另一种方案修改my.cnf文件(推荐)

#主库修改master

#查看配置参数

show variables like '%binlog_group%';

#设置超时时间

set global binlog_group_commit_sync_delay=1000;

set global binlog_group_commit_sync_no_delay_count=100;

#从库修改slave

#查看配置参数

show variables like '%slave%';

set global slave_parallel_type='LOGICAL_CLOCK';

#设置超时时间

set global slave_parallel_workers=8;

set global master_info_repository='TABLE';

show variables like '%relay_log%';

stop slave

#执行失败写在my.cnf配置中

set global relay_log_recovery=1;

set global relay_log_info_repository='TABLE';

start slave

## 或者,上下选择一个即可

#:/etc/my.cnf 配置文件添加下面配置

slave_parallel_type='LOGICAL_CLOCK'

slave_parallel_workers=8

master_info_repository='TABLE'

relay_log_recovery=1

relay_log_info_repository='TABLE'

#然后重启

systemctl restart mysqld

#登录mysql执行sql验证:

select * from performance_schema.replication_applier_status_by_worker;

五、搭建MHA服务器

MHA由manager和node节点组成,node四个服务器都必须安装

1、保持四台机器相互通信,使用ssh秘钥实现

master和slave执行生成公钥

#master和slave执行,生成公钥ssh-keygen -t rsa

#master和slave执行,复制公钥到mha服务器ssh-copy-id 192.168.56.105

manager服务器执行

#生成公钥ssh-keygen -t rsa

# 检查是否存在authorized_keys文件,同时追加本机的cat ~/.ssh/authorized_keys

#在文件中追加本机ssh公钥cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

#将本机authorized_keys同步值master和slave主机scp authorized_keys root@192.168.56.101:/root/.ssh/

scp authorized_keys root@192.168.56.103:/root/.ssh/

scp authorized_keys root@192.168.56.104:/root/.ssh/

2、四台服务器同时安装node节点

#下载wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm

#安装

rpm-ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm --force --nodeps

3、安装manager主机

安装manager

# 安装依赖wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

rpm -ivh epel-release-latest-7.noarch.rpmyum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-Fork Manager -y

# 执行上述yum时候出现Cannot retrieve metalinkfor repository: epel/x86_64. 异常

# 处理方式: 打开/etc/yum.repos.d/epel.repo ,注释掉mirrorlink,取消注释baseurl;

#安装nodewget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm

rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm --force --nodeps

#安装managerwget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm --force --nodeps

#补齐所需插件yum install -y perl-YAML-Tiny perl-PAR-Dist perl-Module-ScanDeps perl-Module-CoreList perl-Module-Build perl-CPAN perl-CPANPLUS perl-File-Remove perl-Module-Install

初始化配置文件

mkdir -p /var/log/mha/app1touch /var/log/mha/app1/manager.log

#masterha_default.cnf内容如下面vi /etc/masterha_default.cnfmkdir /etc/mha

#app1.cnf内容如下面vi /etc/mha/app1.cnf

masterha_default.cnf文件内容

[server default]

#用户名

user=root

#密码

password=root

#ssh登录账号

ssh_user=root

#主从复制账号

repl_user=root

#主从复制密码

repl_password=root

#ping次数

ping_interval=1#二次检查的主机

secondary_check_script=masterha_secondary_check -s 192.168.56.101 -s 192.168.56.103 -s 192.168.56.104

app1.cnf文件内容

[server default]

#MHA监控实例根目录

manager_workdir=/var/log/mha/app1

#MHA监控实例日志文件

manager_log=/var/log/mha/app1/manager.log

#[serverx] 服务器编号

#hostname主机名

#candidate_master 可以做主库

#master_binlog_dir binlog日志文件目录

[server1]hostname=192.168.56.101candidate_master=1master_binlog_dir="/var/lib/mysql"[server2]hostname=192.168.56.103candidate_master=1master_binlog_dir="/var/lib/mysql"[server3]hostname=192.168.56.104candidate_master=1master_binlog_dir="/var/lib/mysql"

检测ssh通信情况

masterha_check_ssh --conf=/etc/mha/app1.cnf

检测管理情况

masterha_check_repl --conf=/etc/mha/app1.cnf

启动并监控

#启动

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

#查看监控

masterha_check_status --conf=/etc/mha/app1.cnf

#查看日志

tail -f /var/log/mha/app1/manager.log

六、结果演示

主从测试sql

create TABLE position (

id int(20),

name varchar(50),

salary varchar(20),

city varchar(50)

) ENGINE=innodb charset=utf8;

insert into position values(1, 'Java', 13000, '北京');

insert into position values(2, 'DBA', 20000, '天津');

create TABLE position_detail (

id int(20),

pid int(20),

description text

) ENGINE=innodb charset=utf8;

insert into position_detail values(1, 1, 'Java开发');

insert into position_detail values(2, 2, '数据库管理员');

可用性测试

#主库执行

systemctl stop mysqld

#监控日志manager.log,去master主机

show master status;

七、问题

[/usr/share/perl5/vendor_perl/MHA/ManagerUtil.pm, ln122] Got error when getting node version. Error:

[/usr/share/perl5/vendor_perl/MHA/ManagerUtil.pm, ln123]bash: apply_diff_relay_logs: 未找到命令

node节点没有安装,在master和slave上执行

wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm

rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm --force --nodeps

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值