在笔者完成前两篇文章Mariadb基于GTID复制实验和mysql(mariadb)数据库主备同步 后,一直没有开展双主复制配置。今天在小孩睡觉期间,得闲来把最后的搞定。人至践者无敌,每次捣鼓实验记录下来,最后都可以把两个树莓派上面的数据库双主配置和keepalived高可用都配置好。简书是个好平台,让成长有迹可循!
实验平台:
树莓派maria:192.168.31.76
树莓派LAMP:192.168.31.82
一、修改配置文件
在前两次的实验的基础上,完成了大部分工作,主备完成了基于GTID复制,这一次就需要在备机上配置生成二进制文件,和主机上一致。但需要增加的是,自动增长id的区别,防止同时写入时自增ID冲突。修改树莓派maria的/etc/mysql/my.cnf配置文件,在添加使用奇数的ID。修改树莓派LAMP的/etc/mysql/my.cnf配置文件,添加下面的配置,除了server-id外,其他和树莓派maria都一致,同时还要添加使用偶数的ID.。
server-id=2主机id,要唯一
log_bin=mysql-bin 二进制日志文件名称
log_error=mysql-bin.err 错误日志名称
binlog_do_db=masterslave 只复制数据库masterslave
自增ID配置:
1、 定义一个节点使用奇数ID:
auto_increment_offset=1起始节点
auto_increment_increment=2每次偏移节点,即往上累加数
2、 另一个节点使用偶数ID:
auto_increment_offset=2
auto_increment_increment=2
二、创建同步账号并重启
在树莓派LAMP上,创建同步账号sync,密码sync,老生常谈了。
grant replication slave on *.* to 'sync'@'192.168.31.82' identified by 'sync';
flush privileges;
因为两个服务器都修改了配置文件,就需要service mysqld restart重启数据库,让新配置文件失效。
三、树莓派maria定向到树莓派LAMP,完成双主功能
在树莓派maria数据库命令行,执行下面两条命令,完成maria作为从机向树莓派LAMP复制,复制方式为gtid。
CHANGE MASTER TO master_host='192.168.31.33', master_port=3306,master_user='sync',master_password='sync',master_use_gtid=current_pos;
START SLAVE;
命令show slave status \G;查作为从机的状态,两个进程状态、Slave_IO_Running、Slave_SQL_Running,GTID状态。
四、功能测试
在树莓派maria上插入记录,自增ID奇数:
insert into test(THING,ADDRESS) value ('主主复制','主主复制');
在树莓派LAMP上插入另一条记录,自增ID偶数:
insert into test(THING,ADDRESS) value ('双主复制','双主复制');
查看两个数据库中test表中数据是否一致。ID为13是树莓派maria插入的,ID为14是树莓派LAMP插入的,即使同一时间在两个树莓派数据库插入数据库,因为自增ID不一样,所以也不会冲突。
在实际运用中,笔者是配置了keepalived。参考我的文章-Keepalived让树莓派也可以VIP漂移。树莓派maria抢占VIP(Virtual IP Address),通过IP地址192.168.31.100对外提供服务。
在树莓派maria上 执行/etc/init.d/keepalived stop,停止keepalived 进程,查看树莓派LAMP上面的keepalived日志;树莓派maria上 执行/etc/init.d/keepalived start,启动keepalived 进程,查看树莓派LAMP上面的keepalived日志。可以看到16:53:06到17:02:15分之间,树莓派LAMP从master变为backup。
在数据库方面,笔者使用Navicat ,通过VIP来连接数据库,测试成功。
Navicat通过VIP连接数据库使用phpmyadmin连接数据库,测试成功,可以看到100的主机里面对应的master是82机子,那么100的IP是漂移在76这台树莓派上面的。
phpmyadmin通过VIP连接数据库两个树莓派打造了高可用的数据库服务器,那么在运用程序端就可以用100的IP来完成数据库读写功能了。在运用中,这种方案的备机是热备状态,不能负载均衡,只是作为灾备功能。而且不建议两个数据库同时有写入操作,因为存在数据一致性问题。在笔者见过的数据库服务器中,为了实现服务器高可用配置,需要有一台备用数据库随时接管服务。还有就是有两个服务器,应用服务器和数据库服务器,数据库服务器故障时,应用服务器同时完成应用服务和数据库服务。
网友评论