zoukankan      html  css  js  c++  java
  • 编译安装keepalived,实现双主mysql高可用

    安装keepalived

    1、官网下载源码包,解压

    # wget http://www.keepalived.org/software/keepalived-1.1.20.tar.gz
    # tar xvf keepalived-1.1.20.tar.gz
    

    2、编译安装,这里需要指定一下安装路径

    # cd keepalived-1.1.20/
    # ./configure --prefix=/usr/local/keepalived
    # make && make install
    

    3、拷贝配置文件和启动脚本到相应的目录

    # mkdir /etc/keepalived
    # cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
    # cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
    # cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    # cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
    

    4、设置开机启动

    # chkconfig keepalived on
    

    配置mysql双主

    所谓双主,即两个节点互为主从,各自把对方设为master,两个节点都需要开启binlog和relaylog。

    两个节点server_id必须不一样。
    由于两个节点都可写,为了保证自增主键ID不冲突,需要设置 auto_increment_offset 和 auto_increment_increment。

    主从复制过程:

    a、master将改变记录到二进制日志(binlog)中;
    b、slave将master的binlog拷贝到它的中继日志(relaylog);
    c、slave重做中继日志中的事件,将改变反映到它自己的数据库。

    ① slave将master的binary log拷贝到它自己的中继日志。
    ② I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
    ③ SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。

    1、修改节点一的配置文件

    # vim /etc/my.cnf
    server-id=1
    datadir=/nh/mysql3307/data
    log-bin=/nh/mysql3307/data
    log-bin-index=/nh/mysql3307/data
    relay_log=relay-log
    auto_increment_offset=1
    auto_increment_increment=2
    innodb_file_per_table=1
    
    # /etc/init.d/mysqld start
    

    2、修改配置节点二的配置文件

    # vim /etc/my.cnf
    server-id=2
    datadir=/nh/mysql3307/data
    log-bin=/nh/mysql3307/data
    log-bin-index=/nh/mysql3307/data
    relay_log=relay-log
    auto_increment_offset=2
    auto_increment_increment=2
    innodb_file_per_table=1
    
    # /etc/init.d/mysqld start
    

    3、登录节点一的mysql,设置有复制权限的账号

    # mysql -uroot -S mysql-3307.sock
    mysql> grant replication slave,replication client on *.* to repl@'192.168.%' identified by 'Fl0wer926';
    mysql> flush privileges;
    

    查看当前正在使用的binlog文件和所在位置

    mysql> show master status;
    +-------------+----------+--------------+------------------+
    | File        | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +-------------+----------+--------------+------------------+
    | data.00005  |      106 |              |                  |
    +-------------+----------+--------------+------------------+
    

    登录节点二的mysql,将节点一设置为其master

    mysql> change master to master_host='192.168.1.101',MASTER_PORT = 3307,master_user='repl',master_password='Fl0wer926',master_log_file='data.000005',master_log_pos=106;
    mysql> start slave;
    
    mysql> show slave statusG;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.1.101
                      Master_User: repl
                      Master_Port: 3307
                    Connect_Retry: 60
                  Master_Log_File: data.000010
              Read_Master_Log_Pos: 106
                   Relay_Log_File: relay-log.000021
                    Relay_Log_Pos: 246
            Relay_Master_Log_File: data.000010
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB:
              Replicate_Ignore_DB:
               Replicate_Do_Table:
           Replicate_Ignore_Table:
          Replicate_Wild_Do_Table:
      Replicate_Wild_Ignore_Table:
                       Last_Errno: 0
                       Last_Error:
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 106
                  Relay_Log_Space: 535
                  Until_Condition: None
                   Until_Log_File:
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File:
               Master_SSL_CA_Path:
                  Master_SSL_Cert:
                Master_SSL_Cipher:
                   Master_SSL_Key:
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error:
                   Last_SQL_Errno: 0
                   Last_SQL_Error:
    1 row in set (0.00 sec)
    
    mysql> show processlist;
    +-------+-------------+---------------------+------+-------------+-------+-----------------------------------------------------------------------+------------------+
    | Id    | User        | Host                | db   | Command     | Time  | State                                                                 | Info             |
    +-------+-------------+---------------------+------+-------------+-------+-----------------------------------------------------------------------+------------------+
    |     7 | system user |                     | NULL | Connect     | 43454 | Waiting for master to send event                                      | NULL             |
    |     8 | system user |                     | NULL | Connect     | 36323 | Has read all relay log; waiting for the slave I/O thread to update it | NULL             |
    | 33612 | repl        | 192.168.1.101:57914 | NULL | Binlog Dump |   967 | Has sent all binlog to slave; waiting for binlog to be updated        | NULL             |
    | 34514 | root        | localhost           | NULL | Query       |     0 | NULL                                                                  | show processlist |
    +-------+-------------+---------------------+------+-------------+-------+-----------------------------------------------------------------------+------------------+
    

    交换两个节点的角色重复一次以上操作,即可实现主主复制。

    4、修改节点一的keepalived配置文件

    # vim /etc/keepalived/keepalived.conf
    global_defs {
       router_id MYSQL_MM
    }
    
    vrrp_script chk_mysqld3307 {
        script "nc 192.168.1.101 3307"
        interval 1
        weight -10
        fall 2
        rise 1
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface bond0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1234
        }
        virtual_ipaddress {
            192.168.6.12
        }
        track_script {
            chk_mysqld3307
        }
    }
    
    # /etc/init.d/keepalived start
    

    5、修改节点二的keepalived配置文件

    # vim /etc/keepalived/keepalived.conf
    global_defs {
       router_id MYSQL_MM
    }
    
    vrrp_script chk_mysqld3307 {
        script "nc 192.168.1.102 3307"
        interval 1
        weight -10
        fall 2
        rise 1
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface bond0
        virtual_router_id 51
        priority 95
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1234
        }
        virtual_ipaddress {
            192.168.6.12
        }
        track_script {
            chk_mysqld3307
        }
    }
    
    # /etc/init.d/keepalived start
    

    至此,通过keepalived实现mysql双主高可用就完成了,然后可以尝试停止vip所在节点测试vip是否会自动漂移,然后再把节点启动看vip是否会被抢占回来。

  • 相关阅读:
    智慧城市建设中政府网站群建设起到了积极的作用
    SQLite 入门教程(四)增删改查,有讲究 (转)
    基于H.264的实时网络摄像——Android客户端
    中小型数据存储方案探讨
    SQL的多表操作
    lua中的时间函数
    C++ 输入输出文件流(ifstream&ofstream)
    linux系统下的shell脚本
    makefile的简单写法
    Linux-ubuntu
  • 原文地址:https://www.cnblogs.com/keithtt/p/7119277.html
Copyright © 2011-2022 走看看