企业级应用,持久层架构方案一(双主同步高可用)
在企业级应用中,持久层也就是数据访问层,也就是我们经常讲的dao层。要想实现高可用、高可靠、高并发,需要怎么做呢?写一个系列抛砖引玉,供大家共同交流学习,一窥究竟。
1.常见问题
#企业级项目,持久层架构基本要求
1.高可用(想要7*24小时提供服务,该怎么办?)
2.高并发读写(用户量越来越多,业务量越来越大,该怎么办)
3.高可靠(万一某一台服务器宕机了,该怎么办?)
2.可选方案
#可选方案:
1.主主同步,读写未分离
适用场景:
读写并发小,数据量小,单表小于500万(满足高可用,高可靠)
2.一主一从,读写分离
适用场景:
读写并发一般,数据量一般,单表小于1000万(满足高可用,高可靠)
3.一主多从,读写分离
适用场景:
写并发一般,读并发高(满足高可用,高可靠,读高并发)
4.多主多从,读写分离
适用场景:
读写并发高(满足高可用,高可靠,读写高并发)
3.双主同步,读写未分离
3.1.同步原理
#通过二进制日志binlog进行同步
3.2.架构图
3.3.服务器规划
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;
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;
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节点
3.6.2.hadoop002节点
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');
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');
我们唯一能够控制的是自己的脾气和努力