`
icarusli
  • 浏览: 531607 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

MySQL多主同步 负载均衡

阅读更多

解决多台写服务器主自增长ID重复问题

二台Mysql服务器,他们的IP地址分别为:
A:192.168.0.97
B:192.168.0.98
数据库都是 test_3306
首先我给两台服务器的my.ini 贴出来
A:my.ini

server-id=2
master-host=192.168.0.98
master-user=mydb
master-password=123
master-port=3306
master-connect-retry=1
replicate-do-db=tbqu
log-bin=
log-slave-updates
binlog-ignore-db=mysql
slave-skip-errors=all

B:my.ini

server-id=1
master-host=192.168.0.97
master-user=mydb
master-password=123
master-port=3306
master-connect-retry=1
replicate-do-db=tbqu
log-bin=
log-slave-updates
binlog-ignore-db=mysql
slave-skip-errors=all

在这里,配置文件和主从配置方法基本上一样
log-slave-updates 这个参数一定要加上,否则不会给更新的记录些到二进制文件里
slave-skip-errors 是跳过错误,继续执行复制操作
其他参数请参照 http://www.tbqu.com/post/15.html

多主互备和主从复制有一些区别,因为多主中 都可以对服务器有写权限,所以设计到自增长重复问题

出现的问题(多主自增长ID重复)
1:首先我们通过A,B的test表结构
2:掉A,在B上对数据表test(存在自增长ID)执行插入操作,返回插入ID为1
3:后停掉B,在A上对数据表test(存在自增长ID)执行插入操作,返回的插入ID也是1
4:然后 我们同时启动A,B,就会出现主键ID重复

解决方法:
我们只要保证两台服务器上插入的自增长数据不同就可以了
如:A查奇数ID,B插偶数ID,当然如果服务器多的话,你可以定义算法,只要不同就可以了

在这里我们在A,B上加入参数,以实现奇偶插入

A:my.ini上加入参数

auto_increment_offset = 1
auto_increment_increment = 2
这样A的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID了

B:my.ini上加入参数

auto_increment_offset = 2
auto_increment_increment = 2
这样B的auto_increment字段产生的数值是:2, 4, 6, 8, …等偶数ID了

可以看出,你的auto_increment字段在不同的服务器之间绝对不会重复,所以Master-Master结构就没有任何问题了。当然,你还可以使用3台,4台,或者N台服务器,只要保证auto_increment_increment = N 再设置一下auto_increment_offset为适当的初始值就可以了,那样,我们的MySQL可以同时有几十台主服务器,而不会出现自增长ID重复。

在这里我们说的是2台MYSQL服务器,你也可以扩展到多台,实现方法类似
A -> B -> C-> D ->A
这样一个环形的备份结构就形成了,最后可要记住 自增长ID(主键)要设计好哦,否则会出错的。

————————————————————————————————————————–

假定有三台Mysql服务器,他们的IP地址分别为:
192.168.1.8
192.168.1.88
192.168.1.188
在192.168.1.8的安装目录下找到my.ini文件,在该文件的最后加上:
server-id=1
log-bin
#asyntest1是我用来试验的数据库名称,到时候要换成你的数据库名字
binlog-do-db=asyntest1
#下面这句话很重要,只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器
log-slave-updates
master-host=192.168.1.188
master-user=root
#在此处填入192.168.1.188的root密码
master-password=XXXXX
#asyntest1是我用来试验的数据库名称,到时候要换成你的数据库名字
replicate-do-db=asyntest1
master-connect-retry=10
#出现错误后忽略,如果不加这个,出现任何错误,同步进程会终止
slave-skip-errors=all

在192.168.1.88的安装目录下找到my.ini文件,在该文件的最后加上:
server-id=2
log-bin
#asyntest1是我用来试验的数据库名称,到时候要换成你的数据库名字
binlog-do-db=asyntest1
#下面这句话很重要,只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器
log-slave-updates
master-host=192.168.1.8
master-user=root
#在此处填入192.168.1.8的root密码
master-password=XXXXX
#asyntest1是我用来试验的数据库名称,到时候要换成你的数据库名字
replicate-do-db=asyntest1
master-connect-retry=10
#出现错误后忽略,如果不加这个,出现任何错误,同步进程会终止
slave-skip-errors=all
在192.168.1.188的安装目录下找到my.ini文件,在该文件的最后加上:
server-id=3
log-bin
#asyntest1是我用来试验的数据库名称,到时候要换成你的数据库名字
binlog-do-db=asyntest1
#下面这句话很重要,只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器
log-slave-updates
master-host=192.168.1.88
master-user=root
#在此处填入192.168.1.88的root密码
master-password=XXXXX
#asyntest1是我用来试验的数据库名称,到时候要换成你的数据库名字
replicate-do-db=asyntest1
master-connect-retry=10
#出现错误后忽略,如果不加这个,出现任何错误,同步进程会终止
slave-skip-errors=all

在192.168.1.8, 192.168.1.88, 192.168.1.188上建立完全一样的数据库asyntest1,重启这三台数据库,然后在任何一台机器上进行的更新操作,都会同步到另外的两台机 器上,这是一种环形同步,在192.168.1.8有任何修改,会首先同步到192.168.1.88的机器上,88的机器再将同步的数据同步到 192.168.1.188的机器上。同样,如果在192.168.1.88上有任何更新,首先会同步到192.168.1.188的机器上,然后再同步 到192.168.1.8的机器上;而在192.168.1.188的机器上有任何更新,首先会同步到192.168.1.8的机器上,然后在同步到 192.168.1.88的机器上。利用这种原理,可以解决任意多台机器的互相同步问题。

如果出现问题,首先请在每一台服务器上用命令行通过telnet命令检查其他机器3306端口的连通情况。另外,请检查各机器的防火墙设置和杀毒软件的配置。可将这些软件暂停后进行试验。

分享到:
评论

相关推荐

    Keepalive+mysql主主同步.pdf

    Keepalive+mysql主主同步是指在高可用性环境中,使用Keepalive和MySQL主主同步技术来实现数据库的高可用性和负载均衡。下面是相关的知识点: 一、Keepalive简介 Keepalive是一个高可用性解决方案,主要用于实现...

    mysql负载均衡完美解决方案

    MySQL负载均衡是数据库系统优化和高可用性的重要手段,它能有效地分散数据库服务器的压力,确保数据的稳定性和服务的连续性。在这个完美解决方案中,主要采用了读写分离、主从复制以及HAProxy作为负载均衡器的技术...

    windows下mysql主备双向复制与mycat负载均衡

    在Windows环境下搭建MySQL主备双向复制以及Mycat负载均衡,是一种常见的数据库架构策略,用于提高数据的可用性、一致性和系统的负载均衡能力。以下详细的知识点说明了这一过程: 1. MySQL主备双向复制的概念和作用...

    搭建MySQL高可用负载均衡集群.docx

    随着用户量和数据量的不断增长,单个MySQL实例可能无法满足高并发和大数据处理的需求,这时就需要采用一些策略来扩展数据库服务,比如主主复制、读写分离、高可用负载均衡等。 1、**简介** MySQL高可用负载均衡...

    Mysql数据库与SQL优化+集群+负载均衡.doc

    Galera Cluster 是一种高可用性和高性能的 MySQL 集群解决方案,通过多个节点组成的集群系统来实现数据同步和负载均衡。 MySQL Fabric 是 MySQL 官方提供的一款 MySQL 集群解决方案,通过 Fabric Node 和 Fabric ...

    mysql集群多主同步教程.zip

    MySQL集群(MySQL Cluster)是MySQL数据库的一种分布式存储模式,它通过数据分片(Sharding)将数据分散在多个节点上,以实现负载均衡和高可用性。集群中的每个节点都包含完整的数据库副本,这样即使某个节点出现...

    LVS+KEEPALIVED+MYSQL 单点写入读负载均衡主主同步高可用方案安装教程

    在本方案中,LVS负责将前端用户的读请求分发到多个MYSQL服务器上,实现负载均衡。 2. KEEPALIVED KEEPALIVED是一个用C语言编写的软件,它可以用来实现虚拟路由器冗余协议(VRRP)和负载均衡,它在LVS的基础上添加高...

    mysql双主复制+lvs+keepalived实现mysql负载均衡.pdf

    MySQL 双主复制 + LVS + Keepalived 实现 MySQL 负载均衡 MySQL 双主复制 + LVS + Keepalived 是一种常见的 MySQL 负载均衡解决方案,通过使用双主复制确保数据的一致性,使用 LVS 实现负载均衡,使用 Keepalived ...

    Nginx Keepalived Tomcat MySQL高可用负载均衡Web应用架构实践.pdf

    最后,需要安装MySQL,配置MySQL主从同步,实现读写分离和负载均衡。 第三部分:架构实现 本文的架构实现如图1所示。服务器1(master)和服务器2(backup)分别安装Nginx和Keepalived,Nginx分别配置服务器3和...

    Mysql5.5与Postgresql9.1负载均衡比较.pdf

    本文档将深入比较MySQL 5.5和PostgreSQL 9.1这两个版本在负载均衡方面的不同,提供给数据库管理员部署和扩展网站规模时的参考。 首先,我们需要了解负载均衡在数据库中的作用。负载均衡是为了提高数据库的高可用性...

    LVS+Keepalived+MySQL半同步主主复制高可用方案.docx

    - 易于扩展,可添加多个从服务器实现负载均衡。 缺点: - 在数据库切换过程中可能出现短暂的事务丢失。 1.4 实战应用 1.4.1 适用场景 适用于仅有两台数据库服务器且尚未实现读写分离的环境。这种方案简化了单台...

    Keepalived+MySQL双主.docx

    Keepalived+MySQL 双主同步复制可以实现高可用性和负载均衡,提高系统的可靠性和可扩展性。通过配置网络、安装 Keepalived、配置 Keepalived 和配置 MySQL,能够实现一套高可用性的 MySQL 集群系统。

    JBoss负载均衡与Mysql主从备份

    主从备份的基本思路是在多个MySQL服务器之间同步数据,通常有一个主服务器(Master)和一个或多个从服务器(Slave)。主服务器负责写入操作,而从服务器则负责读取操作。当主服务器的数据发生变化时,这些变化会被...

    mysql双主复制+lvs+keepalived实现mysql负载均衡归类.pdf

    MySQL双主复制+LVS+Keepalived实现MySQL负载均衡归类 本文档将详细介绍如何使用MySQL双主复制、LVS(Linux Virtual Server)和Keepalived实现MySQL负载均衡归类。该解决方案可以提供高可用性和负载均衡的MySQL...

    mysql-cluster-solutions.rar_cluster_mysql cluster_负载均衡

    MySQL Cluster是一种高可用性和负载均衡的数据存储解决方案,它通过分布式数据存储和计算来提供持续的服务。在本解决方案中,我们主要关注的是如何构建和管理MySQL Cluster以实现数据库的高可用性和负载均衡。 首先...

    mysql负载均衡和双击热备

    ### MySQL负载均衡与双主热备方案详解 #### 一、引言 随着业务规模的不断扩大,单一数据库服务器往往难以满足高并发访问的需求。为了提高系统的稳定性和可用性,采用MySQL负载均衡和双主热备(Master-Master ...

    Linux源码安装MySQL+MySQL主从+Nginx+Nginx负载均衡+redis+php+phpredis+tomcat

    在本教程中,我们将深入探讨如何在Linux环境中源码安装MySQL、MySQL主从复制、Nginx、Nginx负载均衡、Redis、PHP、phpredis以及Tomcat。这些技术是构建高效、可扩展的Web应用架构的基础。让我们逐一了解安装过程。 ...

    MySQL如何实现负载均衡功能

    MySQL的负载均衡是一种技术,旨在优化数据库系统的性能和可伸缩性,通过将数据库操作分散到多个服务器上,以防止单个服务器过载。本文主要介绍如何在MySQL环境下实现负载均衡,包括基本思路和多种实现方式。 **一、...

Global site tag (gtag.js) - Google Analytics