zoukankan      html  css  js  c++  java
  • mysql5.6主主复制及keepalived 高可用

    1.实验目的

     mysql服务器作为生产环境中使用最广泛的数据库软件,以其开源性,稳定性而广泛使用,但同时由于数据存储,读写频率高,极易造成数据库出错,从而给企业造成不可挽回的损失,我们除了做好数据库的备份工作外,同时,还应该解决数据库服务器的单点故障问题。

    2.搭建环境

    两台 mysql 服务器

    172.16.1.2     mysql   + keepalived

    172.16.1.12   mysql  + keepalived

    一台测试机

    172.16.1.1

    3.环境部署

    一台 mysql 服务器 + keepalived

    1)对于mysql源码安装或者yum 安装均可,此处不多讲。

    2) 主MySQL配置

    主MySQL安装时间同步器,yum  -y  install ntp

    vim   /etc/ntpd.conf

    添加

    server 127.127.1.0
    fudge 127.127.1.0 startum 8

    启动service   ntpd  start

    配置mysql目录下的 my.cnf文件

    vim my.cnf

    [mysqld]
    log-slave-updates=true                            #开启从服务器的日志更新
    server-id = 11                                          #主服务器的ID ,这个可以随便定,但是与从服务器要不同

    log-bin=mysql-bin                                    #开启二进制日志

    登录mysql,   mysql   -uroot   -p123456  

    创建myslave 账号,并授权可以复制

    grant   replication slave   on  *.*  to  'myslave'@'172.16.1.12'     identified   by  '123456';

    flush   privileges;

    显示主服务的状态;

     show   master  status;

    记住file 及position位置的字符串,在配置从服务时候会用到。

    至此,主 mysql 配置完成,重启service mysqld   restart

    3)从mysql服务配置

    MySQL安装时间同步器,yum  -y  install ntpdate

    ntpdate  172.16.1.2      时间同步

    配置mysql目录下的 my.cnf文件

    在其中添加

    [mysqld]

    relay-log=relay-log-bin                                     # 传递日志,前缀为 relay-log-bin

    relay-log-index=slave-relay-bin.index             # 传递日志的索引文件

    log-bin=mysql-bin                                            #开启二进制日志

    server-id = 12                                                  #服务器的ID ,这个可以随便定,但是与主服务器要不同

    重启服务   service  mysqld restart

    登录mysql,   mysql   -uroot   -p123456  

    change  master  to  master_host ='172.16.1.2',master_user='myslave',master_password='123456',master_log_file='此处为主服务show  master 命令显示的 file',master_log_pos='此处为主服务show  master 命令显示的 pos'';

    此处 master_host ='172.16.1.2',为主mysql的ip

    start   slave;                       #开启从服务

    show slave statusG;         #显示从服务状态

    如果

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    两项为yes,则代表启动从服务成功。

    如果Slave_IO_Running: No

    可能的问题一是主服务和从服务的server-id,不能为重复;二是授权时一定要准确。grant   replication slave   on  *.*  to  'myslave'@'172.16.1.12'     identified   by  '123456';

    此处172.16.1.12为从服务器的ip

    4)以上两步实现了mysql主从复制,我们要实现主主,也就是两台mysql ,一台既是主,也是从,另一台既是主也是从,所以我们按照上面的配置在两台mysql上做相反的从主配置。

    主mysql上,做从配置 

    配置mysql目录下的 my.cnf文件

    在其中添加

    [mysqld]

    relay-log=relay-log-bin                                     # 传递日志,前缀为 relay-log-bin

    relay-log-index=slave-relay-bin.index             # 传递日志的索引文件

    log-bin=mysql-bin                                            #开启二进制日志

    重启服务   service  mysqld restart

    登录mysql,   mysql   -uroot   -p123456  

    change  master  to  master_host ='172.16.1.12',master_user='myslave',master_password='123456',master_log_file='此处为主服务show  master 命令显示的 file',master_log_pos='此处为主服务show  master 命令显示的 pos'';

    此处的master_host ='172.16.1.12'  为从mysql服务器的ip

    start   slave;                       #开启从服务

    show slave statusG;         #显示从服务状态

    如果

    Slave_IO_Running: Yes Slave_SQL_Running: Yes

    两项为yes,则代表启动从服务成功。

    从mysql上,做主配置

    配置mysql目录下的 my.cnf文件

    vim my.cnf

    [mysqld] log-slave-updates=true                            #开启从服务器的日志更新

    登录mysql,   mysql   -uroot   -p123456  

    创建myslave 账号,并授权可以复制

    grant   replication slave   on  *.*  to  'myslave'@'172.16.1.12'     identified   by  '123456';

    flush   privileges;

    显示主服务的状态;

     show   master  status;

    记住file 及position位置的字符串,在配置从服务时候会用到。

    至此,两台MySQL服务器的分别配置了主从,即一台既是主又是从,另一台既是从也是主。

    5)mysql主主复制测试

    mysql  -uroot  -p123456 任意登录一台mysql服务器,

    create  database  test  default  character  set  utf8;

    create  table  test;

     到另一台MySQL上show   databases;  show   tables;

    显示了数据库和数据表都已建好,可以看到已经同步成功

    6)配置keepalived,实现高可用

    在主mysql服务器配置 

    yum  -y install  keepalived

    cp  /etc/keepalived/keepalived.conf    /etc/keepalived/keepalived.conf.bak

    vim  /etc/keepalived.conf

    vrrp_instance VI_1 {                                         #实例1
        state MASTER                                             #状态为主
        interface ens33                                            #绑定网卡
        virtual_router_id 11                                      #   id 号,主从一致
        priority 100                                                   #优先级为100
        advert_int 1
        #nopreempt                                                  #非抢占模式
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {                                         #虚拟ip地址
            172.16.1.199
        }
    }
    virtual_server 172.16.1.199 3306  {                 
         delay_loop 2                                                  #间隔2秒检查真实服务器状态 
         lb_algo wrr                                                     #LVS   arithmetic
         lb_kind DR                                                     #LVS model
         persistence_timeout 60                                  #k
         protocol TCP 
         real_server 172.16.1.2 3306  {                        #真实服务器 ,也就是主mysql服务器
             weight 3 
             #notify_down /usr/local/mysql/bin/mysql.sh  # 可执行脚本路径 
             TCP_CHECK { 
                 connect_timeout 10    #timeout
                 nb_get_retry 3       #conect times to try to connect
                 delay_before_retry 3   #interval of retry
                 connect_port 3306    # check mysql port
             }
         } 
    }

    启动服务,service  keepalived  start

    在从mysql服务器上配置

    yum  -y install  keepalived

    cp  /etc/keepalived/keepalived.conf    /etc/keepalived/keepalived.conf.bak

    vim  /etc/keepalived.conf

    本处只写与主mysql服务器不同处

        #备用服务器上为SLAVE
        state SLAVE
        #绑定vip的网卡为ens33,根据自己服务器网卡
        interface ens33
        virtual_router_id 11                     #与主服务器  id号码一样
        #备用服务器上为90
        priority 90                                   #优先级比主mysql服务器小
    }
    virtual_server 172.16.1.199 3306 {  
         real_server 172.16.1.12 3306 {               #真实服务器 ,也就是从mysql服务器
    }

    其他与主mysql服务器上配置文件相同

    启动服务,service  keepalived  start

    可以在主mysql服务器上看到一个VIP地址,172.16.1.199

    4.测试

     停止主mysql服务器上的keepalived服务,  service  keepalived  stop

    同时查看另一台的从mysql  的ip,ip a

    可以看到有一vip ,172.16.1.199

    我们在测试机172.16.1.1上登录从mysql ,    mysql   -uroot   -p123456  -P 3306   -h  172.16.1.12

    登录成功,我们做一个 插入数据实验

    use test;

    insert into  test   values();

    到两台的数据库下查看,select   *  from  test;

    数据同步成功。

    启动  主mysql服务器上的keepalived服务,  service  keepalived  start

    停止从mysql服务器上的keepalived服务,  service  keepalived  stop

    查看另一台的主mysql  的ip,ip a

    可以看到有一vip ,172.16.1.199

    做同样的操作 insert into  test   values();

    到两台的数据库下查看,select   *  from  test;

    数据同步成功,从而实现两台mysql数据库服务器的高可用及主主数据同步。

                                               

  • 相关阅读:
    spring ref &history&design philosophy
    LDAP & Implementation
    REST
    隔离级别
    Servlet Analysis
    Session&Cookie
    Dvelopment descriptor
    write RE validation
    hello2 source anaylis
    Filter
  • 原文地址:https://www.cnblogs.com/mushou/p/9446352.html
Copyright © 2011-2022 走看看