mysql高可用 持久层_企业级应用,持久层架构方案一(双主同步高可用)

本文介绍了企业级应用中,为实现高可用、高可靠、高并发的持久层架构方案,特别是双主同步策略。详细讲解了双主同步的原理、架构图、服务器规划、MySQL的安装配置以及主从同步的步骤,通过实例演示了如何在两个节点上配置和测试数据同步。
摘要由CSDN通过智能技术生成

在企业级应用中,持久层也就是数据访问层,也就是我们经常讲的dao层。要想实现高可用、高可靠、高并发,需要怎么做呢?写一个系列抛砖引玉,供大家共同交流学习,一窥究竟。

1.常见问题

#企业级项目,持久层架构基本要求

1.高可用(想要7*24小时提供服务,该怎么办?)

2.高并发读写(用户量越来越多,业务量越来越大,该怎么办)

3.高可靠(万一某一台服务器宕机了,该怎么办?)

2.可选方案

#可选方案:

1.主主同步,读写未分离

适用场景:

读写并发小,数据量小,单表小于500万(满足高可用,高可靠)

2.一主一从,读写分离

适用场景:

读写并发一般,数据量一般,单表小于1000万(满足高可用,高可靠)

3.一主多从,读写分离

适用场景:

写并发一般,读并发高(满足高可用,高可靠,读高并发)

4.多主多从,读写分离

适用场景:

读写并发高(满足高可用,高可靠,读写高并发)

3.双主同步,读写未分离

3.1.同步原理

#通过二进制日志binlog进行同步

3.2.架构图

782d77e54d995d68dd8f5e2538e80080.png

3.3.服务器规划

bfcc01f0da82ce3fd4b82263b38eb15e.png

3.4.安装mysql

3.4.1.hadoop001节点

#第一步:通过yum在线安装

yum install mysql mysql-server mysql-devel

#第二步:启动mysql服务

/etc/init.d/mysqld start

##检查mysql运行状态状态

/etc/init.d/mysqld status

#第三步:通过脚本配置mysql

/usr/bin/mysql_secure_installation

#第四步:远程访问授权

mysql -uroot -p123456

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

flush privileges;

#第五步:设置开机自动启动

chkconfig mysqld --list

chkconfig mysqld on

3.4.2.hadoop002节点

#第一步:通过yum在线安装

yum install mysql mysql-server mysql-devel

#第二步:启动mysql服务

/etc/init.d/mysqld start

##检查mysql运行状态状态

/etc/init.d/mysqld status

#第三步:通过脚本配置mysql

/usr/bin/mysql_secure_installation

#第四步:远程访问授权

mysql -uroot -p123456

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

flush privileges;

#第五步:设置开机自动启动

chkconfig mysqld --list

chkconfig mysqld on

3.5.配置主主同步

3.5.1.master配置

3.5.1.1.编辑my.cnf

#hadoop001作为master

#编辑文件

vi /etc/my.cnf

------------------------------------------------------------

[mysqld]

server-id = 1 #服务唯一表示id

log-bin = mysql-bin #打开binlog日志

binlog-ignore-db = mysql,information_schema #忽略写入binlog日志的库

auto-increment-increment = 2 #字段变化增量值,步长为2

auto-increment-offset = 1 #初始字段id偏移量为1

slave-skip-errors = all #忽略所有复制产生的错误

--------------------------------------------------------------

#重新启动服务

service mysqld restart

3.5.1.2.查看log bin日志和pos位置

#登录mysql

mysql -uroot -p123456

#查看master状态

mysql> show master status;

666ba0dcfad6c01c7b577aea8042001b.png

3.5.1.3.同步配置

#登录mysql

mysql -uroot -p123456

mysql> GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.80.%' IDENTIFIED BY '123456';

mysql> flush privileges;

mysql> change master to

-> master_host='192.168.80.31',

-> master_user='rep',

-> master_password='123456',

-> master_log_file='mysql-bin.000001',

-> master_log_pos=106;

mysql> start slave; #启动同步

3.5.2.backup配置

3.5.2.1.编辑my.cnf

#hadoop002作为backup

#编辑文件

vi /etc/my.cnf

------------------------------------------------------------

[mysqld]

server-id = 2 #服务唯一表示id

log-bin = mysql-bin #打开binlog日志

binlog-ignore-db = mysql,information_schema #忽略写入binlog日志的库

auto-increment-increment = 2 #字段变化增量值,步长为2

auto-increment-offset = 2 #初始字段id偏移量为1

slave-skip-errors = all #忽略所有复制产生的错误

--------------------------------------------------------------

#重新启动服务

service mysqld restart

3.5.2.2.查看log bin日志和pos位置

#登录mysql

mysql -uroot -p123456

#查看master状态

mysql> show master status;

d5fc772f55aac57c8a3bb8593e588dde.png

3.5.2.3.同步配置

#登录mysql

mysql -uroot -p123456

mysql>GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.80.%' IDENTIFIED BY '123456';

mysql> flush privileges;

mysql> change master to

-> master_host='192.168.80.30',

-> master_user='rep',

-> master_password='123456',

-> master_log_file='mysql-bin.000001',

-> master_log_pos=106;

mysql> start slave; #启动同步

3.6.查看同步状态

#登录mysql

mysql -uroot -p123456

#查看同步状态

show slave status\G;

3.6.1.hadoop001节点

48558210cc1e641ca58c32c1a6eff325.png

3.6.2.hadoop002节点

61446f36b56f74bd499c4395b9bb51c3.png

3.7.测试同步

3.7.1.master操作

#登录mysql

mysql -uroot -p123456

#使用test数据库

use test;

#创建一张表

create table a(id bigint primary key auto_increment,name varchar(20))ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

#插入数据

insert a(name) values('zhangs');

3de1c27a626b22c36122548a03cbfbfa.png

3.7.2.backup操作

#登录mysql

mysql -uroot -p123456

#使用test数据库

use test;

#创建一张表

create table b(id bigint primary key auto_increment,name varchar(20))ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

#插入数据

insert b(name) values('lisi');

40954a00bedb48b0e90af6d91e6b33c0.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值