Mysql-MHA


    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的主从复制结构中的;
 


            
        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.html

Note:根据马哥视频做的学习笔记,如有错误,欢迎指正;侵删

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值