數據庫應用——MySQL高可用集羣

                                                        MySQL高可用集羣

一、MySQL-MMM高可用
1、MMM簡介
        (1)MMM(Master-Master replication manager for MySQL)是一套支持雙主故障切換和雙主日常管理的腳本程序。MMM使用Perl語言開發,是Google的開源項目(Perl腳本),主要用來監控和管理MySQL Master-Master(雙主)複製,雖然叫做雙主複製,但是業務上同一時刻只允許對一個主進行寫入,另一臺備選主上提供部分讀服務,以加速在主主切換時刻備選主的預熱,可以說MMM這套腳本程序一方面實現了故障切換的功能,另一方面其內部附加的工具腳本也可以實現多個slave的read負載均衡。
(2)功能:
        ①雙主複製,實現故障自動切換
        ②實現多個slave的read負載均衡
        ③可以備份數據
(3)原理:
        其原理是將真實數據庫節點的IP(RIP)映射爲虛擬IP(VIP)集,在這個虛擬的IP集中,有一個專用於write的IP,多個用於read的IP,這個用於Write的VIP映射着數據庫集羣中的兩臺master的真實IP(RIP),以此來實現Failover的切換,其他read的VIP可以用來均衡讀(balance)。
(4)架構說明
        ①mmm_mond:監控進程,負責所有的監控工作,決定和處理所有節點角色活動。此腳本需要在監管機上運行。
        ②mmm_agentd:運行在每個mysql服務器上的代理進程,完成監控的探針工作和執行簡單的遠端服務設置。此腳本需要在被監管機上運行。
        ③mmm_control:管理腳本,查看和管理集羣運行狀態,同時提供管理mmm_mond進程的命令。
(5)授權用戶:授權的用戶包括一個mmm_monitor用戶和一個mmm_agent用戶,如果想使用mmm的備份工具則還要添加一個mmm_tools用戶。

2、案例實施
(1)搭建多主多從模式
        ①配置主主模式
                1)修改配置文件my.cnf
                        a.server-id=1:設置爲不同id
                        b.log-bin=master-bin:開啓二進制日誌
                        c.log-slave-updates=ture:宕機後啓用備用庫
                        d.auto_increment_increment=2:設置相同數
                        e.auto_increment_offset=1:設置爲不同數
                2)兩主機互提升訪問權限
                        a.grant replication slave on *.* to 'replication'@'192.168.11.%' identified by '111111';
                        b.change master to master_host='192.168.11.44',master_user='replication',master_password='111111',master_log_file='master2-bin.000002',master_log_pos=107;
                        c.start slave;
        ②配置從服務器與1號主服務器的主從複製
                1)change master to master_host='192.168.11.41',master_user='replication',master_password='111111',master_log_file='master1-bin.000002',master_log_pos=107;

(2)安裝配置MySQL-MMM
        ①安裝MMM:yum install -y mysql-mmm*
        ②在所有主、從數據庫授權monitor訪問
                1)grant replication client on *.* to 'mmm_monitor'@'192.168.11.%' identified by '111111';
                2)grant super,replication client,process on *.* to 'mmm_agent'@'192.168.11.%' identified by '111111';
        ③修改/etc/mysql-mmm/mmm_common.conf文件(所有主機相同配置,包括監控機)

<host default>
    cluster_interface       eth0
    pid_path                /var/run/mysql-mmm/mmm_agentd.pid
    bin_path                /usr/libexec/mysql-mmm/
    replication_user        replicant
    replication_password    111111
    agent_user              mmm_agent
    agent_password          111111
</host>

<host db1>
    ip      192.168.11.41
    mode    master
    peer    db2
</host>

<host db2>
    ip      192.168.11.44
    mode    master
    peer    db1
</host>

<host db3>
    ip      192.168.11.42
    mode    slave
</host>

<host db4>
    ip      192.168.11.43
    mode    slave
</host>     
    
<role writer>
    hosts   db1, db2
    ips     192.168.11.241
    mode    exclusive
</role>

<role reader>
    hosts   db3, db4
    ips     192.168.11.242, 192.168.11.243
    mode    balanced
</role>

        ④數據庫主機編輯mmm_agent.conf文件,修改爲對應db
        ⑤修改監控主機mmm_mon.conf文件

<monitor>
    ip                  127.0.0.1
    pid_path            /var/run/mysql-mmm/mmm_mond.pid
    bin_path            /usr/libexec/mysql-mmm
    status_path         /var/lib/mysql-mmm/mmm_mond.status
    ping_ip     192.168.11.41,192.168.11.42,192.168.11.43,192.168.11.44
    auto_set_online     10
