当前位置:   article > 正文

Mysql集群MHA高可用架构_mha架构

mha架构

目录

1、MHA的组成

2、工作原理 

         3、配置

配置mysql环境(138 139 140)

(1)初始化数据库(新机器可以不用)

(2)配置master

  (3)   配置slave

(4)启动mysql及修改密码

配置mysql一主双从(138 139 140)

(1)master上创建用于主从同步的用户

(2)配置主从(gtid)

         安装配置MHA

         (1)在master上进行授权


MHA是 开源的MYSQL故障切换方案;全称:Master High Availability,故障切换时间10-30s

1、MHA的组成

MHA由node和manager组成

        node:

                就是所有数据库机器都需要部署的, master是一个node,slave也是一个node; 相当于监控客户端;

        manager: 

               Manager相当server,它会对node进行管理,配置检查,binlog和relay log的获取,执行切换任务等; 可以单独部署在server上(推荐),单独部署可以管理多套主从架构。也可以部署在某一个slave上; 如果部署在slave上,那么该slave就无法 被升级为主库;

2、工作原理 

e0a074fc30e3456bb8877c37e96837f3.png

在MySQL MHA检测到MySQL架构中MySQL主库发生故障后,MHA试图从宕机的MySQL主库上保存二进制日志,最大程度的保证数据不会丢失。并选择一个Slave从库,将其提升为新的MySQL主从架构中的主库,并设置其他的Slave从库指向新的MySQL主库。具体过程如下:
1、MySQL MHA试图从宕机崩溃的MySQL主库中保存二进制日志。
2、MySQL MHA试图识别数据最新的Slave。
3、将该Slave数据库的中继日志同步到其他的从库,保证新的MySQL主从同步架构中数据的一致性。
4、应用从Master中保存的二进制日志。
5、将一个Slave提升为新的master。
6、控制其他Slave指向新的master。

 3、配置

本实验共需要四台主机(Centos7.9版本),各节点都要开启bin-log及relay_log,各从节点要关闭relay-log-purge(自动清除中继日志功能)

主机名ip角色备注
manager.opelab.com192.168.88.141控制器用于监控管理
master.openlab.com192.168.88.138主服务器开启bin-log及relay_log
slave1.openlab.com192.168.88.139从服务器

开启bin-log及relay_log关闭relay-log-purge

slave2.openlab.com192.168.88.140从服务器

开启bin-log及relay_log关闭relay-log-purge

hostnamectl set-hostname 主机名   修改主机名

为了后期方便在/etc/hosts文件配置(四台都做)

192.168.88.141  manager.openlab.com    manager
192.168.88.138  master.openlab.com       master
192.168.88.139  slave1.openlab.com        slave1
192.168.88.140  slave2.openlab.com        slave2

配置mysql环境(138 139 140)

(1)初始化数据库(新机器可以不用)

  1. [root@localhost data]#systemctl stop mysql
  2. [root@localhost data]#rm -rf /usr/local/mysql/data/*
  3. [root@localhost data]# mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --explicit_defaults_for_timestamp
  4. 2023-03-31T08:37:35.118827Z 0 [Warning] InnoDB: New log files created, LSN=45790
  5. 2023-03-31T08:37:35.188031Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
  6. 2023-03-31T08:37:35.270253Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 492bacb2-cf9f-11ed-8457-000c29321a06.
  7. 2023-03-31T08:37:35.271643Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
  8. 2023-03-31T08:37:40.644324Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
  9. 2023-03-31T08:37:40.644364Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
  10. 2023-03-31T08:37:40.648120Z 0 [Warning] CA certificate ca.pem is self signed.
  11. 2023-03-31T08:37:41.540179Z 1 [Note] A temporary password is generated for root@localhost: tyh4CGtekl!<

 注意初始化数据库会产生临时密码(四台主机不一样)

72eba23620bb4a3f9e46224fa95d9625.png

(2)配置master

  1. vim /etc/my.conf
  2. [mysqld]
  3. datadir=/usr/local/mysql/data
  4. socket=/tmp/mysql.sock
  5. symbolic-links=0
  6. relay_log=ON
  7. relay-log=relay-bin
  8. log-bin=mysql-bin
  9. server_id=138
  10. character-set-server=utf8
  11. gtid-mode=on
  12. enforce-gtid-consistency=true

(3)配置slave

  1. vim /etc.my.cnf
  2. [mysqld]
  3. datadir=/usr/local/mysql/data
  4. socket=/tmp/mysql.sock
  5. symbolic-links=0
  6. relay_log_purge = 0
  7. relay_log=ON
  8. relay-log=relay-log
  9. log-bin=mysql-bin
  10. server_id=140
  11. character-set-server=utf8
  12. gtid-mode=on
  13. enforce-gtid-consistency=true

从主机处理server_id不同其余配置都一样

(4)启动mysql及修改密码

  1. [root@localhost data]# systemctl start mysql
  2. [root@localhost data]# mysqladmin -p'&)NXfrm#9K7c' password '123456'
  3. mysqladmin: [Warning] Using a password on the command line interface can be insecure.
  4. Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

