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 status\G;         #显示从服务状态

如果

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 status\G;         #显示从服务状态

如果

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数据库服务器的高可用及主主数据同步。

mysql5.6主主复制及keepalived 高可用的更多相关文章

  1. Mysql双主热备+LVS+Keepalived高可用部署实施手册

    MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...

  2. Mysql双主热备+LVS+Keepalived高可用操作记录

    MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...

  3. mysql主主、mysql-proxy读写分离、keepalived高可用完美组合

    配置mysql主主复制 服务器A:172.16.100.9 服务器B:172.16.100.10 首先在服务器A和服务器B上各安装好单机版mysql5.7,安装好后,再继续下面的操作. 在服务器A和服 ...

  4. nginx+keepalived高可用及双主模式

    高可用有2中方式. 1.Nginx+keepalived 主从配置 这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候, ...

  5. LVS+Keepalived 高可用环境部署记录(主主和主从模式)

    之前的文章介绍了LVS负载均衡-基础知识梳理, 下面记录下LVS+Keepalived高可用环境部署梳理(主主和主从模式)的操作流程: 一.LVS+Keepalived主从热备的高可用环境部署 1)环 ...

  6. Nginx+keepalived(高可用主备模式)

    Nginx+keepalived(高可用主备模式) 环境:centos6.7 准备:两台服务器(虚拟机).两台应用(Tomcat).Nginx.keepalived server1:192.168.2 ...

  7. Nginx+keepalived(高可用双主模式)

    Nginx+keepalived(高可用双主模式) tips:前面已经介绍了nginx+keepalived高可用主从模式,今天补充下高可用的双主模式,均可以作为主机使用 server1:192.16 ...

  8. nginx+keepalived高可用及双主模式【h】

    高可用有2中方式. 1.Nginx+keepalived 主从配置 这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候, ...

  9. MySQL主主模式+Keepalived高可用

    今天闲来无事,打算搭建一个MySQL的高可用架构,采用的是MySQL的主主结构,再外加Keepalived,对外统一提供虚IP.先来说说背景吧,现在的项目为了高可用性,都是避免单节点的存在的,比如,我 ...

随机推荐

  1. 一、Python安装下载

    下载地址:https://www.python.org/downloads/ 因为Python3.X和2.X有部分不兼容,有些不向下兼容,现在3.5的资料和插件少,故我就学习的2.7.11了; 下载后 ...

  2. Java使用FileReader(file)、readLine()读取文件,以行为单位,一次读一行,一直读到null时结束,每读一行都显示行号。

    //Java使用FileReader(file).readLine()读取文件,以行为单位,一次读一行,一直读到null时结束,每读一行都显示行号. public static void readFi ...

  3. 了解git /github

    一 GIT是什么? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git ...

  4. Android(java)学习笔记33:注册广播接收者

    1. 下面我们先看一部分代码,由代码进行进一步的深入: registerReceiver( new BroadcastReceiver() {//onReceive中代码的执行时间不要超过5s,and ...

  5. Android(java)学习笔记19:Java中InetAddress类概述和使用

    1. 要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机. 在TCP/IP协议中,这个标识号就是IP地址. 那么,我们如果获取和 ...

  6. MySQL:数据库入门篇1

    1,什么是数据库?——存储数据的仓库 数据库技术是计算机应用领域中非常重要的技术,它产生于20世纪60年代末,是数据管理的最新技术,也是软件技术的一个重要分支. 简单的说,数据库就是一个存放数据的仓库 ...

  7. spring boot应用启动原理分析

    spring boot quick start 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个We ...

  8. Android学习笔记_41_TabHost自定义标签和TraceView性能测试

    一.tabhost第一种用法,通过在帧布局放入定义好的page页面来实现,这样导致在当前activity下代码量比较大. 1.页面布局: |        |        |        |    ...

  9. 为什么有IP还需要硬件地址,或者说为什么有硬件地址还需要IP

    只用MAC 虽然每个设备都有唯一的硬件地址,但不都是MAC格式. 只用MAC的话理论上是可行的,但是其中 兼容不同的硬件地址,处理起来是非常困难的.而且数据链路层也没有必要处理网络层的逻辑. 只用IP ...

  10. 分组函数group by和Oracle中分析函数partition by的用法以及区别

    1.分组函数group by和Oracle中分析函数partition by的用法以及区别 2.开窗函数.