MYSQL多主同步,负载均衡

转载 2015年11月18日 14:59:43

要点: 1、环形同步 2、自增ID重复


解决多台写服务器主自增长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端口的连通情况。另外,请检查各机器的防火墙设置和杀毒软件的配置。可将这些软件暂停后进行试验。



双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计

前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上。于是设计了如下的架构。 架构简介 ...
  • clz1314521
  • clz1314521
  • 2016年06月16日 22:51
  • 3012

Haproxy+多台MySQL从服务器(Slave) 实现负载均衡

本系统采用MySQL一主多从模式设计,即1台 MySQL“主”服务器(Master)+多台“从”服务器(Slave),“从”服务器之间通过Haproxy进行负载均衡,对外只提供一个访问IP,当程序需要...
  • nimasike
  • nimasike
  • 2015年08月28日 10:19
  • 11151

SpringBoot微服务 +tomcat集群+Ngnix负载均衡+Mysql主从复制,读写分离(4)

四:mysql主从复制,读写分离 1.首先把mysql源码包文件拷到两台linux服务器上,然后在两台服务器上安装Mysql数据库 安装 MySQL 1 安装 ncurses ...
  • u011687186
  • u011687186
  • 2017年03月15日 14:46
  • 2539

MySQL多主同步 负载均衡(转)

读到本文前总以为id重复需要修改程序才能解决,原来mysql本身为我们提供了这个功能,自己太小白了!!! 解决多台写服务器主自增长ID重复问题,值得参考,希望对大家所帮助。 二台Mysql服务器,...
  • calllmq
  • calllmq
  • 2012年02月16日 11:31
  • 252

MySQL多主同步 负载均衡

http://blog.sina.com.cn/s/blog_56115979010144dy.html 解决多台写服务器主自增长ID重复问题[主主同步] 二台Mysql服务器,他们的IP地址...
  • adparking
  • adparking
  • 2012年05月14日 16:37
  • 564

centos7.2 MYSQL双主+半同步+keepalived实现高可用负载均衡

这两天了解了一下mysql的集群方案,发现有很多解决方案,有复杂的也有简单的,有兴趣的参考下面网址:http://www.cnblogs.com/Kellana/p/6738739.html 这里,我...
  • weixin_41004350
  • weixin_41004350
  • 2017年11月09日 19:25
  • 89

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

LVS+KEEPALIVED+MYSQL 单点写入读负载均衡主主同步高可用方案安装教程 一、         安装环境 Ø  软件版本 CENTOS 6.5 KEEPALIVED 1.2.12 |...
  • sartner
  • sartner
  • 2014年12月10日 22:40
  • 1394

mysql高可用探究(三)Lvs+Keepalived+Mysql单点写入读负载均衡主主同步高可用方案

Lvs+Keepalived+Mysql单点写入读负载均衡主主同步高可用方案 1.1  方案简介 Lvs+keepalived作为目前比较流行的高可用解决方案,lvs提供负载均衡,keepal...
  • libing13810124573
  • libing13810124573
  • 2014年04月09日 22:24
  • 529

负载均衡多服务器文件同步Demo基于SVN

  • 2012年03月02日 10:26
  • 9.16MB
  • 下载

apache2_2_11+tomcat2_0_18负载均衡,session同步

  • 2010年06月07日 11:04
  • 97KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MYSQL多主同步,负载均衡
举报原因:
原因补充:

(最多只允许输入30个字)