MHA(master high availability)数据库高可用集群

    技术2022-07-12  92

    主从集群中主库是来写数据的,从库读取数据,当主库宕机从库不能使用没有写入数据的地方,就会造成整个架构不能正常使用。 MHA: 是一套优秀的作为MySQL高可用环境下故障切换和只从提升的软件,MySQL故障切换的过程中MHA能做到30s之内自动完成数据库的切换操作,并在进行故障排除切换过程中MHA能在最大过程度保证数据一致性,以达到真正意义上的高可用。 MHA特点:

    故障转移尽可能保证数据的一致性

    MHA工作原理: 当监控到主库宕机,会尝试获取宕机主库的二进制文件,获取到之后找到最新同同步的从库,将该文件的中继日志传递给其他从库,来同步数据,保证从库之间的数据一致,从从库当中选出一台作为新主库,并同步bin-log(二进制)二进制文件,其余的从库从这个新主库同步数据,并保证主从集群的正常运行。

    主192.168.10.3从1192.168.10.4从2192.168.10.5MHA192.168.10.6

    修改从数据库的配置文件

    #一主一从不需要添加,一主多从添加防止主数据库宕机后从删除二进制文件 vim /etc/my.cnf #添加内容 12 relay_log_purge=0 13 read_only=1 #重启mysql服务

    三台主机授权

    grant all on *.* to "mha"@"192.168.10.%" identified by "123.com"; grant replication slave on *.* to"slave"@"192.168.10.%" identified by "123.com"; flush privileges; #从库查看主从是否能连接成功 show slave status\G #是否有两个Yes Slave_IO_Running: Yes Slave_SQL_Running: Yes

    四台主机做免密登录

    #主 [root@CentOS3 ~]# ssh-keygen [root@CentOS3 ~]# ssh-copy-id root@192.168.10.4 [root@CentOS3 ~]# ssh-copy-id root@192.168.10.5 [root@CentOS3 ~]# ssh-copy-id root@192.168.10.6 #从1 [root@CentOS4 ~]# ssh-keygen [root@CentOS4 ~]# ssh-copy-id root@192.168.10.4 [root@CentOS4 ~]# ssh-copy-id root@192.168.10.5 [root@CentOS4 ~]# [root@CentOS4 ~]# ssh-copy-id root@192.168.10.6 #从2 [root@CentOS5 ~]# ssh-keygen [root@CentOS5 ~]# ssh-copy-id root@192.168.10.4 [root@CentOS5 ~]# ssh-copy-id root@192.168.10.5 [root@CentOS5 ~]# ssh-copy-id root@192.168.10.6 #MHA [root@CentOS6 ~]# ssh-keygen [root@CentOS6 ~]# ssh-copy-id root@192.168.10.4 [root@CentOS6 ~]# ssh-copy-id root@192.168.10.5 [root@CentOS6 ~]# ssh-copy-id root@192.168.10.6

    四台主机安装node节点

    mv /etc/yum.repos.d/default/* /etc/yum.repos.d/ rpm -ivh epel-release-latest-7.noarch.rpm yum -y install perl-DBD-mysql perl-DBI rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

    MHA:

    [root@CentOS6 ~]# yum -y install perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager #如果没有自带的yum源则用下面这个方法 ############################################# [root@CentOS6 ~]# cd /etc/yum.repos.d/ [root@CentOS6 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [root@CentOS6 ~]# yum -y install perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager ############################################# [root@CentOS6 ~]# rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm #编写管理节点文件 [root@CentOS6 ~]# vim /etc/masterha_default.cnf [server default] user=mha #数据库给manager管理节点的授权用户 password=123.com # repl_user=slave repl_password=123.com ssh_user=root master_binlog_dir=/usr/local/mysql/data remote_workdir=/data/login ping_interval=2 shutdown_script="" [root@CentOS6 ~]# mkdir /etc/mha [root@CentOS6 ~]# vim /etc/mha/app1.cnf [server default] manager_workdir=/var/log/manager manager_log=/var/log/manager/manager.log [server1] hostname=192.168.10.3 port=3306 ssh_port=22 [server2] hostname=192.168.10.4 port=3306 ssh_port=22 candidate_master=1 [server3] hostname=192.168.10.5 port=3306 ssh_port=22 #检测manager节点和后端节点的连接 [root@CentOS6 ~]# masterha_check_ssh --global-conf=/etc/masterha_default.cnf --conf=/etc/mha/app1.cnf [root@CentOS6 ~]# masterha_check_repl --global-conf=/etc/masterha_default.cnf --conf=/etc/mha/app1.cnf #启动服务 [root@CentOS6 ~]# masterha_manager --global-conf=/etc/masterha_default.cnf --conf=/etc/mha/app1.cnf

    验证:

    #将mysql主服务器关掉,去从1上创建数据,在从2上查看数据是否同步成功 #主 [root@CentOS3 ~]# /etc/init.d/mysqld stop #从1 [root@CentOS4 ~]# mysql -uroot -p123.com mysql> create database si; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | lkx | | mysql | | performance_schema | | si | | test | +--------------------+ #从2 [root@CentOS4 ~]# mysql -uroot -p123.com mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | lkx | | mysql | | performance_schema | | si | | test | +--------------------+
    Processed: 0.009, SQL: 9