修改不成功可能是有mysql进程在运行要用kill -9 杀死 

配置mysql一主双从(138 139 140)

(1)master上创建用于主从同步的用户

主138

grant replication slave,replication client on *.* to 'slave'@192.168.88.%' identified by '123456';

(2)配置主从(gtid)

从139 140

  1. mysql [(none)]>change master to
  2. -> master_user='slave',
  3. -> master_password='123456',
  4. -> master_host='192.168.88.138',
  5. -> master_auto_position=1;
  6. Query OK, 0 rows affected, 2 warnings (0.01 sec)
  7. mysql [(none)]>start slave;
  8. Query OK, 0 rows affected (0.00 sec)
  9. mysql [(none)]>show slave status\G
  10. *************************** 1. row ***************************
  11. Slave_IO_State: Waiting for master to send event
  12. Master_Host: 192.168.88.138
  13. Master_User: slave
  14. Master_Port: 3306
  15. Connect_Retry: 60
  16. Master_Log_File: mysql-bin.000002
  17. Read_Master_Log_Pos: 718
  18. Relay_Log_File: relay-log.000002
  19. Relay_Log_Pos: 931
  20. Relay_Master_Log_File: mysql-bin.000002
  21. Slave_IO_Running: Yes
  22. Slave_SQL_Running: Yes

安装配置MHA

(1)在master上进行授权

在所有的mysql结点授权有管理权限的用户可在本地网络中有其他节点上远程访问

grant all on *.* to 'mhaadmin'@'192.168.88.%' identified by '123456';

(2)准备ssh互通环境

每台主机和 Manager 之间都需要ssh实现无密码互连,只有这样,在 Master 出故障时, Manager 才能顺利的连接进去,实现主从切换功能。
  1. #四台一起做
  2. ssh-keygen -f ~/.ssh/id_rsa -P '' -q
  3. ssh-copy-id manager

d55151193ddd407bbfeefe36e2042481.png

 再将公钥文件发给受控主机

  1. scp ~/.ssh/authorized_keys master:~/.ssh/
  2. scp ~/.ssh/authorized_keys slave1:~/.ssh/
  3. scp ~/.ssh/authorized_keys slave2:~/.ssh/

(3)验证结点

  1. [root@manager ~]# for i in master slave1 slave2;do ssh $i hostname;done
  2. master.openlab.com
  3. slave1.openlab.com
  4. slave2.openlab.com

(4)安装MHA包

  1. wget -c https://github.com/yoshinorim/mha4mysqlmanager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
  2. wget -c https://github.com/yoshinorim/mha4mysqlnode/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm
Manager节点需要另外多安装一个包。具体需要安装的内容如下:
MHA Manager服务器需要安装manager和node
MHA的Node依赖于perl-DBD-MySQL,所以配置epel源。

 

  1. #manager
  2. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  3. yum install mha4mysql-*.rpm
  1. 受控机
  2. yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y

(5)manager中配置MHA文件

  1. 创建配置文件目录
  2. mkdir /etc/mha
  3. 创建日志目录
  4. mkdir -p /var/log/mha/app1
  5. vim /etc/mha/app1.cnf

配置文件如下:

  1. [server default] //适用于server1,2,3个server的配置
  2. user=mhaadmin //mha管理用户
  3. password=123456 //mha管理密码
  4. manager_workdir=/var/log/mha/app1 //mha_master自己的工作路径
  5. manager_log=/var/log/mha/app1/manager.log // mha_master自己的日志文件
  6. ssh_user=root // 基于ssh的密钥认证
  7. repl_user=slave //数据库用户名
  8. repl_password=123456 //数据库密码
  9. ping_interval=1 //ping间隔时长
  10. [server1] //节点2
  11. hostname=192.168.88.138 //节点2主机地址
  12. ssh_port=22 //节点2的ssh端口
  13. candidate_master=1 //将来可不可以成为master候选节点/主节点
  14. [server2]
  15. hostname=192.168.88.139
  16. ssh_port=22
  17. candidate_master=1
  18. [server3]
  19. hostname=192.168.88.140
  20. ssh_port=22
  21. candidate_master=1

(6)对四个结点进行检查

在manager上检ssh互相通信配置是否ok

  1. [root@manager app1]# masterha_check_ssh --conf=/etc/mha/app1.cnf
  2. .........
  3. Fri Mar 31 11:18:54 2023 - [info] All SSH connection tests passed successfully.

检查管理的mysql复制集群的连接配置参数是否ok

  1. masterha_check_repl --conf=/etc/mha/app1.cnf
  2. ........
  3. MySQL Replication Health is OK.

(7)启动MHA

  1. [root@manager app1]# 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 &
  2. [1] 2001

查看状态(也可以看日志)

  1. [root@manager app1]# masterha_check_status --conf=/etc/mha/app1.cnf
  2. app1 (pid:2001) is running(0:PING_OK), master:192.168.88.138
  3. #选举了138为主

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/294747
推荐阅读
相关标签
  

闽ICP备14008679号