</monitor>

<host default>
    monitor_user        mmm_monitor
    monitor_password    111111
</host>

        ⑥啓動代理和監控
                1)數據庫服務器:service mysql-mmm-agent start
                2)監控主機:service mysql-mmm-monitor start
        ⑦測試集羣:開關主服務器的mysql服務,使用mmm_control show查看運行狀態(主db1是對外一個寫入的角色,但不真正提供只寫,要想實現讀寫分離還需要結合amoeba。而後面的虛擬IP是真正來訪問Mysql數據庫的。)

二、MHA配置
1、配置主從複製(一臺master、兩臺slave)
2、安裝MHA依賴軟件perl(所有機器):
        (1)yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN
3、安裝node節點組件(所有機器):
        (1)tar zxf mha4mysql-node-0.56.tar.gz
        (2)cd mha4mysql-node-0.56
        (3)perl Makefile.PL
        (4)make && make install
4、監控機安裝mha4mysql-manager-0.56
5、配置無密碼登錄(每臺機器都要做到互通)
        (1)ssh-keygen -t rsa(命令存在於openssh-clients)
        (2)ssh-copy-id 192.168.11.41
        (3)ssh-copy-id 192.168.11.42
        (4)ssh-copy-id 192.168.11.43
6、配置MHA
        (1)複製腳本
                ①cp -ra /root/mha4mysql-manager-0.56/samples/scripts /usr/local/bin

        (2)cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin並進行修改
                ①my $vip = '192.168.11.250/24';
                ②my $key = "1";
                ③my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
                ④my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
                ⑤my $exit_code = 0;

        (3)mysql用戶授權
                ①在所有的數據上都要授權兩個用戶  myslave (主從複製時已經創建,但是隻在master授權)  mha用戶
                ②mysql -uroot -p111111 -e "grant all on *.* to 'myslave'@'%' identified by '111111';grant all on *.* to 'mha'@'%' identified by '111111';flush privileges;"

        (4)創建 MHA 軟件目錄並拷貝配置文件
                ①mkdir /etc/masterha
                ②cp /root/mha4mysql-manager-0.56/samples/conf/app1.cnf /etc/masterha/
                ③vim /etc/masterha/app1.cnf

[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
master_binlog_dir=/usr/local/mysql/data    #二進制日誌文件保存路徑
master_ip_failover_script= /usr/local/bin/master_ip_failover   #上一步配置的文件
master_ip_online_change_script= /usr/local/bin/master_ip_online_change
password=manager
user=mha
ping_interval=1
remote_workdir=/tmp
repl_password=123456
repl_user=myslave
secondary_check_script= /usr/local/bin/masterha_secondary_check -s 192.168.100.4 -s 192.168.100.5
shutdown_script=""
ssh_user=root

[server1]
hostname=192.168.100.4
port=3306
candidate_master=1 //設置爲候選master
check_repl_delay=0 //忽略複製延時

[server2]
hostname=192.168.100.5
port=3306
candidate_master=1
check_repl_delay=0

[server3]
hostname=192.168.100.6
port=3306

        (5)測試SSH:masterha_check_ssh -conf=/etc/masterha/app1.cnf
                ①監控機及所有node機,都需要做相互的無密碼登錄設置

        (6)測試 mysq 主從連接情況:masterha_check_repl -conf=/etc/masterha/app1.cnf
                ①如果報Binlog setting check failed!錯誤,那麼有可能是master服務器保存二進制日誌文件地址錯誤。

        (7)啓動MHA
                ①nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
                ②--remove_dead_master_conf 該參數代表當發生主從切換後,老的主庫的 ip 將會從配置文件中移除。
                ③--manger_log 日誌存放位置
                ④--ignore_last_failover 在缺省情況下,如果 MHA 檢測到連續發生宕機,且兩次宕機間隔不足 8 小時的話,則不會進行 Failover,之所以這樣限制是爲了避免 ping-pong 效應。該參數代表忽略上次 MHA 觸發切換產生的文件,默認情況下, MHA 發生切換後會在日誌記目錄,也就是上面設置的日誌 app1.failover.complete 文件,下次再次切換的時候如果發現該目錄下存在該文件將不允許觸發切換,除非在第一次切換後收到刪除該文件,爲了方便,這裏設置爲–ignore_last_failover
        (8)查看MHA狀態:masterha_check_status --conf=/etc/masterha/app1.cnf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章