今天星期天,么事就写个MYSQL的主主架构的博客,原理如下图,不是我画的网上找的。

主机作用 操作系统 mysql版本 对应IP vip数据库
mysqlA(主) centos6.4 mysql 5.5.48 192.168.48.129 192.168.48.126
mysqlB(备) centos6.4 mysql 5.5.48 192.168.48.132

一: 在每个节点安装mysql数据库:

《1》到官网去下载最新的yum仓库,并安装

http://dev.mysql.com/downloads/repo/yum/

yum install mysql-community-server

《2》用第三方yum

1、导入第三方源webtatic

rpm -Uvh http://repo.webtatic.com/yum/el6/latest.rpm
            2、如果已安装低版本的mysql就删除

yum remove mysql mysql-*
            3、安装libmysqlclient15

yum install libmysqlclient15 --enablerepo=webtatic
            4、安装mysql5.5
                yum install mysql55 mysql55-server --enablerepo=webtatic

《3》安装MariaDB  我这里用的这安装的

1、vi /etc/yum.repos.d/MariaDB.repo  加个文件在yum仓库中

 [mariabd]name=MariaDBbaseurl=http://yum.mariadb.org/5.5.48/centos6-x86/gpgkey=http://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1yum install -y MariaDB-server MariaDB-client  ##安装数据库service mysql start  ##启动服务GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "123456";##设置ROOT密码;update mysql.user set authentication_string=password('123456') where user='root' ;##mysql5.7这样更新密码。flush privileges;##刷新

《4》下面是我安装的数据库的一些信息

二、 在Mysql上配置my.cnf

《1》配置MysqlA

innodb_file_per_table = on

skip_name_resolve = on

server-id = 1

log-bin = mysql-bin

relay-log = mysql-relay-bin   #单个主从这个可以不写

replicate-wild-ignore-table=mysql.%

replicate-wild-ignore-table=test.%

replicate-wild-ignore-table=information_schema.%

《2》配置MysqlB

server-id = 2

log-bin = mysql-bin  ###单个主从这个可以不写,咱们是互相主从都要设置

relay-log = mysql-relay-bin

replicate-wild-ignore-table=mysql.%

replicate-wild-ignore-table=test.%

replicate-wild-ignore-table=information_schema.%

注释:

server-id 是节点的标识,主从节点不能相同,必须唯一。

log-bin 表示开启mysql的binlog日志功能。

‘mysql-bin’表示日志文件的名称,也可以叫aa.log 看你自己了,mysql会在名称后面加上数字,mysql-bin.000001、mysql-bin.000002等日志文件

relay-log 用来定义relay-log日志文件

replicate-wild-ignore-table是复制过程过滤选项,可以过滤不需要的数据库和表,例如 'mysql.%' 表示不复制mysql库

replicate-wild-do_table  明确指定复制那个数据库和表

注意:不要在主库上使用binlog-do-db 或者 binlog-ignore-db 选项,也不要在从库上使用replicate-do-db或者replicate-ignore-db选项,因为这样可能产生跨库更新失败的问题,建    议在从库使用replicate-wild-do-table和replicate-wild-ignore-table连个选项解决复制过滤的问题。

三、 手动同步一次数据,新数据库不用这部分

可以直接锁定  flush tables with read lock; 或者直接关闭数据库打包目录/var/lib/mysql  到从服务器恢复。

tar zcvf /var/lib/mysql.tar.gz  /var/lib/mysql  到备的上面解压。

在my.cnf  添加read-only=1开启只读  目的都是保证复制前数据都是一样的。

四、配置MysqlA---MysqlB的主从配置

《1》在MysqlA创建复制用户并且授权。

grant replication slave on *.* to 'tao'@'192.168.48.%' identified by 'www.daxia.help';

《2》在B服务器上设置主服务器信息:注意:master_log_file和master_log_pos这两个选项的值要对应在MysqlA上通过SQL语句"show master status" 查询到的值

change master to \

master_host='192.168.48.129',

master_user='tao',

master_password='www.daxia.help',

master_log_file='mysql-bin。000005',

master_log_pos=405;

五、配置MysqlB---MysqlA的主从配置

《1》在MysqlB创建复制用户并且授权。

grant replication slave on *.* to 'tao'@'192.168.48.%' identified by 'www.daxia.help';

《2》在A服务器上设置主服务器信息:注意:master_log_file和master_log_pos这两个选项的值要对应在MysqlB上通过SQL语句"show master status" 查询到的值

change master to \

master_host='192.168.48.132',

master_user='tao',

master_password='www.daxia.help',

