静态网站什么意思,wordpress图片后加载,网站建设项目推文,黄页网站营销目录
MySQL高可用方案
1、MHA架构#xff08;单主#xff09;
MHA的工作原理
MHA 架构的优点
MHA 架构的缺点
2、MHA架构的部署
1#xff09;关闭防火墙和selinux
2#xff09;分别修改master和slave1#xff0c;slave2的主机名
3#xff09;修改master主库服务…目录
MySQL高可用方案
1、MHA架构单主
MHA的工作原理
MHA 架构的优点
MHA 架构的缺点
2、MHA架构的部署
1关闭防火墙和selinux
2分别修改master和slave1slave2的主机名
3修改master主库服务器的配置文件
4修改slave从库服务器的配置slave1slave2
5在 Master、Slave1、Slave2 节点上都创建两个软链接
6进入master的mysql给slave节点和manage授权
7在master节点查看二进制文件和同步位置点
8在slave1和slave2上执行同步操作并查看数据同步状态
9两个从库必须设置为只读模式
10在主库中创建库创建表插入数据从库测试数据同步
11在所有服务器上安装MHA的依赖环境
12在所有服务器上安装MHA的node组件
13在manage服务器上安装manage组件
14在manage服务器上配置到其他数据库的ssh免密登录
15masterslave1和slave2之间也要互相配置ssh免密登录
16在manage服务器上配置MHA
17创建 MHA 软件目录并拷贝配置文件
18第一次配置需要在 Master 节点上手动开启虚拟IP
19在 manager 节点上测试 ssh 无密码认证
20在 manager 节点上测试 mysql 主从连接情况
21启动MHA
22查看MHA状态查看日志
23模拟故障发生
24关闭 manager 服务的命令
3、MMM架构双主
MMM 的工作原理
MMM架构的优点
MMM架构的缺点
4、MMM架构部署
1首先关闭防火墙和selinux并安装依赖环境所有服务器
2修改master01的配置文件
3讲配置文件复制给其他3台mysql数据库服务器
4其他三台MySQL服务器修改配置文件中的server-id然后重启mysql服务
5配置主主复制
6在从服务器上配置主从复制
7在master01上创建库创建表插入数据master02slave01slave02测试同步情况
8在master01上对mmm进行配置
9修改所有数据库服务器的代理配置文件 mmm_agent.conf
10修改monitor监控服务器上的监控配置文件 mmm_mon.conf
11在所有数据库上为 mmm_agent代理进程和 mmm_moniter监控进程授权
12所有服务器开启mysql-mmm-agent
13在 monitor 服务器上启动 mysql-mmm-monitor
14在monitor 服务器上测试群集
15故障测试
16客户端测试
17slave01和slave02上都可以查看验证 MySQL高可用方案
mysql高可用的九方案MAH架构、MMM架构、MGR架构、Mysql cluster多主、Galera Cluster多主、PXC架构多主、RAID10数据可靠性方案、SAN存储网络、DRBD方案。
本篇文章主要讲述MHA架构和MMM架构
1、MHA架构单主 MySQL MHAMaster High Availability是一种用于 MySQL 数据库的高可用性架构。它的设计目标是确保在主数据库发生故障时能够快速自动地将备库Slave提升为新的主库以保证系统的连续性和可用性。
MHA的工作原理 1. MHA 通过manage监控 MySQL master主节点的状态来实现故障检测和自动故障转移。 2. 当master主节点发生故障时MHA 会自动将其中一个拥有最新数据的slave从节点提升 为新的master主节点。 3. 使其他的slave从节点与新master节点做主从复制操作确保数据库的可用性。
MHA 架构的优点 自动故障切换MHA 能够自动检测主库的故障并快速将备库提升为新的主库减少了手动干预的需要提高了系统的可用性。 实时监测MHA 通过与 Master 节点和 Slave 节点建立 SSH 连接实时监测它们的状态能够及时发现故障并采取相应的措施。 简化配置MHA 提供了简单易用的配置文件可以轻松地配置主库和备库的信息减少了配置的复杂性。 高可扩展性MHA 支持多个备库可以根据需求灵活地扩展系统的容量和性能。
MHA 架构的缺点 配置复杂性尽管 MHA 提供了简化的配置文件但对于不熟悉 MHA 的用户来说配置仍然可能是一项复杂的任务。特别是在涉及多个主库和备库的复杂环境中配置可能变得更加困难。 依赖 SSH 连接MHA 使用 SSH 连接与主库和备库进行通信和监控。这意味着在配置和使用 MHA 时必须确保 SSH 连接的可用性和稳定性。如果 SSH 连接出现问题可能会导致 MHA 无法正常工作。 故障切换过程中的数据同步延迟在故障切换期间MHA 需要将备库提升为新的主库并重新配置其他备库作为新的从库。这个过程可能需要一些时间导致在切换期间存在一定的数据同步延迟。这可能会对某些应用程序的数据一致性产生影响。 依赖 MySQL 复制功能MHA 依赖 MySQL 的复制功能来实现数据的同步和复制。如果 MySQL 的复制功能出现问题可能会导致 MHA 无法正常工作或数据同步不完整。 需要额外的硬件资源为了实现高可用性MHA 需要至少一个备库来作为冗余备份。这意味着需要额外的硬件资源来支持备库的运行和数据复制增加了系统的成本和复杂性。
2、MHA架构的部署
环境
master192.168.3.10 #提前导入mha4mysql-node-0.57.tar.gz
slave1192.168.3.11 #提前导入mha4mysql-node-0.57.tar.gz
slave2192.168.3.12 #提前导入mha4mysql-node-0.57.tar.gz
manage192.168.3.106 #提前导入mha4mysql-node-0.57.tar.gz和mha4mysql-manager-0.57.tar.gz
1关闭防火墙和selinux systemctl stop firewalld.service setenforce 0 2分别修改master和slave1slave2的主机名 master#修改master的主机名 hostnamectl set-hostname mysql-1 slave1#修改slave1的主机名 hostnamectl set-hostname mysql-2 salve2#修改slave2的主机名 hostnamectl set-hostname mysql-3 3修改master主库服务器的配置文件 vim /etc/my.cnf [mysqld] server-id 1 log_bin mysql-bin #开启二进制日志 binlog_format mixed #设置二进制日志类型 log-slave-updates true #允许slave从master复制数据时可以写入到自己的二进制日志 relay-log relay-log-bin #开启中继日志 relay-log-index slave-relay-bin.index #中继日志索引 systemctl restart mysqld #重启mysql服务 4修改slave从库服务器的配置slave1slave2 vim /etc/my.cnf server-id 2 #三台服务器的 server-id 不能一样 log_bin mysql-bin binlog_format mixed log-slave-updates true relay-log relay-log-bin relay-log-index slave-relay-bin.index systemctl restart mysqld 5在 Master、Slave1、Slave2 节点上都创建两个软链接 ln -s /usr/local/mysql/bin/mysql /usr/sbin/ ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/ 6进入master的mysql给slave节点和manage授权 mysql -uroot -p #给slave节点授权 grant replication slave on *.* to myslave192.168.3.% identified by 123123; #给manage授权 grant all privileges on *.* to mha192.168.3.% identified by abc123; #防止从库通过主机名连接主库mastersalve1salve2上均设置 grant all privileges on *.* to mhamysql1 identified by abc123; grant all privileges on *.* to mhamysql2 identified by abc123; grant all privileges on *.* to mhamysql3 identified by abc123; flush privileges; #使授权立即生效 7在master节点查看二进制文件和同步位置点 master show master status; 8在slave1和slave2上执行同步操作并查看数据同步状态 change master to master_host192.168.3.10,master_usermyslave,master_password123123, master_log_filemysql-bin.000001,master_log_pos1743; start slave; show slave status\G 9两个从库必须设置为只读模式 set global read_only1; 10在主库中创建库创建表插入数据从库测试数据同步 master show databases; create database test; use test; create table t1(id int, name varchar(10), age int,primary key(id)); desc t1; insert into t1 values(1,张三,18),(2,李四,19),(3,王五,20); select * from t1; slave1slave2 show databases; select * from test.t1; 11在所有服务器上安装MHA的依赖环境 yum install epel-release --nogpgcheck -y #首先安装epel源 yum install -y perl-DBD-MySQL \ #其次安装依赖环境 perl-Config-Tiny \ perl-Log-Dispatch \ perl-Parallel-ForkManager \ perl-ExtUtils-CBuilder \ perl-ExtUtils-MakeMaker \ perl-CPAN 12在所有服务器上安装MHA的node组件 cd /opt tar zxvf mha4mysql-node-0.57.tar.gz cd mha4mysql-node-0.57 perl Makefile.PL make make install 13在manage服务器上安装manage组件 tar zxvf mha4mysql-manager-0.57.tar.gz cd mha4mysql-manager-0.57 perl Makefile.PL make make install 14在manage服务器上配置到其他数据库的ssh免密登录 ssh-keygen -t rsa #一路按回车键 ssh-copy-id 192.168.3.10 ssh-copy-id 192.168.3.11 ssh-copy-id 192.168.3.12 15masterslave1和slave2之间也要互相配置ssh免密登录 master ssh-keygen -t rsa ssh-copy-id 192.168.3.11 ssh-copy-id 192.168.3.12 slave1 ssh-keygen -t rsa ssh-copy-id 192.168.3.10 ssh-copy-id 192.168.3.12 slave2 ssh-keygen -t rsa ssh-copy-id 192.168.3.10 ssh-copy-id 192.168.3.11 16在manage服务器上配置MHA #在 manager 节点上复制相关脚本到/usr/local/bin 目录 cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin #复制故障切换脚本 cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin #修改故障切换脚本 vim /usr/local/bin/master_ip_failover #!/usr/bin/env perl use strict; use warnings FATAL all; use Getopt::Long; my ( $command, $ssh_user, $orig_master_host, $orig_master_ip, $orig_master_port, $new_master_host, $new_master_ip, $new_master_port ); #############################添加内容部分######################################### #指定vip的地址 my $vip 192.168.3.254; #指定vip的广播地址 my $brdc 192.168.3.255; #指定vip绑定的网卡 my $ifdev ens33; #指定vip绑定的虚拟网卡序列号 my $key 1; #代表此变量值为ifconfig ens33:1 192.168.3.254 my $ssh_start_vip /sbin/ifconfig ens33:$key $vip; #代表此变量值为ifconfig ens33:1 192.168.3.254 down my $ssh_stop_vip /sbin/ifconfig ens33:$key down; #指定退出状态码为0 my $exit_code 0; #my $ssh_start_vip /usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key;/usr/sbin/arping -q -A -c 1 -I $ifdev $vip;iptables -F;; #my $ssh_stop_vip /usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key; ################################################################################## GetOptions( commands \$command, ssh_users \$ssh_user, orig_master_hosts \$orig_master_host, orig_master_ips \$orig_master_ip, orig_master_porti \$orig_master_port, new_master_hosts \$new_master_host, new_master_ips \$new_master_ip, new_master_porti \$new_master_port, ); exit main(); sub main { print \n\nIN SCRIPT TEST$ssh_stop_vip$ssh_start_vip\n\n; if ( $command eq stop || $command eq stopssh ) { my $exit_code 1; eval { print Disabling the VIP on old master: $orig_master_host \n; stop_vip(); $exit_code 0; }; if ($) { warn Got Error: $\n; exit $exit_code; } exit $exit_code; } elsif ( $command eq start ) { my $exit_code 10; eval { print Enabling the VIP - $vip on the new master - $new_master_host \n; start_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; 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 --commandstart|stop|stopssh|status --orig_master_hosthost --orig_master_ipip --orig_master_portport --new_master_hosthost --new_master_ipip --new_master_portport\n; } 17创建 MHA 软件目录并拷贝配置文件 #创建相关目录masterslave1salve2manage mkdir -p /opt/mysql-mha/mha-node #manager节点 mkdir -p /opt/mysql-mha/mha #编写配置文件 vim /opt/mysql-mha/mysql_mha.cnf [server default] manager_log/opt/mysql-mha/manager.log manager_workdir/opt/mysql-mha/mha master_binlog_dir/usr/local/mysql/data master_ip_failover_script/usr/local/bin/master_ip_failover master_ip_online_change_script/usr/local/bin/master_ip_online_change usermha passwordmanager port3306 ping_interval1 remote_workdir/opt/mysql-mha/mha-node repl_usermyslave repl_password123123 secondary_check_script/usr/local/bin/masterha_secondary_check -s 192.168.3.11 -s 192.168.3.12 shutdown_script ssh_userroot [server1] hostname192.168.3.10 port3306 [server2] candidate_master1 check_repl_delay0 hostname192.168.3.11 port3306 [server3] hostname192.168.3.12 port3306 18第一次配置需要在 Master 节点上手动开启虚拟IP master /sbin/ifconfig ens33:1 192.168.3.254/24 19在 manager 节点上测试 ssh 无密码认证 masterha_check_ssh -conf/opt/mysql-mha/mysql_mha.cnf 20在 manager 节点上测试 mysql 主从连接情况 masterha_check_repl -conf/opt/mysql-mha/mysql_mha.cnf 21启动MHA nohup masterha_manager \ --conf/opt/mysql-mha/mysql_mha.cnf \ --remove_dead_master_conf \ --ignore_last_failover /dev/null /var/log/mha_manager.log 21 22查看MHA状态查看日志 masterha_check_status --conf/opt/mysql-mha/mysql_mha.cnf #查看MHA状态 cat /opt/mysql-mha/manager.log | grep current master #查看日志 23模拟故障发生 MHA上日志监控 tail -f /opt/mysql-mha/manager.log master上停止mysql服务 systemctl stop mysqld 24关闭 manager 服务的命令 masterha_stop --conf/opt/mysql-mha/mysql_mha.cnf 或者 直接采用 kill 进程 ID 的方式关闭。 3、MMM架构双主
MySQL 高可用方案之 MMMMulti-Master Replication Manager是一种常用的解决方案用于实现 MySQL 数据库的高可用性和负载均衡。
MMM 基于 MySQL 的复制机制通过在多个 MySQL 服务器之间进行主从复制实现了数据的同步和备份。它的主要特点是可以实现多主复制即多个 MySQL 服务器可以同时作为主节点接收写操作并将这些写操作同步到其他从节点上。
MMM 的工作原理 MMM 通过监控 MySQL master的状态来实现故障检测和自动故障转移。当一个master主节点发生故障时MMM 会自动将VIP转到备master节点上确保数据库的可用性。 MMM 还可以根据负载情况自动进行负载均衡。它可以根据每个节点的负载情况将读操作分发到不同的节点上从而提高系统的整体性能。 MMM 还提供了一些管理工具可以方便地进行节点的添加、删除和配置修改等操作。
MMM架构的优点 高可用性MMM 通过自动故障检测和故障转移机制可以快速将一个从节点提升为新的主节点从而实现数据库的高可用性减少系统的停机时间。 负载均衡MMM 可以根据节点的负载情况将读操作分发到不同的节点上从而实现负载均衡提高系统的整体性能。 简单易用MMM 提供了一些管理工具可以方便地进行节点的添加、删除和配置修改等操作使得系统的管理和维护变得简单易用。
MMM架构的缺点 数据一致性由于 MMM 采用的是异步复制机制主节点和从节点之间存在一定的延迟可能导致数据的不一致。在某些场景下可能需要额外的措施来确保数据的一致性。 配置复杂性MMM 的配置相对复杂需要对 MySQL 的复制机制和 MMM 的工作原理有一定的了解。在配置过程中需要注意各个节点的配置一致性和正确性。
4、MMM架构部署
环境
master01db1192.168.3.10 # 提前导入 mysql5.7、mysql-mmm master02db2192.168.3.11 # 提前导入mysql5.7、mysql-mmm slave01db3192.168.3.12 # 提前导入 mysql5.7、mysql-mmm slave02db4192.168.3.13 # 提前导入 mysql5.7、mysql-mmm monitor 192.168.80.106 # 提前导入mysql-mmm
1首先关闭防火墙和selinux并安装依赖环境所有服务器 systemctl stop firewalld.service setenforce 0 #下载aliyun的repo源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum -y install epel-release #安装epel源 yum -y install mysql-mmm* #安装mmm 2修改master01的配置文件 vim /etc/my.cnf ...... [mysqld] ...... server-id 1 #每台 Mysql 主机的 server-id 不能相同 log-error/usr/local/mysql/data/mysql_error.log #错误日志 general_logON #通用查询日志 general_log_file/usr/local/mysql/data/mysql_general.log slow_query_logON #慢查询日志 slow_query_log_filemysql_slow_query.log long_query_time5 binlog-ignore-dbmysql,information_schema #不需要同步的库名 log_binmysql_bin #开启二进制日志用于主从数据复制 log_slave_updatestrue #允许slave从master复制数据时可以写入到自己的二进制日志 sync_binlog1 #双1设置MySQL 在每写一次二进制日志时都会同步到磁盘中去 innodb_flush_log_at_trx_commit1 #双1设置每次事务提交时MySQL都会把缓存的数据写入日志文件并且刷到磁盘中去 auto_increment_increment2 #自增字段一次递增多少 auto_increment_offset1 3讲配置文件复制给其他3台mysql数据库服务器 scp /etc/my.cnf root192.168.3.11:/etc/ scp /etc/my.cnf root192.168.3.12:/etc/ scp /etc/my.cnf root192.168.3.13:/etc/ 4其他三台MySQL服务器修改配置文件中的server-id然后重启mysql服务 master02 vim /etc/my.cnf server-id 2 systemctl restart mysqld.service slave01 vim /etc/my.cnf server-id 3 systemctl restart mysqld.servicel slave02 vim /etc/my.cnf server-id 4 systemctl restart mysqld.service 5配置主主复制 #在master01和master02服务器上为彼此授权 grant replication slave on *.* to replication192.168.3.% identified by 123123; show master status; #在master01和master02服务器上查看日志文件名称和同步点 master01 change master to master_host192.168.3.11,master_userreplication,master_password123123,master_log_filemysql_bin.000001,master_log_pos459; start slave; show slave status\G master02 change master to master_host192.168.3.10,master_userreplication,master_password123123,master_log_filemysql_bin.000001,master_log_pos459; start slave; show slave status\G 6在从服务器上配置主从复制 change master to master_host192.168.3.10,master_userreplication,master_password123123,master_log_filemysql_bin.000001,master_log_pos459; start slave; show slave status\G 7在master01上创建库创建表插入数据master02slave01slave02测试同步情况 master01 master show databases; create database test; use test; create table t1(id int, name varchar(10), age int,primary key(id)); desc t1; insert into t1 values(1,张三,18),(2,李四,19),(3,王五,20); select * from t1; master02slave01slave02 show databases; select * from test.t1; 8在master01上对mmm进行配置 cd /etc/mysql-mmm/ vim mmm_common.conf …… host default cluster_interface ens33 …… replication_user replication replication_password 123123 agent_user mmm_agent agent_password 123123 host db1 ip 192.168.3.10 mode master peer db2 /host host db2 ip 192.168.3.11 mode master peer db1 /host host db3 ip 192.168.3.12 mode slave /host host db4 ip 192.168.3.13 mode slave /host role writer hosts db1, db2 ips 192.168.3.254 mode exclusive #只有一个 host 可以进行写操作模式 /role role reader hosts db3, db4 ips 192.168.3.154, 192.168.3.155 mode balanced #多个 slave 主机可以进行读操作模式 /role 9修改所有数据库服务器的代理配置文件 mmm_agent.conf vim /etc/mysql-mmm/mmm_agent.conf this db1 #根据不同的主机分别修改为 db1,db2,db3,db4 10修改monitor监控服务器上的监控配置文件 mmm_mon.conf vim /etc/mysql-mmm/mmm_mon.conf include mmm_common.conf monitor ..... ping_ips 192.168.3.10,192.168.3.11,192.168.3.12,192.168.3.13 #指定所有数据库服务器的 IP auto_set_online 10 #指定自动上线时间 /monitor host default monitor_user mmm_monitor #指定 mmm_monitor 的用户名 monitor_password 123123 #指定 mmm_monitor 的密码 /host 11在所有数据库上为 mmm_agent代理进程和 mmm_moniter监控进程授权 #为 mmm_agent代理进程授权所有MySQL服务器上 grant super, replication client, process on *.* to mmm_agent192.168.3.% identified by 123123; #为 mmm_moniter监控进程授权所有MySQL服务器上 grant replication client on *.* to mmm_monitor192.168.3.% identified by 123123; flush privileges; #授权立即生效 12所有服务器开启mysql-mmm-agent systemctl start mysql-mmm-agent.service 13在 monitor 服务器上启动 mysql-mmm-monitor systemctl start mysql-mmm-monitor.service 14在monitor 服务器上测试群集 #查看各节点的情况 mmm_control show #检测监控功能是否都完善需要各种OK mmm_control checks all #指定绑定 VIP 的主机 mmm_control move_role writer db2 15故障测试 #停止 master02 确认 VIP 是否移动到 master01 上。 注意master01 主服务器恢复服务后不会抢占 mater02 systemctl stop mysqld.service 16客户端测试 #在 master01 服务器上为 monitor 服务器地址授权登录 grant all on *.* to abc192.168.3.106 identified by 123123; flush privileges; #在 monitor 服务器上使用 VIP 登录 yum install -y mariadb-server mariadb systemctl start mariadb.service mysql -uabc -p -h 192.168.3.254 #创建数据测试同步情况 create database abc; 17slave01和slave02上都可以查看验证 show databases; select * from abc.a1;