mysql主主复制和keepalived配置过程

时间:2021-12-06 06:12:23
        昨天把mysql主主复制+keepalived又配置了一遍,下面详细记录一下过程.

        一.mysql主主复制篇

        1.安装mysql
        sudo apt-get install mysql-server

        2.迁移datadir目录
        这一步不是必须的,自己根据磁盘使用情况判断.
        (1)迁移datadir目录
        sudo mv /var/lib/mysql /home
        (2)修改my.cnf配置文件
        vi /etc/mysql/my.cnf
        datadir=/var/lib/mysql --> datadir=/home/mysql
        (3)修改usr.sbin.mysqld文件
        sudo vi /etc/apparmor.d/usr.sbin.mysqld
        /var/lib/mysql/ r, --> /home/mysql/ r,
        /var/lib/mysql/** rwk, --> /home/mysql/** rwk,
        (4)重启apparmor服务
        sudo /etc/init.d/apparmor restart
        (5)重启mysql
        sudo service mysql restart

        3.增加my.cnf中主主复制需要用到的配置,并重启mysql加载最新配置.
        sudo vi /etc/mysql/my.cnf

        server-id=1
        log_bin=/home/mysql/mysql-bin
        //下面这个参数的意义及配置原因请参阅http://www.cnblogs.com/billyxp/p/3470376.html
        slave-net-timeout=60
        //下面两个参数的意义及配置原因请参阅http://sndapk.blog.51cto.com/5385144/922606
        auto-increment-increment=2
        auto-increment-offset=1

        sudo service mysql restart

        4.增加主主复制专用mysql用户并赋予该用户相应权限.
        mysql -u root -p
        use mysql;
        create user replicationusername;
        update user set password=password('insert password here') where user='replicationusername';
        grant replication slave on *.* to 'replicationusername'@'%';
        flush privileges;

        5.配置master服务器
        假设两台服务器的地址分别为192.168.1.101和192.168.1.102.
        (1)在192.168.1.101上的mysql中执行:
        change master to master_host='192.168.1.102',master_user='replicationusername',master_password='insert password here';
        (1)在192.168.1.102上mysql中执行:
        change master to master_host='192.168.1.101',master_user='replicationusername',master_password='insert password here';
        
        6.启动复制服务并验证.
        在mysql中执行:
        start slave;
        show slave status\G;
        显示以下信息则表示已成功启动复制服务(注意双yes):
         mysql主主复制和keepalived配置过程

        

        二.keepalived篇


        1.安装keepalived
        sudo apt-get install keepalived

        2.增加keepalived配置文件
        sudo vi /etc/keepalived/keepalived.cnf
        内容如下:
        global_defs {
                notification_email {
                        username@domainname.com 
                }
        notification_email_from username@domainname.com
        smtp_server smtp.domain.com
        smtp_connect_timeout 30
        router_id MySQL-HA
        }
        vrrp_script check_run {
                script "/etc/keepalived/service_check.sh" 
                interval 3
                weight -20
        }
        vrrp_instance VI_1 {
                state MASTER
                interface eth0
                virtual_router_id 103
                priority 100
                advert_int 1
                nopreempt
                authentication {
                        auth_type PASS
                        auth_pass 1111
                }
                virtual_ipaddress {
                        192.168.1.103
                }
                track_script {
                        check_run
                }
        }
        virtual_server 192.168.1.103 3306 {
                delay_loop 6
                lb_algo wcl
                lb_kind DR
                #nat_mask 255.255.255.0
                persistence_timeout 50
                protocol TCP
                real_server 192.168.1.101 3306 {
                        weight 1
                        notify_down /etc/keepalived/service_down.sh  
                        TCP_CHECK {
                                 connect_timeout 10
                                 nb_get_retry 3
                                 delay_before_retry 3
                                 connect_port 3306
                        }
                }
        }

        3.增加mysql服务检测脚本
        sudo vi /etc/keepalived/service_check.sh
        内容如下:
        #!/bin/bash
        MYSQL=/usr/bin/mysql
        MYSQL_HOST=127.0.0.1
        MYSQL_USER='root'
        MYSQL_PASSWORD='insert password here'

        CHECK_TIME=3
        #mysql is working MYSQL_OK is 0 , mysql down MYSQL_OK is 1
        MYSQL_OK=1

        function check_mysql_helth (){
        $MYSQL -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" > /dev/null 2>&1
        if [ $? = 0 ] ;then
        MYSQL_OK=0
        else
        MYSQL_OK=1
        fi
        return $MYSQL_OK
        }

        while [ $CHECK_TIME -ne 0 ]
        do
        let "CHECK_TIME -= 1"

        check_mysql_helth

        if [ $MYSQL_OK = 0 ] ; then
        CHECK_TIME=0
        echo "OK"
        exit 0
        fi

        if [ $MYSQL_OK -eq 1 ] && [ $CHECK_TIME -eq 1 ]
        then
          #/etc/init.d/keepalived stop
          echo "failed"
          pkill keepalived 
        exit 1
        fi

        sleep 1
        done

        4.增加服务关闭脚本.
        sudo vi /etc/keepalived/service_down.sh
        内容如下:
        #!/bin/sh  
        pkill keepalived


        5.重启keepalived服务.
        sudo /etc/init.d/keepavlied restart
        使用ip a指令验证是否启动成功,显示如下信息则表示启动成功:
         mysql主主复制和keepalived配置过程
        整个过程中有几个需要注意的点:
        1.mysql服务要先于keepalived服务启动,因为有检测脚本的存在,如果mysql没有响应了,keepalived服务也会被脚本关闭.
        2.keepalived使用需要虚拟IP,所以在阿里云这种不能单独申请IP的地方是无法使用这种服务的.
        3./etc/keepalived/下的两个脚本文件需要有可执行权限.