DataBases
简介
MariaDB
MySQL
数据类型
创建表
索引 index
主键 primary key
外键 foreign key
数据导入与导出
where条件判断
用户授权与密码
数据备份与恢复
数据热备
主从同步
读写分离
多实例
分库分表
集群-MHA
集群-PXC
存储引擎
本文档使用 MrDoc 发布
-
+
首页
集群-MHA
MySQL 集群是一种高可用性和可伸缩性的解决方案,将多个 MySQL 服务器组成一个集群,提供数据的冗余备份和负载均衡。在 MySQL 集群中,数据可以在多个节点之间进行同步,并且当一个节点发生故障时,集群可以自动切换到其他可用节点。 MHA(Master High Availability)是一个开源软件,旨在提供MySQL数据库的高可用性解决方案。通过自动监控和管理MySQL主从复制架构,实现数据库的故障切换和自动故障恢复。MHA Manager作为MHA的一部分,提供了一个集中化的管理界面,用于配置、监控和管理MySQL数据库集群。 MHA组成:MHA Manager(管理节点)、MHA Node(数据节点) 实验拓扑(基础环境先做好) ```asp 客户机:192.168.1.50 集群管理服务器:192.168.1.57(需要安装依赖环境perl-*)无密钥链接51、52、53 主数据库服务器:192.168.1.51(需要安装依赖环境perl-*)无密钥链接52、53、配置为主数据库 从数据库服务器:192.168.1.52(需要安装依赖环境perl-*)无密钥链接51、53、配置为从数据库 从数据库服务器:192.168.1.53(需要安装依赖环境perl-*)无密钥链接52、53、配置为从数据库 ``` 集群设备设置ssh无密钥链接 ```asp 57————————————————————————————————————————————————————————————— ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.51 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.52 51————————————————————————————————————————————————————————————— ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.52 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.57 52————————————————————————————————————————————————————————————— ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.51 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.57 ``` 在数据库51/52部署互为主从同步 ```asp [mysqld] server-id=51 log-bin=master51 ———————————————————————————————————————————————————————————————— [mysqld] server-id=52 log-bin=master52 ``` 在数据库51上添加VIP为100 ```asp ifconfig ens33:1 192.168.1.100/24 ``` 在数据库52、53添加同步数据的链接用户done,启动binlog日志文件 ```asp grant replication slave on *.* to done@'%' identified by '123456'; ``` 在数据库51、52、53服务器添加授权用户root(已经部署了主从同步,在主服务器配置自动同步至从服务器) ```asp grant all on *.* to root@'%' identified by '123456'; ``` 在数据库51、52、53服务器设置禁止自动删除本机的中继日志文件 ```asp vim /etc/my.cnf ``` ```asp relay_log_purge=0 ``` 在数据库51、52、53服务器启用半同步复制模式 ```asp vim /etc/my.cnf ``` ```asp plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" rpl_semi_sync_master_enabled=1 rpl_semi_sync_slave_enabled=1 ``` 在数据库51、52、53服务器部署mha_node包 ```asp yum -y install perl-* #安装perl环境 wget https://www.cddone.com/share/tar/mha4mysql.tar.gz #下载安装包 tar -xvf mha4mysql-tar.gz #解压 cd mha4mysql #进入目录 rpm -ivh perl-* #安装本地包中的perl包 rpm -ivh mha4mysql-node-0.57-0.el7.noarch.rpm #安装node ``` 在集群管理服务器57上部署MHA ```asp yum -y install perl-* #安装perl环境 wget https://www.cddone.com/share/tar/mha4mysql.tar.gz #下载安装包 tar -xvf mha4mysql-tar.gz #解压 cd mha4mysql #进入目录 rpm -ivh perl-* #安装本地包中的perl包 yum -y install mha4mysql-node-0.57-0.el7.noarch.rpm #安装node tar -zxf mha4mysql-manager-0.57.tar.gz #解压manager包 cd mha4mysql-manager-0.57 #进入manage软吗 perl Makefile.PL #编译 make && make install #安装 # masterha_ #编译成功出现如下命令 masterha_check_repl masterha_conf_host masterha_master_switch masterha_check_ssh masterha_manager masterha_secondary_check masterha_check_status masterha_master_monitor masterha_stop ``` 在集群管理服务器57上修改MHA主配置文件 ```asp mkdir /etc/mha #创建主配置文件目录 cp samples/conf/app1.cnf /etc/mha/ #拷贝主配置文件模板 vim /etc/mha/app1.cnf #编辑配置文件 ———————————————————————————————————————————————————————————————————————————————————————— [server default] manager_workdir=/etc/mha //指定服务路径工作目录 manager_log=/etc/mha/manager.log //指定日志文件名称、存放路径 master_ip_failover_script=/etc/mha/master_ip_failover //指定监控脚本存放的路径 ssh_user=root //指定链接数据库时使用的ssh用户(设置了无密码登录不需要密码) ssh_port=22 //指定ssh端口 repl_user=done //指定主服务器给从服务器授权同步数据时的用户 repl_password=123456 //指定数据库授权用户密码 user=root //指定监控时链接的用户 password=123456 //指定监控时链接的密码 [server1] hostname=192.168.1.51 //指定主机1的IP port=3306 //指定使用的端口 candidate_master=1 //开启竞选 [server2] hostname=192.168.1.52 //指定主机2的IP port=3306 //指定使用的端口 candidate_master=1 //开启竞选 ``` 在集群管理服务器57上修改故障检测脚本 ```asp cp samples/scripts/master_ip_failover /etc/mha/ #拷贝监控脚本模板 chmod +x /etc/mha/master_ip_failover #添加执行权限 vim /etc/mha/master_ip_failover #修改脚本 ———————————————————————————————————————————————————————————————————————————— #!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use Getopt::Long; use MHA::DBHelper; my ( $command, $ssh_user, $orig_master_host, $orig_master_ip, $orig_master_port, $new_master_host, $new_master_ip, $new_master_port, $new_master_user, $new_master_password ); my $vip = '192.168.1.100/24'; #virtual IP my $key = '1'; my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip"; my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down"; GetOptions( 'command=s' => \$command, 'ssh_user=s' => \$ssh_user, 'orig_master_host=s' => \$orig_master_host, 'orig_master_ip=s' => \$orig_master_ip, 'orig_master_port=i' => \$orig_master_port, 'new_master_host=s' => \$new_master_host, 'new_master_ip=s' => \$new_master_ip, 'new_master_port=i' => \$new_master_port, 'new_master_user=s' => \$new_master_user, 'new_master_password=s' => \$new_master_password, ); exit &main(); sub main { if ( $command eq "stop" || $command eq "stopssh" ) { # $orig_master_host, $orig_master_ip, $orig_master_port are passed. # If you manage master ip address at global catalog database, # invalidate orig_master_ip here. my $exit_code = 1; eval { # updating global catalog, etc $exit_code = 0; }; if ($@) { warn "Got Error: $@\n"; exit $exit_code; } exit $exit_code; } elsif ( $command eq "start" ) { # all arguments are passed. # If you manage master ip address at global catalog database, # activate new_master_ip here. # You can also grant write access (create user, set read_only=0, etc) here. my $exit_code = 10; eval { print "Enabling the VIP - $vip on the new master - $new_master_host \n"; &start_vip(); &stop_vip(); $exit_code = 0; }; if ($@) { warn $@; exit $exit_code; } exit $exit_code; } elsif ( $command eq "status" ) { print "Checking the Status of the script.. OK \n"; `ssh $ssh_user\@$orig_master_host \" $ssh_start_vip \"`; exit 0; } else { &usage(); exit 1; } } sub start_vip() { `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`; } # A simple system call that disable the VIP on the old_master sub stop_vip() { `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`; } sub usage { print "Usage: master_ip_failover --command=start|stop|stopssh|status -- orig_master_host=host --orig_master_ip=ip --orig_master_port=port -- new_master_host=host --new_master_ip=ip --new_master_port=port\n"; } ``` 在集群管理服务器57上测试MHA调用ssh链接51、52、53数据库是否正常 ```asp masterha_check_ssh --conf=/etc/mha/app1.cnf ``` 在集群管理服务器57上测试MHA检查51、52、53数据库的主从同步服务是否正常 ```asp masterha_check_repl --conf=/etc/mha/app1.cnf ``` 在集群管理服务器57上启动MHA服务 ```asp --remove_dead_master_conf:删除宕机主库的配置 --ignore_last_failover:忽略*.health文件,任何时候发生故障都切换 masterha_check_status --conf=/etc/mha/app1.cnf #查看mha状态 masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover #启动mha服务 ``` 在数据库51服务器上创建访问库、授权访问用户(自动同步至52、53从服务器) ```asp create database db9; grant select,insert on db9.* to dong@'%' identified by '123456'; ``` 在客户50服务器上访问数据库1.100登陆集群(vip在192.168.1.51数据库上) 在51数据库服务器上停止数据库服务模拟故障,mha自动切换,客户端依然正常访问数据(vip在192.168.1.52数据库上) ```asp mysql -h192.168.1.100 -udong -p'123456' ``` 修复故障服务器51添加为52得从数据库服务器 ```asp systemctl start mysqld #启动修复后得51得数据库 mysql -uroot -p'123456' #登录 show slave status; #查看并不是当前52主数据库得从 change master to master_host="192.168.1.52",master_user="done",master_password="JCss%6!8",master_log_file="master52.000004",master_log_pos=154; start slave; #启动为从数据库 ``` 在集群管理服务器57上将51添加回集群 ```asp vim /etc/mha/app1.cnf #修改主配置文件添加51 [server1] candidate_master=1 hostname=192.168.1.51 port=3306 masterha_epl --conf=/etc/mha/app1.cnf #检测主从是都正常 ```
done
2024年5月14日 10:10
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码