Mysql分布式系统:
CAP标准:分布式系统最多能够实现其中的两点,经常使用的有AP和AC;
C:一致性
A:可用性
P:网络分区(分裂)容错性
mysql的切分:
垂直切分:将一个数据库中的多张表分散到多个mysql服务器中(尽可能让那些须要作联合查询的表位于同一个mysql数据库中,好比JOIN操做,而且尽可能让使用频繁的表位于不一样mysql数据库);
水平切分:将某个表按行切分之后分布到不一样的数据库中;
Mysql复制之主节点的高可用:
MMM:Multi Master MySQL
MHA:Master HA
安装包下载:https://blog.csdn.net/debimeng/article/details/80542521
MHA Manager:一般单独部署在一台独立机器上,管理多个master/slave集群,每一个master/slave集群称做一个application;
包含的组件:
masterha_check_ssh:MHA依赖的环境监测工具;
masterha_check_repo:mysql复制环境监测工具;
MHA manager要有拥有控制每一个slave数据库的权限,从而才能对其执行切换主节点、将新晋主节点设置为可写(由于从节点通常默认是不可写的(read_only));
masterha_manager:MHA服务主程序;
masterha_check_status:MHA运行状态探测工具;
masterha_master_monitor:mysql master节点可用性监测工具;
masterha_master_switch:master节点切换工具;
masterha_conf_host:添加或删除配置节点;
masterha_stop:关闭MHA服务的工具;
MHA Node:运行在每台mysql服务器上(master/slave/manager),它经过监控具有解析和清理logs功能的脚原本加快故障转移;
包含的组件:
save_binary_logs:保存和复制master的二进制日志;
apply_diff_relay_logs:识别差别的中继日志事件并应用于其它slave;
在提高一个从节点为主节点时,会事先合并全部从节点中的中继日志事件,而后将其应用到一个从节点上,使其做为新的主节点;
purge_relay_logs:清除中继日志(不会阻塞SQL线程)
VIP(IP地址漂移):当新的主节点接替故障主节点工做时,不只是须要更新新晋主节点的数据,其IP地址也要进行改变,进程原来主节点的IP,才能继续提供服务;咱们能够他经过keepalived来实现IP地址的切换,也可使用MHA自带的脚原本实现IP地址的切换;
自定义扩展功能:
secondary_check_script:经过多条网络路由检测master的可用性;
master_ip_failover_script:更新application使用的masterip;
shutdown_script:强制关闭master节点;
report_script:发送报告;
init_conf_load_script:加载初始配置参数;
master_ip_online_change_script:更新master节点的ip地址;
MHA自身提供了管理端和节点端,其中管理端本身运行在一个主机上,每一个集群中的mysql服务器都要运行节点端,其实现高可用的方式就是经过管理端监控(能够是心跳信息等方式)mysql复制集群中的主节点,当发现主节点故障之后,就会自动的在从节点中选取(通常是数据比较全面的)一台mysql服务器,做为主节点,而后让剩下的从节点以新节点为主节点,进而从其继续复制数据;当原来的主节点从新上线之后,其也不能抢占现有主节点,而是做为从节点提供服务;此技术是用于mysql的主从复制结构中的;
html
Galera Cluster:与MMM或MHA不一样,其是基于wresp协议来完成高可用的;
Galera Cluster不是基于mysql的各类复制结构来实现可用性的(即不是经过mysql协议读取二进制日志文件来传输数据的),而是经过更底层的wresp协议将mysql服务器节点(不区分主从节点)上的发生变化的数据同步到其余节点;
引入中间件:
能够经过中间件实现读写分离,在中间件中对发来的mysql数据请求作分析,若是过是读请求就发送给从服务器,若是是写请求就发送给写服务器,而且还以能够经过中间件作负载均衡,将读请求分散的发送到众多的从服务器中,对于主节点的可用性,能够布置多个主节点,当中间件调度写请求时,同时对多个主节点进行写操做,从而实现数据的同步,也增长了主节点的可用性;当请求过可能是还能够在中间件中建立等待队列,缓解mysql服务器的压力;不过这种中间件通常都要本身开发,有必定的难度;
示例:
1.MHA
拓扑结构:一共四个节点,一个MHA Manager节点、一个Mysql主节点、两个Mysql从节点;
a.配置hosts文件,使其可以经过主机名通讯;
~]# cat /etc/hosts
192.168.80.143 master
192.168.80.136 manager
192.168.80.131 slave1
192.168.80.134 slave2
b.设置主节点的配置文件(配置同下面从节点)及添加复制时使用的受权用户;
systemctl start mariadb.service
MariaDB [(none)]> show master status;
MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'192.168.80.%' identified by 'replpass';
MariaDB [(none)]> flush privileges;
c.设置从节点的配置文件;
~]# cat /etc/my.cnf
# The MariaDB server
[mysqld]
skip_name_resolve = ON
innodb_file_per_table = ON
log_bin = master-bin
relay_log = relay-log
server_id = 2
read_only = 1
relay_log_purge = 0
d.配置主从复制,将主节点的数据复制到从节点;
mysql> change master to master_host='192.168.80.143',master_user='repluser',master_password='replpass',master_log_file='master-bin.000004',master_log_pos=498;
将上面MariaDB [(none)]> show master status;命令输出的pos位置填入,便可一块儿将受权帐号一并复制过来了,或者本身手动添加也行;
mysql> start slave;
e.在主节点上添加一个给MHA使用的帐号;
MariaDB [(none)]> grant all on *.* to 'mhauser'@'192.168.80.%' identified by 'mhapqss';
MariaDB [(none)]> flush privileges;
f.配置全部节点能够经过ssh互通;
~]# ssh-keygen -t rsa -P ''
~]# cat .ssh/id_rsa.pub >> .ssh/authorized_keys
~]# chmod og= .ssh/authorized_keys
~]# scp -p .ssh/id_rsa .ssh/authorized_keys .ssh/id_rsa.pub centos7:/root/.ssh/
g.在manager主机上安装mha4mysql-manager和mha4mysql-node、在master和slave节点上安装mha4mysql-node;(安装以前须要配置好epel源)
~]# yum install ./mha4mysql-node-0.58-0.el7.centos.noarch.rpm
~]# yum install ./mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
h.编辑MHA的配置文件;配置文件路径须要本身建立:mkdir /etc/masterha/
global配置:全局配置,为各application提供默认配置;
user=NAME:指定mysql中的帐户;
password=PASSWORD:指定帐户密码;
manager_workdir=PATH:指定其管理的app存放数据的目录;
manager_log=PATH:指定某个app的日志文件位置;
remote_workdir=PATH:管理远端节点的工做目录;
ssh_user=NAME:指定登陆ssh的用户;
repl_user=NAME:指定mysql中具备主从复制权限的用户;
repl_password=PASSWORD:指定用户密码;
ping_interval=1:用于检测主节点是否在线的间隔时间;
application配置:用来指定单个application的信息;
server#:标记每一个节点;
hostname=IP_ADDR:指定每一个节点的IP地址;
ssh_port=PORT:指定ssh的端口号;
candidate_master=1|0:是否能够参与称为主节点;
Note:更多参数请查看官方文档;
示例:
~]# mkdir /etc/masterha/
~]# cat /etc/masterha/app.cnf
[server default]
user=mhauser
password=mhapass
manager_workdir=/data/masterha/app
master_log=/data/masterha/app/manager.log
remote_workdir=/data/masterha/app
ssh_user=root
repl_user=repluser
repl_password=replpass
ping_interval=1
[server1]
hostname=192.168.80.143
candidate_master=1
[server2]
hostname=192.168.80.131
candidate_master=1
[server3]
hostname=192.168.80.134
candidate_master=1
~]# masterha_check_ssh --conf=/etc/masterha/app.cnf
测试ssh远程登陆是否可用;
~]# masterha_check_repl --conf=/etc/masterha/app.cnf
~]# nohup master_manager --conf=/etc/masterha/app.cnf > /data/masterha/app/manager.log 2>&1 &
启动MHA;
~]# masterha_check_status --conf=/etc/masterha/app.cnf
检查MHA的状态;
模拟主节点故障:会发现从节点中有一个会接替主节点继续工做;
Note:当故障的主节点修复之后,能够当作从节点从新上线,上线步骤为:先从现有的主节点的备份中复制一份数据,指向新的主节点,而后再经过二进制日志文件重作最新的数据,而后上线便可,而且设置read_only为1;
错误借鉴:https://blog.51cto.com/arthur376/1812640
https://www.cnblogs.com/polestar/p/5371080.htmlnode
Note:根据马哥视频作的学习笔记,若有错误,欢迎指正;侵删mysql