搭建MYSQL-MHA環境

  • 準備工作

    1. 4臺機器(可以是虛擬機)

    一臺安裝centos6.X(管理機192.168.2.5),其余三臺安裝centos7.X(一臺主master192.168.2.6,一臺主備backup192.168.2.7,一臺從slave192.168.2.8

    2. 配置epel源(配置該源時檢測是否可連接):

    [root@localhost ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    

    3. 建立ssh無密碼登錄環境(4臺機器均需要)

    [root@localhost ~]# ssh-keygen -t rsa
    [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.2.5
    [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.2.6
    [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.2.7
    [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.2.8
    
  • 安裝mysql

    1. 安裝mysql(除了管理機)

    這里安裝的是MariaDB
    

    2. 修改mysql配置

    • master機器

    [root@localhost ~]# vi /etc/my.cnf.d/server.cnf
    [mysqld]
    server_id = 1
    character-set-server = utf8
    lower_case_table_names = 1
    log-bin = binlog
    log-slave-updates
    [root@localhost ~]# service mysqld restart
    
    • backup機器

    [root@localhost ~]# vi /etc/my.cnf.d/server.cnf
    [mysqld]
    server_id = 2
    character-set-server = utf8
    lower_case_table_names = 1
    log-bin = binlog
    log-slave-updates
    [root@localhost ~]# service mysqld restart
    
    • slave機器

    [root@localhost ~]# vi /etc/my.cnf.d/server.cnf
    [mysqld]
    server_id = 3
    character-set-server = utf8
    lower_case_table_names = 1
    log-bin = binlog
    log-slave-updates
    read_only = 1
    [root@localhost ~]# service mysqld restart
    

    3. 登陸mysql

    • master機器

    [root@localhost ~]# mysql -uroot -p123456
    MariaDB [mysql]> CREATE USER 'weimo'@'%' IDENTIFIED BY 'weimo';
    MariaDB [mysql]> grant all privileges  ON *.* TO 'weimo'@'%' identified by "weimo";
    MariaDB [mysql]> flush privileges;
    [root@localhost ~]# mysqldump -uroot -p123456 -A -x > /tmp/full.sql
    [root@localhost ~]# scp /tmp/full.sql root@192.168.2.7:/tmp/
    [root@localhost ~]# scp /tmp/full.sql root@192.168.2.8:/tmp/
    MariaDB [mysql]> show master status;
    
    • backup機器、slave機器

    [root@localhost ~]# mysql -uroot -p123456
    MariaDB [mysql]> change master to master_host='192.168.2.6',master_port=3306,master_user='weimo',master_password='weimo',master_log_file='binlog.000003',master_log_pos=995;
    MariaDB [mysql]> start slave;
    MariaDB [mysql]> show slave status \G
    只要看到Slave_IO_Running Slave_SQL_Running都為yes就可以了。
    

    4. 賦權

    • 三臺機器

    MariaDB [mysql]> grant all privileges  ON *.* TO 'weimo'@'%' identified by "weimo";
    MariaDB [mysql]> FLUSH PRIVILEGES;
    
  • 安裝mha

    backup機器、slave機器

    [root@localhost ~]# yum install perl-DBD-MySQL
    [root@localhost ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm 
    (需要把安裝包傳上去,如安裝時有報錯依賴,則需要對應進行yum把依賴裝上)
    

    master機器

    [root@localhost ~]# yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
    [root@localhost ~]# rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm 
    (需要把安裝包傳上去,如安裝時有報錯依賴,則需要對應進行yum把依賴裝上)
    
    新建配置文件
    [root@localhost ~]# vi /etc/mha/mha.conf
    [server default]
    user=weimo
    password=weimo
    ssh_user=root
    manager_log=/usr/local/mha/manager.log
    # working directory on the manager
    manager_workdir=/usr/local/mha
    # working directory on MySQL servers
    remote_workdir=/usr/local/mha
    repl_user=weimo
    repl_password=weimo
    
    [server1]
    hostname=192.168.2.6
    
    [server2]
    hostname=192.168.2.7
    candidate_master=1
    
    [server3]
    hostname=192.168.2.8
    no_master=1
    
    檢查下SSH公鑰免密碼登錄,結果都OK就行
    [root@localhost ~]# masterha_check_ssh --conf=/etc/mha/mha.conf
    
    再檢查下MySQL復制,最后提示MySQL Replication Health is OK.就行
    masterha_check_repl --conf=/etc/mha/mha.conf
    
    后臺開啟HA進程
    nohup masterha_manager --conf=/etc/mha/mha.conf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/manager.log 2>&1 &
    
  • 配置keepalived

    1. 通過yum安裝

    [root@localhost ~]# yum -y install keepalived
    

    2. 修改配置文件

    • master機器

    [root@localhost ~]# vi /etc/keepalived/keepalived.conf
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        nopreempt
        interface eno16780032
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.2.10
        }
    }
    
    • backup機器

    [root@localhost ~]# vi /etc/keepalived/keepalived.conf
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        nopreempt
        interface eno16780032
        virtual_router_id 51
        priority 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.2.10
        }
    }
    
    • 區別與注釋

    區別:priority(優先級)不同
    注釋:
        state:
            狀態用的都是BACKUP,取值還有MASTER,區別在于重新連上后,MASTER會搶占vip,而BACKUP不會,直到別的VIP宕機后才會變成VIP
        interface:
            網卡名稱
        virtual_router_id:
            這個id需要兩個keepalived保持一致,并且同一個局域網內,id不能相同。
        virtual_ipaddress:
            這個就是虛擬ip,可以配置多個,需要保持一致
    

    3. 啟動keepalived

    [root@localhost ~]# service keepalived start
    注意:需要在master機器上啟動成功后,再去backup機器上啟動。否則會造成操作的不是master數據庫,從而導致集群無法保證正常工作,數據不一致,主從同步失敗。
    
  • 參考文檔

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容