天天资讯:数据库高可用MHA和PXC集群搭建 存储引擎
MHA软件介绍
【资料图】
MHA(Master High Availability)
由日本DeNA公司youshimaton开发
是一套优秀的实现MySQL高可用的解决方案
数据库的自动故障切换操作能做到在0~30秒之内完成
MHA能确保在故障切换过程中最大限度保证数据的一致性,以达到真正意义上的高可用
MHA集群缺点总结:
必须要有vip地址
宕机的主服务器需要手动添加到集群里,还需要手动同步宕机期间的数据
管理服务发现主服务器宕机后,会调用故障切换脚本,
把vip地址部署在新的主数据库服务器上。管理服务会
自动停止,需要手动启动管理服务器,才能监视新的主数据服务器
故障切换期间会有数据丢失的情况
软件有2部分组成
1 管理端软件(管理节点) : 安装管理集群主机上的软件
2 数据端软件(数据节点) : 安装在数据库服务器上的软件
MHA集群的工作过程:
由Manager定时探测集群中的master节点
当master故障时,Manager自动将拥有最新数据的slave提升为新的master
(如果有多个从的话,剩下的从会自动更新为新主服务器的从主机)
配置MHA集群,具体步骤如下:
第一步:集群环境准备 (在3台数据库服务器都要做的配置)
1)公共配置(3台数据库服务器都要配置)
#启用binlog日志
#开启半同步复制模式
#禁止删除本机的中继日志文件
#重启数据库服务
#添加从服务器拷贝sql命令时连接使用的用户
三台公共步骤
vim /etc/my.cnf
[mysqld]
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
relay_log_purge=0
server_id=51
log_bin=master51
:wq
[root@host51 ~]# mysql -uroot -p123qqq...A
mysql> grant replication slave on *.* to repluser@"%" Identified by "123qqq...A";
mysql> exit;
2)配置ssh免密登录
2.1 所有数据库服务器之间可以彼此免密登录
3)配置MySQL 一主多从 同步结构
#配置主数据库服务器
1 启用binlog日志 (公共配置已经配置了)
2 用户授权(公共配置已经配置了)
3 查看日志信息
[root@host51 ~]# mysql -uroot -p123qqq...A -e 'show master status'
#配置从数据库服务器 192.168.4.52
1 指定server_id 并重启数据库服务 (公共配置已经做了)
2 确保数据一致(如果一样就不用做了)
3 指定主服务器信息
[root@host52 ~]# mysql -uroot -p123qqq...A
mysql> change master to master_host="192.168.4.51",master_user="repluser",
master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=441;
4 启动slave进程
MySQL>start slave;
5 查看状态 (IO线程和 SQL线程都是yes状态)
mysql> show slave status \G
#配置从数据库服务器 192.168.4.53
1 指定server_id 并重启数据库服务(公共配置已经做了)
2 确保数据一致(如果一样就不用做了)
3 指定主服务器信息
[root@host53 ~]# mysql -uroot -p123qqq...A
mysql> change master to master_host="192.168.4.51",master_user="repluser",
master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=441;
4 启动slave进程
MySQL>start slave;
5 查看状态 (IO线程和 SQL线程都是yes状态)
mysql> show slave status \G
管理主机
#安装依赖软件
cd mha-soft-student/
yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
yum -y install perl-*.rpm
yum -y install perl-ExtUtils-* perl-CPAN*
tar -xf mha4mysql-manager-0.56.tar.gz
cd mha4mysql-manager-0.56/
[root@mgm57 mha4mysql-manager-0.56]# perl Makefile.PL
*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies...
[Core Features]
- DBI ...loaded. (1.627)
- DBD::mysql ...loaded. (4.023)
- Time::HiRes ...loaded. (1.9725)
- Config::Tiny ...loaded. (2.14)
- Log::Dispatch ...loaded. (2.41)
- Parallel::ForkManager ...loaded. (1.18)
- MHA::NodeConst ...loaded. (0.56)
*** Module::AutoInstall configuration finished.
Checking if your kit is complete...
Looks good
Writing Makefile for mha4mysql::manager
Writing MYMETA.yml and MYMETA.json
[root@mgm57 mha4mysql-manager-0.56]# make && make install
2) 了解相关管理命令
[root@mgm57 mha4mysql-manager-0.56]# masterha_ 按2次tab键列出所有命令
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
[root@mgm57 mha4mysql-manager-0.56]#
3) 创建并编辑管理服务的主配置文件 (!!!重要!!!)
3.1 创建工作目录
[root@mgm57 ~]# mkdir /etc/mha
3.2 拷贝模板文件创建主配置文件
[root@mgm57 mha-soft-student]# cd mha4mysql-manager-0.56
[root@mgm57 mha4mysql-manager-0.56]# cp samples/conf/app1.cnf /etc/mha/
3.3 编辑主配置文件
说明:模版文件是个半成品 需要根据环境准备完善
[root@mgm57 ~]# vim /etc/mha/app1.cnf (没有第4台数据库服务器所有把[server4]删除)
[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_port=22
repl_user=repluser
repl_password=123qqq...A
user=plj
password=123qqq...A
#定义监视的数据库服务器
[server1]
hostname=192.168.4.51
port=3306
candidate_master=1
[server2]
hostname=192.168.4.52
port=3306
candidate_master=1
[server3]
hostname=192.168.4.53
port=3306
candidate_master=1
:wq
4) 创建故障切换脚本
创建脚本并指定vip地址部署在哪块网卡上
[root@mgm57 mha-soft-student]# cp master_ip_failover /etc/mha/
[root@mgm57 mha-soft-student]# chmod +x /etc/mha/master_ip_failover
[root@mgm57 mha-soft-student]# vim +35 /etc/mha/master_ip_failover
my $vip = '192.168.4.100/24'; # Virtual IP
my $key = "1";
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
把故障切换脚本里指定的vip地址
配置在当前主从结构种的主数据库服务器 主机上
[root@host51 ~]# ifconfig eth0:1 192.168.4.100/24
[root@host51 ~]# ifconfig eth0:1
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.4.100 netmask 255.255.255.0 broadcast 192.168.4.255
ether 52:54:00:98:33:28 txqueuelen 1000 (Ethernet)
2)安装软件(3台数据库器软件都要安装)
#先安装依赖
[root@host51 ~]# cd mha-soft-student/
[root@host51 mha-soft-student]# yum -y install perl-*.rpm
#在安装主软件
[root@host51 mha-soft-student]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
3) 添加监控用户
只需在master服务器添加 在slave服务器查看
[root@host51 ~]# mysql -uroot -p123qqq...A
mysql> grant all on *.* to plj@"%" identified by "123qqq...A";
mysql> exit;
测试配置,在管理主机mgm57 如下测试:
1) 测试ssh免密登录配置
[root@mgm57 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf
Sat Nov 20 16:31:08 2021 - [info] All SSH connection tests passed successfully. #成功提示
2)测试主从同步配置
[root@mgm57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
MySQL Replication Health is OK. #成功提示
启动管理服务管理主机
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf \
--ignore_last_failover 2> /dev/null &
[root@mgm57 ~]# jobs
[1]+ 运行中 nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
[root@mgm57 ~]# masterha_check_status --conf=/etc/mha/app1.cnf;
app1 (pid:1977) is running(0:PING_OK), master:192.168.4.51
[root@mgm57 ~]#
[root@host51 ~]# ifconfig eth0:1
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.4.100 netmask 255.255.255.0 broadcast 192.168.4.255
ether 52:54:00:98:33:28 txqueuelen 1000 (Ethernet)
PXC集群
1.1 PXC介绍
Percona XtraDB Cluster(简称PXC)
是基于Galera的MySQL高可用集群解决方案
Galera Cluster是Codership公司开发的一套免费开源的高可用方案
PXC集群主要由两部分组成:
Percona Server with XtraDB和Write Set Replication patches(同步、多主复制插件)
官网http://galeracluster.com
1.2 pxc集群特点
1、数据强一致性、无同步延迟
2、没有主从切换操作,无需使用虚拟IP
3、支持InnoDB存储引擎
4、多线程复制
5、部署使用简单
6、支持节点自动加入,无需手动拷贝数据
1.3 相关端口号
3306 数据库服务端口
4444 SST 端口
4567 集群通信端口
4568 IST 端口
SST State Snapshot Transfer 全量同步
IST Incremental State Transfer 增量同步
二配置pxc集群
第1步:安装软件 (3台主机都要安装)
必须按照顺序安装 因为软件之间有依赖
cd pxc/
yum -y install libev-4.15-1.el6.rf.x86_64.rpm
yum -y install percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm
yum -y install qpress-1.1-14.11.x86_64.rpm
tar -xf Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar
yum -y install Percona-XtraDB-Cluster-*.rpm
第2步:修改配置文件
2.1 指定集群中主机的server_id 修改 mysqld.cnf文件
2.2 指定集群信息 修改 wsrep.cnf文件
#修改71主机的server_id
vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
server_id=71
#修改72主机的server_id
vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
server_id=72
#修改73主机的server_id
vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
server_id=73
#修改71主机的wsrep.cnf 文件
]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
8 wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73
25 wsrep_node_address=192.168.4.71
27 wsrep_cluster_name=pxc-cluster
30 wsrep_node_name=pxcnode71
39 wsrep_sst_auth="sstuser:123qqq...A"
:wq
#修改72主机的wsrep.cnf 文件
]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
8 wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73
25 wsrep_node_address=192.168.4.72
27 wsrep_cluster_name=pxc-cluster
30 wsrep_node_name=pxcnode72
39 wsrep_sst_auth="sstuser:123qqq...A"
:wq
#修改73主机的wsrep.cnf 文件
]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
8 wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73
25 wsrep_node_address=192.168.4.73
27 wsrep_cluster_name=pxc-cluster
30 wsrep_node_name=pxcnode73
39 wsrep_sst_auth="sstuser:123qqq...A"
:wq
第3步:初始化集群
说明:在任意1台服务器上执行初始化集群操作都可以(仅需要执行一遍)
统一在71 主机执行 ,具体步骤如下
1、启动服务
2、使用初始密码连接服务
3、添加授权用户sstuser
4、查看数据库服务器端口 3306
5、查看集群端口4567
6、管理员root 登录 建库表存储记录
[root@pxcnode71 ~]# systemctl start mysql@bootstrap.service 初始化集群
[root@pxcnode71 ~]# ls /var/lib/mysql 查看数据数据库文件列表 有文件说明成功
auto.cnf gvwstate.dat mysqld_safe.pid pxcnode71-bin.000002
ca-key.pem ib_buffer_pool mysql.sock pxcnode71-bin.index
ca.pem ibdata1 mysql.sock.lock server-cert.pem
client-cert.pem ib_logfile0 performance_schema server-key.pem
client-key.pem ib_logfile1 private_key.pem sys
galera.cache ibtmp1 public_key.pem xb_doublewrite
grastate.dat mysql pxcnode71-bin.000001
[root@pxcnode71 ~]# netstat -utnalp | grep 3306 #查看数据库服务端口
tcp6 0 0 :::3306 :::* LISTEN 5359/mysqld
[root@pxcnode71 ~]#
[root@pxcnode71 ~]# netstat -utnalp | grep 4567 #查看集群端口
tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 5359/mysqld
[root@pxcnode71 ~]# grep password /var/log/mysqld.log 查看管理员初始化密码
2021-11-22T02:49:33.621967Z 1 [Note] A temporary password is generated for root@localhost: UfjF5UQGb/fq
[root@pxcnode71 ~]# mysql -uroot -p'UfjF5UQGb/fq' 初始密码登录
mysql> alter user root@"localhost" identified by "123456"; 强制修改密码
mysql> exit 断开连接
[root@pxcnode71 ~]# mysql -uroot -p123456 使用修改后的密码登录
mysql> grant all on *.* to sstuser@"localhost" identified by "123qqq...A"; 添加全量同步用户sstuser
Query OK, 0 rows affected, 1 warning (0.10 sec)
错误统一解决办法:
1、查看mysql服务的父进程pid 通过kill -9 杀死父进程
]# which pstree || yum -y install psmisc
]# pstree -p | grep mysqld
]# kill -9 pid号
2、清空数据库目录 rm -rf /var/lib/mysql/*
3、检查 mysqld.cnf 和 wsrep.cnf 文件的配置项目
4、检查 防火墙和 selinux服务关闭了吗
如果初始集群失败,就重新执行集群初始化
如果启动MySQL服务错误,就重新执行启动mysql服务
存储引擎
MySQL服务软件自带的功能程序
当对表里的数据做select 或insert 访问时,
会根据表使用的存储引擎对数据做处理。不同的存储引擎有不同的功能和数据存储方式。
作为可插拔式的组件提供
MySQL 5.0/5.1 (MyISAM)
MySQL 5.5/5.6 (InnoDB)
1)MySQL服务体系结构 (mysql服务的功能分类)
1 管理工具: 安装MySQL服务软件后,提供的管理命令
2连接池:验证客户端连接时使用的用户和密码是否正确 同时验证数据库服务器是否有mysqld进程相应连接
3 SQL接口: 把用户执行的SQL命令传递给本机的mysqld 进程
4分析器:检查SQL命令的语句及对数据的访问权限
5优化器:对要执行的 SQL命令做优化(是内存自动功能程序)
6查询缓存:划分出一定的物理内存空间给MySQL服务存储查找过的数据。
7存储引擎:当对表里的数据做查询(select) 或写操作(insert /update /delete)会调用存储引擎对表中的数据做处理,至于如何处理取决表使用的存储引擎的功能
8文件系统:通常指的就是电脑的硬盘
2)MySQL服务的工作过程
2.1 处理查询select访问的工作过程
第1步: 客户端向服务器发起连接请求
第2步: 服务器接收到客户端连接请求并响应
第3步:如果客户端执行的selcet 访问,先在查询缓存里提取数据
回复给客户端,
如果数据库服务器在查询缓存里没有找到用户访问的数据,这
时就要到数据库服务器的表里查找数据,对数据库目录下的表
做访问是就会调用表使用的存储引擎对表做处理,
然后把查找到的数据先放到查询缓存 在回复给客户端
在数据库服务器查看与查询缓存相关的配置项
mysql> show variables like "%query_cache%";
2.2 处理存储(insert)访问的工作过程
第1步: 客户端向服务器发起连接请求
第2步: 服务器接收到客户端连接请求并响应
第3步: 根据表使用的存储引擎 对表中的数据做对应的处理。
第4步: 断开连接
2.2 存储引擎管理
1) 查看存储引擎
1.1 查看数据库服务支持的存储引擎和默认使用的存储引擎
mysql> show engines;
.2 查看当前已有表使用的存储引擎
mysql> show create table DB1.t3 \G
修改存储引擎
2.1 修改数据库服务默认使用的存储引擎
[root@host50 ~]#vim /etc/my.cnf
[mysqld]
default-storage-engine=myisam
说明:
memory存储引擎的表 每个表对应1个表文件
innodb存储引擎的表 每个表对应2个表文件
myisam存储引擎的表 每个表对应3个表文件
2.3修改表使用的存储引擎(一般在表存储存储数据之前修改)
说明:存储引擎修改了,存储数据的位置也会改变,
2.3 常用存储引擎特点(生产环境下常用的存储引擎)
1) myisam存储引擎特点
支持表级锁 、不支持事务、事务回滚、外键
myisam存储引擎的表 每个表对应3个表文件
表名.frm 存储表头信息 mysql> desc 库.表;
表名.MYI 存储表索引信息 mysql> show index from 库.表;
表名.MYD 存储表里的数据 mysql> select * from 库.表;
2) innodb存储引擎特点
支持行级、支持事务、事务回滚、外键
innodb存储引擎的表 每个表对应2个表文件
表名.frm 存储表头信息 mysql> desc 库.表;
表名.ibd 存储表的索引信息+表的数据信息
show index from 库.表; + select * from 库.表;
3) 专业术语
说明: 给表加锁,是为了解决客户端并发访问的冲突问题
3.1 锁类型:根据对数据的访问类型加锁
读锁:又称为共享锁,对数据做查询select 访问
加了读锁表,允许多个访问同时查询一张。
写锁:又称为排它锁或互斥锁,对数据做写访问(写访问通常指定的是 insert | delete | update )加了写锁的表,同一时间只允许1个连接做写操作,后续的读和写都得等待,等待写锁释放后,才允许后续的读或写访问。
3.2 锁粒度:指的就是给表加锁的范围
行级锁: 仅仅对被访问的行分别加锁,没有被访问的行不加锁
表级锁: 只要是对表做访问,就会把整张表加锁(不管访问的是1行 还是更多行)
2.4 事务特性
1)什么是事务?
指的是一组不可分割的SQL操作。
使用Innodb 存储引擎的表才支持事务。
事务用来管理对数据的 insert,update,delete 操作
2) 事务的特性简称ACID (表的存储引擎必须是innodb 才有事务的特性)
Atomic :原子性
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成。
Consistency : 一致性
在事务开始之前和事务结束以后,数据库的完整性不会被破坏。
执行sql命令时,敲回车前 称为事务开始之前
执行sql命令时,敲回车后 称为事务结束以后
Isolation :隔离性
数据库允许多个并发事务同时对其数据进行读写和修改而互不影响。
MySQL服务是支持多并连接的服务,同一时刻可是同时接收多个客户端的访问,
如果访问的是innodb存储引擎的表,彼此不知道操作的是同1张表
Durability :持久性
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
执行回车后,事务就结束。数据会永久有效。
2.5 事务隔离级别
事务隔离解决的问题:脏读 、不可重复读 、 幻读 。
脏读:读到了其他事务未提交的数据,读到的数据并不一定是最终存储到数据库里的数据。
可重复读:可重复读指的是在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据都是一致的。
不可重复读:一个事务先后读取同一条记录,而事务在两次读取之间该数据被其它事务所修改,则两次读取的数据不同,这种就是不可重复读。
幻读:一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为幻读。
事务隔离级别
读未提交(Read Uncommitted):最低的隔离级别,允许读取尚未提交的数据变更;可能会导致脏读、幻读、不可重复对。
读提交(Read Committed):允许并发事务读取已经提交的数据,可以阻止脏读;但幻读或不可重复读仍有可能发生。
可重复读(Repeatable Read):对同一字段的多次读取结果都是一致的;除非数据是被本身事务自己所修改;可以阻止脏读和不可重复读,但幻读仍有可能发生。
序列化(Serializable):最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,事务之间完全不可能产生干扰。该级别可以防止脏读和不可重复读,及幻读。
相关阅读
-
天天资讯:数据库高可用MHA和PXC集群搭...
MHA软件介绍MHA(MasterHighAvailability)由日本DeNA公司youshimat... -
土耳其政府:3月起开始修复损毁的博物馆...
当地时间2月17日,土耳其文化和旅游部长埃尔索伊宣布,该部已完成对... -
新车品鉴:长安UNI-T运动版内饰公布 将...
汽车现在已经越来越普及,基本上都快实现每家每户都有汽车了,那么... -
当前焦点!用人单位未提供工资清单承担何...
依据《保障农民工工资支付条例》第五十四条规定:由人力资源社会保... -
鹿特丹战报:鲁内因伤退赛,辛纳大战瓦...
【文 搏击江湖】2023年度第一项ATP500等级的赛事正在荷兰阿姆斯特... -
天天视讯!如何用 Cricut 表达式切割毛毡
你需要的东西Cricut表情机毡片尺寸适合机器粘合材料,如Heat nBo...