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

  在企业级应用中,持久层也就是数据访问层,也就是我们经常讲的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');

 

posted @ 2019-06-10 17:10  小杨【0和1】  阅读(465)  评论(0编辑  收藏  举报