zoukankan      html  css  js  c++  java
  • 企业级应用,持久层架构方案一(双主同步高可用)

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

        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');

  • 相关阅读:
    Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++4.2 failed with exit code 1
    Mark !
    delphi 与 C++ 进程之间的命名管道通信
    delphi 获取网页所有链接并访问赚取金币
    char类型转化为string类型 string(int n, char c)
    游戏接入支付宝遇到的一些问题
    mac下versions 提交提示 SVN Working Copy xxx locked
    上周项目遇到的问题
    使用elementPlus组件,分页功能[Pagination]时,字段:total="XXX"时,实际样式显示为 Total {total} 问题的解决办法
    Vue3+Module功能+指定Getter模块+获取不到资源
  • 原文地址:https://www.cnblogs.com/itall/p/10998897.html
Copyright © 2011-2022 走看看