mysql高可用mha
关闭防火墙,selinux
安装mysql。
百度网盘链接:https://pan.baidu.com/s/1nvQKgAl
密码:6ua8
开启主从复制
所有从库开启二进制日志binlog
bin_log=文件地址加二进制前缀
每个库开启server-id----不能一致
主库创建用户授权:
grant replication slave on *.* to xieyi@192.168.235.% identified by '123123';
配置主从复制:
change master to master_host='主ip',master_user='xieyi',master_password='123123',master_log_file='主二进制日志文件名',master_log_pos=主库二进制日志节点;
start slave;开启从库
关闭relay log自动清除
set global relay_log_purge=0;
set global read_only=1;
永久禁用自动删除relay log
在my.cnf配置文件中添加
relay_log_purge=0;
重启mysql;
在每台机子上部署mha
在hosts文件中添加
主机以及ip的映射关系:
安装依赖包:
yum -y install perl-DBD-MySQL
创建一个专门保存安装包的目录:
mkdir tools
将准备好的软件包上传:
链接:https://pan.baidu.com/s/1OWNAiI8l0Kq8JZhpnlHhpg
提取码:d358
所有主机安装mha4mysql-node-0.56-0.el6.noarch.rpm
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
在所有mysql服务其中mha管理账号:
grant all privileges on *.* to mha@'ip所有关于数据库的IP' identified by 'mha';
查看是否添加成功,主库添加会自动同步到从库所以在从库上查看
select user,host from mysql.user;
为所有节点创建软连接,否则检测mha复制情况时候会报错。
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/local/mysqlbinlog
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
部署mha管理节点:
导入所需要的perl包:
yum -y localinstall perl-*
安装管理rpm包
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
#############################################################################
编辑mha配置目录:
mkdir -p /etc/mha
创建日志目录:
mkdir -p /var/log/mha/app1
mkdir -p /var/data/binlog
创建一个mha的配置文件:
vim /etc/mha/app1.cnf
#############################################################################
#设置manager日志
manager_log=/var/log/mha/app1/manager
#设置manager工作目录
manager_workdir=/var/log/mha/app1
#设置mysql保存日志目录以便mha能找到其二进制文件
master_binlog_dir=/var/data/binlog
#设置监控的用户
user=mha
#设置mha用户的密码
password=mha
#设置监控主库,发送ping包的时间间隔,尝试三次没有回应的时候自动进行failover
ping_interval=2
#设置复制用户的密码
repl_password=123123
#指定复制用户
repl_user=xieyi
#设置ssh登录名
ssh_user=root
[server1]
hostname=192.168.2.10
port=3306
#mysql端主机ip以及端口
[server2]
#设置为候选master,如果设置该参数后,发生主从切换后将会将此从库提升为主库,即使这个主库不是集群中事件最新的slave
candidate_master=1
#默认情况下一个slave数据量落后master 100M的relay logs的话,MHA讲不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置这个参数,MHA触发切换在选择一个新的master的时候忽略复制延时,这个参数对于设置candidate_master=1的主机非常有用,因为这个候选主在切换过程中一定是新的master
check_repl_delay=0
hostname=主机ip
port=3306
[server3]
hostname=主机ip
port=3306
#############################################################################
由于mysql从库为备用主库所以也需要添加rep用户复制权限
grant replication slave on *.* to 名称@'在hosts配置的主机名' identified by '密码';
对所有主机配置ssh信任:
ssh-keygen 生成密钥对
ssh-keygen -t rsa -P '' -f~/.ssh/id_rsa > /dev/null 2>&1
发布所有公钥,包括自己
ssh-copy-id -i /root/.ssh/id_rsa.pub 主机用户名@主机ip地址
开启ssh服务支持密钥认证:
vim /etc/ssh/sshd_config
PubkeyAuthentication yes
RSAAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
重启sshd
systemctl reload sshd
#############################################################################
启动测试
在mha服务其中:
#测试ssh
masterha_check_ssh --conf=/etc/mha/app1.cnf
#出现如下提示表示成功
All SSH connection tests passed successfully.
#测试复制
masterha_check_repl --conf=/etc/mha/app1.cnf
#出现如下提示表示成功
MySQL Replication Health is OK.
#############################################################################
启动mha
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
#####################################################################
测试:
停止主库:
/etc/init.d/mysqld stop
将主库更变为之前从库:新主库状态为空。