加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[bigdata-60]mysql的高可用主主同步复制及其在阿里云上的实践

发布时间:2020-12-14 03:14:06 所属栏目:大数据 来源:网络整理
导读:1. 技术资料 http://www.linuxidc.com/Linux/2015-06/118767.htm http://blog.csdn.net/mchdba/article/details/51377989 http://blog.sina.com.cn/s/blog_4f9fc6e10102w6xy.html 推荐 http://www.cnblogs.com/lyhabc/p/3838764.html 2. 可靠的数据:数据不
1. 技术资料

http://www.linuxidc.com/Linux/2015-06/118767.htm
http://blog.csdn.net/mchdba/article/details/51377989
http://blog.sina.com.cn/s/blog_4f9fc6e10102w6xy.html
推荐 http://www.cnblogs.com/lyhabc/p/3838764.html

2.
可靠的数据:数据不能丢失
可用的服务:服务器不能宕机

可用性的技术方案和可用性概率:
??? 要达到99.9%:使用MYSQL复制技术
??? 要达到99.99%:使用MYSQL NDB 集群和虚拟化技术
??? 要达到99.999%:使用shared-nothing架构的GEO-REPLICATION和NDB集群技术


一年计不同可用性允许宕机时间:
??? 90% 36天
??? 99% 3.65天
??? 99.9% 8.76小时
??? 99.99% 52分钟
??? 99.999% 5.26分钟
??? 99.9999% 31.5秒

3. 各种高可用方案

3.1 mysql主从复制 单活
3.2 双主 单活
3.3 双主 配 SAN存储 单活
3.4 DRBD双主配DRBD 单活
3.5 NDB cluster
3.6 第三方Tungsten软件
3.7 网易INNOSQL



4. MHA: Master High Availability Manager and Tools for MySQL
Perl语言写的脚本管理工具,仅适用MySQL Replicaiton二层环境,维持master高可用。
至少需要三台机器来做。
http://www.2cto.com/database/201407/319748.html



5. 另一组解决方案
http://bbs.chinaunix.net/thread-3769165-1-1.html
5.1 lvs+keepalived+mysql 单点写入主主同步
5.2 lvs+keepalived+mysql 单点写入读负载均衡主主同步
5.3 heartbeat高可用主主同步
5.4 heartbeat+drbd+mysql
5.5 mmm方案


6. 实战5.1的解决方案
http://www.111cn.net/database/mysql/65579.htm

6.1 服务器配置
??? mysql1: ttt,10.168.1.111
??? mysql2: zzz,10.168.1.222
??? 用户名和密码 root:tiigggg

6.2 在两个数据都创建测试用户和测试库
create user 'usertest'@'%' identified by '123456';
create database testdb;
grant all privileges on testdb.* to 'usertest'@'%';
这帐号只能远程登录。
create user 'usertest'@'localhost' identified by '123456';
grant all privileges on testdb.* to 'usertest'@'localhost';
这帐号只能本地登录。

需要创建内网ip登录账户
在ttt上执行
create user 'usertest'@'10.168.1.222' identified by '123456';
grant all privileges on testdb.* to 'usertest'@'10.168.1.222';
grant replication slave on *.* to 'usertest'@'10.168.1.222' identified by '123456';
flush privileges;

在zzz上执行
create user 'usertest'@'10.168.1.111' identified by '123456';
grant all privileges on testdb.* to 'usertest'@'10.168.1.111';
grant replication slave on *.* to 'usertest'@'10.168.1.111' identified by '123456';
flush privileges;


6.3 修改ttt的mysql配置/etc/my.cnf的[mysqld]的配置如下
#主主同步配置
log-bin=mysql-bin
server-id=1
expire-logs-days=100
replicate-do-db=testdb
binlog-ignore-db=mysql
binlog-ignore-db=infomation_schema
auto-increment-increment=2
auto-increment-offset=1

6.4 修改zzz的mysql配置/etc/my.cnf的[mysqld]的配置如下
#主主同步配置
log-bin=mysql-bin
server-id=2
expire-logs-days=100
replicate-do-db=testdb
binlog-ignore-db=mysql
binlog-ignore-db=infomation_schema
auto-increment-increment=2
auto-increment-offset=2

二都只有server-id不同和 auto-increment- offset不同
auto-increment-offset是用来设定数据库中自动增长的起点的,这两服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突
replicate-do-db 指定同步的数据库,我们只在两台服务器间同步usertest库
另:auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2


6.5 重启这这两个数据库
service mysqld restart


6.5 互告bin-log信息
在zzz上执行? show master status
在ttt上执行? show master status
能看到各自的master信息。
在ttt上执行如下语句
change master to master_host='10.168.1.222',master_user='usertest',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=525;
也就是说,让ttt的master指向了zzz的相关配置


在zzz上执行如下语句
change master to master_host='10.168.1.111',master_log_pos=106;
也就是说,让ttt的master指向了zzz的相关配置


然后,在两台服务器上都执行statr slave
然后,在两台服务器上都执行show slave status G
如果在两个mysql都看到两个yes,则表明成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

6.6 测试同步效果

6.6.1 同步表
在zzz下执行
use testdb;
create table t1(
?? id INT NOT NULL AUTO_INCREMENT,
?? title VARCHAR(100) NOT NULL,
?? PRIMARY KEY (id)
);

此时,在ttt的testdb下也出现了t1表,表明同步成功。

6.6.2 同步记录
在zzz下插入记录
insert into t1 (title) values('tom');
此时,去ttt检查数据库,能看到这个id为2的记录。

然后,再去ttt插入记录
insert into t1(title) values('sam');
然后就在zzz的t1表也出现了id为3的记录。

这就表明记录是可以同步了。
至此,主主同步设置成功。



6.7 vip的漂移问题

现在有了两个mysql实例,两个ip地址。对外,只能有一个ip地址,这个ip地址上绑定了keepalived和heartbeat等这样的服务,当一台mysql宕机是能自动切换到另一台。
现在的问题是,阿里云的内网地址是固定的,不能随意在一个机器上再加一个虚拟的内网ip。

如果是自己的私有网络,这是没问题的,因为内网ip地址随便设置,但对阿里云来说,不能随便设置内网ip地址,可能会有冲突。

关于这一块的文档有
https://bbs.aliyun.com/read/300778.html
https://yq.aliyun.com/articles/7596?spm=5176.bbsr300778.0.0.DfpiJ7
这里都提到了需要使用私网高可用虚拟IP(Private High-Availability Virtual IP Address,简称HaVip)。

必需开通专有网络,才有havip,文档在此
https://yq.aliyun.com/articles/7603

开通专有网路了
https://help.aliyun.com/document_detail/27710.html
控制台


这个文档描述如何在阿里云用专有网络实现havip这个东西
http://www.cnhejia.cn/aliyun-vpc-keepalived-ha/


开通专有网络,搞两台机器搭建mysql,为了给web提供服务,为了速度,也需要把web后端也放在专有网络,总之,一切都放到专有网络解决。


7. 结论

如果自己配,需要lvs+keepalived+主主同步,比较繁琐。

如果不是敏感数据,建议直接买阿里云的rds双机热备。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读