master_log_file='mysql-bin',

master_log_pos=106;

注意:

我在主上执行了自己同步自己了 要取消用这个命令 change master to master_host=' ';

六:在MysqlA和MysqlB上测试数据的复制情况

《2》在MysqlB上建立库,表和插入数据在MysqlA上查看;

《3》我在test下面建立了一个表,是不能同步过来的,说明过滤也对的。

七:配置keepalived实现mysql双主高可用。

keepalived 配置主和从的配置就是priority 优先级一个100一个90 从的取消nopreempt选项即可。

! Configuration File for keepalived
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVEL
}
Vrrp_script check_mysqld {
script "/etc/keepalived/check_slave.pl 127.0.0.1"
interval 2
weight 21
}
vrrp_instance HA_1 {state BACKUP      ###  在MYSQLA和MysqlB上都配置为BACKUPinterface eth0virtual_router_id 80priority 100advert_int 2nopreempt            ## 不抢占模式,只在优先权高的服务器上设置,优先级第的可以不设置authentication {auth_type PASSauth_pass daxia.help}track_script {
check_mysqld
}virtual_ipaddress {192.168.48.126}
}

check_slave.pl脚本如下:

#!/usr/bin/perl -w
use DBI;
use DBD::mysql;# CONFIG VARIABLES
$SBM = 120;
$db = "mysql";
$host = $ARGV[0];
$port = 3306;
$user = "root";
$pw = "123456";# SQL query
$query = "show slave status";$dbh = DBI->connect("DBI:mysql:$db:$host:$port", $user, $pw, { RaiseError => 0,PrintError => 0 });if (!defined($dbh)) {exit 1;
}$sqlQuery = $dbh->prepare($query);
$sqlQuery->execute;$Slave_IO_Running =  "";
$Slave_SQL_Running = "";
$Seconds_Behind_Master = "";while (my $ref = $sqlQuery->fetchrow_hashref()) {$Slave_IO_Running = $ref->{'Slave_IO_Running'};$Slave_SQL_Running = $ref->{'Slave_SQL_Running'};$Seconds_Behind_Master = $ref->{'Seconds_Behind_Master'};
}$sqlQuery->finish;
$dbh->disconnect();if ( $Slave_IO_Running eq "No" || $Slave_SQL_Running eq "No" ) {exit 1;
} else {if ( $Seconds_Behind_Master > $SBM ) {exit 1;} else {exit 0;}
}

八、进行测试:

《1》登录

《2》建立库和表看看各个节点的信息是否正确。

在远程上建立信息:

在MysqlB和MYSQLA上查看都有信息:

《3》把mysqlB弄故障,看切换的正确可行:

注意的问题:

经过我测试我,我的监控脚本这样写的把那个weight选项取消就可以使用高可用,要是加上就会出现在mysqlA复制出错,vip就会漂移到mysqlB上面,这时把MysqlA修复好后加上nopreempt选项就不会抢占,当这时候Mysqlb的复制出问题了就不会漂移VIP因为那个weight优先级的问题,搞了很久也不行,反正把它取消就可以使用咱们的高可用,你要是能解决请下面留言给我,咱们一起学习。

vrrp_script check_mysqld {script "/etc/keepalived/mysql.pl 127.0.0.1"interval 2}

还有就是在写检测脚本的时候先进行运行测试:

[root@test1 keepalived]# ./mysql.pl 127.0.0.1
[root@test1 keepalived]# echo $?
0

正常就是0不正常就是1测试正常在上还要安装依赖的# yum install  perl-DBI perl-DBD-MySQL -y确保这些包也安装了要调用这些库。

九、用shell脚本的方法配置Keepalived,连个就是下面检测自己的ip3306端口就行我贴一个主机的(注意这个方法没有上面的好因为只能检测3306端口不知道slave的情况,测试直接关掉MYSQL)

! Configuration File for keepalived
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVEL
}
vrrp_instance HA_1 {state BACKUPinterface eth0virtual_router_id 80priority 100advert_int 2nopreemptauthentication {auth_type PASSauth_pass daxia.help}virtual_ipaddress {192.168.48.126}virtual_server 192.168.48.126 3306 {        ///检测自己的3306端口不通就执行下面的Mysql.sh脚本重启keepalived服务让vip飘到另外的机器上去
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
real_server 192.168.48.129 3306 {
weight 1
notify_down /etc/keepalived/mysql.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry    3
connect_port 3306
}
}
}

mysql.sh脚本如下

[root@test1 keepalived]# vi mysql.sh
#!/bin/bash
/etc/init.d/keepalived  stop
sleep 10
/etc/init.d/keepalived  start

