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的主從複製結構中的;
 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

相關文章
相關標籤/搜索