我停止mysql 就会触发脚本让vip飘到另外一个机器上下面是keepalive的信息:

配置完成!!!

转载于:https://blog.51cto.com/shaonian/1757212

mysql 主主互备实现相关推荐

  1. mysql系统搭建互备DB(双主)记录

    背景:所负责的自动化持续交付平台业务量逐渐增长,以防不测,需要搭建备份系统,经过多方考量: 选择采取mysql的主从系统进行备份:互为主从(即所谓双主): PS: 三种备份方式: a.脚本通过mysq ...

  2. mysql 5.6 双向互备_mysql双主互备

    5.则配置同步信息. change master to master_host='192.168.1.102',master_port=3306,master_user='replication',m ...

  3. mysql主主互备架构

    mysql主主互备架构 企业级mysql集群具备高可用,可扩展性,易管理,低成本的特点.mysql主主互备就是企业中常用的一个解决方案.在这种架构中,虽然互为主从,但同一时刻只有一台mysql 可读写 ...

  4. docker实现MySQL主主互备(主主双机热备)

    文章目录 环境配置 主主互备(主主双机热备) 主MySQL服务器A 主MySQL服务器B 配置主MySQL服务器A和主MySQL服务器B 环境配置 本地操作系统:Win10 虚拟机的操作系统:Cent ...

  5. CentOS8配置MySQL双主互备(安装centos8及MySQL)

    如果对您有帮助请点赞,谢谢!一个赞至少让我开心一天. CentOS8配置MySQL双主互备 1安装操作系统centos8及配置 启用SSH 2安装MySQL及配置 2.1下载镜像 2.2安装镜像 2. ...

  6. mysql主主和F5高可用_MYSQL 主主热备高可用方案与实现

    咱们选择主主互热备作生产环境MYSQL高可用方案,该方案的优势是在压力大的时候,仍然能够经过设置负载均衡来作业务分发.并且最重要的是配置简单,两份配置都同样,改个IP就能够 就喜欢简单的东西.mysq ...

  7. linux 双mysql_MySQL双主互备+Keepalived高可用架构实现案例

    一.环境介绍 1.1.规划 序号 类别 版本 主机名 IP 端口 备注 1 OS CentOS release 6.9 (Final) (minimal) my1 172.16.210.180 830 ...

  8. CentOS7中MySQL5.7 主主互备配置

    CentOS7 中 MySQL 5.7 主主互备配置 ​ 先从MySQL对数据库复制的能力看,MySQL支持单向.异步的复制.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服 ...

  9. mysql连接主备_mysql主备配置方法

    1. 选择两台机器(这里选的centos6.5 final),安装相同版本的mysql yum installmysql ;yum install mysql-server; 2. 启动mysql s ...

最新文章

  1. Java互联网架构-京东国美高并发核心技术“秒杀”
  2. C++中函数的默认参数
  3. 数据预处理(part1)--单个预测变量数据变换R语言
  4. 《WinForm开发系列之控件篇》Item13 DirectoryEntry(暂无)
  5. continue详细讲解
  6. spark学习-69-源代码:Endpoint模型介绍(1)
  7. Ext JS 4 升级指南
  8. 递归算法,如何把list中父子类对象递归成树
  9. 黄东旭:When TiDB Meets Kubernetes
  10. Atitit uke证件编码规范与范本
  11. 阿里本地生活电话面试
  12. 搜狗收录提交入口之搜狗泛目录实现
  13. 如何在 Mac 上格式化 SD 卡?
  14. Qt解决连接https报错
  15. mkisofs命令制作光盘ISO
  16. POJ 2856 Y2K Accounting Bug【简单暴力】
  17. 下载iconfont图标
  18. iOS逆向一iPhone手机越狱/APP脱壳/IPA签名
  19. TexturePacker 自定义模板
  20. Cesium,ClippingPlanes,任意剪裁面对3DTiles剪裁

热门文章

  1. 搞清axis的含义,这一篇就够了!
  2. NLP复习资料(3)-六~七章:马尔科夫模型与条件随机场、词法分析与词性标注
  3. Pytorch(5)-梯度反向传播
  4. python 系统学习笔记(十二)---os os.path os.walk
  5. 用Unix的设计思想来应对多变的需求
  6. 顶级投资者的21条箴言(组图)
  7. C语言 socket 编程学习
  8. Java已死?九百万程序员说不
  9. JWT ( JSON Web Token ) 入门教程
  10. 解决 idea 中 jsp 修改后页面不生效