• 瑞吉外卖 —— 12、项目优化:主从复制、读写分离


    目录

    1、问题说明

    2、MySQL 主从复制

    2.1、介绍

    2.2、配置

    2.2.1、主库

    2.2.2、从库

    2.3、测试

    3、读写分离

    3.1、背景

    3.2、Sharding - JDBC

    3.3、读写分离案例

    3.3.1、引入依赖

    3.3.2、在配置文件配置读写分离规则 和 允许 bean 定义覆盖配置项

    4、项目实现读写分离

    4.1、引入依赖

    4.2、修改配置文件

    5、Nginx

    5.1、介绍

    5.2、下载和安装 

    5.3、nginx 目录结构

    5.4、nginx 命令

    5.4.1、查看版本

    5.4.2、检查配置文件正确性

    5.4.3、启动和停止 Nginx

    5.4.4、重新加载配置文件

    5.5、nginx 配置文件结构

    5.6、nginx 具体应用

    5.6.1、部署静态资源

    5.6.2、反向代理

    5.6.3、负载均衡


    1、问题说明

    2、MySQL 主从复制

    2.1、介绍

    2.2、配置

    2.2.1、主库

    ① 修改配置文件 /etc/my.cnf

    vim /etc/my.cnf

     添加以下配置

    1. log-bin=mysql-bin # 启用二进制日志
    2. server-id=100 # 服务器唯一id

    ② 重启 Mysql 服务

    systemctl restart mysqld

    ③ 登录 Mysql 数据库,执行下面的 SQL

    GRANT REPLICATION SLAVE ON *.* to 'zyj'@'%' identified by 'Root@***';

    注:上面SQL的作用是创建一个用户 xiaoming,密码为 Root@***,并且给 xiaoming 用户授予 REPLICATION SLAVE 权限。常用于建立复制时所需要用到的用户权限,也就是 slave 必须被 master 授权具有该权限的用户,才能通过该用户复制。

    ④ 登录Mysql数据库,执行下面SQL,记录下结果中 File 和 Position 的值

    show master status;

    注:上面SQL的作用是查看Master的状态,执行完此SQL后不要再执行任何操作

    2.2.2、从库

    ① 修改配置文件 /etc/my.cnf

    vim /etc/my.cnf

    如下图,添加配置 

    server-id=101

     ② 重启 Mysql 服务

    systemctl restart mysqld

    ③ 登录 Mysql 数据库,执行下面的 SQL

    change master to master_host='主库ip',master_user='角色用户名',master_password='角色密码',master_log_file='mysql-bin.000005',master_log_pos=主库Position;

    执行完后开启线程

    start slave;

    ④ 查看结果

    show slave status\G;

    若和上图三个框的内容一样,说明开启成功

    2.3、测试

    在主库创建数据库和表,从库也会创建响应的数据库和表

    3、读写分离

    3.1、背景

    3.2、Sharding - JDBC

    3.3、读写分离案例

    读写分离步骤:

    • 导入 Maven 坐标
    • 在配置文件配置读写分离规则
    • 在配置文件允许 bean 定义覆盖配置项

    3.3.1、引入依赖

    1. <dependency>
    2. <groupId>org.apache.shardingspheregroupId>
    3. <artifactId>sharding-jdbc-spring-boot-starterartifactId>
    4. <version>4.0.0-RC1version>
    5. dependency>

    3.3.2、在配置文件配置读写分离规则 和 允许 bean 定义覆盖配置项

    1. server:
    2. port: 8080
    3. spring:
    4. shardingsphere:
    5. datasource:
    6. names:
    7. master,slave # 数据源名字,可自定义,只要上下对应即可
    8. # 主数据源
    9. master:
    10. type: com.alibaba.druid.pool.DruidDataSource
    11. driver-class-name: com.mysql.cj.jdbc.Driver
    12. url: jdbc:mysql://192.168.44.128:3306/rw?characterEncoding=utf-8&useSSL=false
    13. username: root
    14. password: zyj123
    15. # 从数据源
    16. slave:
    17. type: com.alibaba.druid.pool.DruidDataSource
    18. driver-class-name: com.mysql.cj.jdbc.Driver
    19. url: jdbc:mysql://192.168.44.127:3306/rw?characterEncoding=utf-8&useSSL=false
    20. username: root
    21. password: zyj123
    22. masterslave:
    23. # 读写分离配置
    24. load-balance-algorithm-type: round_robin # 负载均衡策略:轮询
    25. # 最终的数据源名称
    26. name: dataSource
    27. # 主库数据源名称
    28. master-data-source-name: master
    29. # 从库数据源名称列表,多个逗号分隔
    30. slave-data-source-names: slave
    31. props:
    32. sql:
    33. show: true #开启SQL显示,默认false
    34. main:
    35. allow-bean-definition-overriding: true # 允许 bean 定义覆盖配置项
    36. mybatis-plus:
    37. configuration:
    38. #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
    39. map-underscore-to-camel-case: true
    40. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    41. global-config:
    42. db-config:
    43. id-type: ASSIGN_ID

    4、项目实现读写分离

    4.1、引入依赖

    1. <dependency>
    2. <groupId>org.apache.shardingspheregroupId>
    3. <artifactId>sharding-jdbc-spring-boot-starterartifactId>
    4. <version>4.0.0-RC1version>
    5. dependency>

    4.2、修改配置文件

    1. spring:
    2. application:
    3. name: reggie_take_out # 应用名称,若不配置默认为当前项目的工程名
    4. # datasource:
    5. # druid:
    6. # driver-class-name: com.mysql.cj.jdbc.Driver
    7. # url: jdbc:mysql://localhost:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
    8. # username: root
    9. # password: zyj123
    10. shardingsphere:
    11. datasource:
    12. names:
    13. master,slave # 数据源名字,可自定义,只要上下对应即可
    14. # 主数据源
    15. master:
    16. type: com.alibaba.druid.pool.DruidDataSource
    17. driver-class-name: com.mysql.cj.jdbc.Driver
    18. url: jdbc:mysql://192.168.44.128:3306/reggie?characterEncoding=utf-8&useSSL=false
    19. username: root
    20. password: zyj123
    21. # 从数据源
    22. slave:
    23. type: com.alibaba.druid.pool.DruidDataSource
    24. driver-class-name: com.mysql.cj.jdbc.Driver
    25. url: jdbc:mysql://192.168.44.127:3306/reggie?characterEncoding=utf-8&useSSL=false
    26. username: root
    27. password: zyj123
    28. masterslave:
    29. # 读写分离配置
    30. load-balance-algorithm-type: round_robin # 负载均衡策略:轮询
    31. # 最终的数据源名称
    32. name: dataSource
    33. # 主库数据源名称
    34. master-data-source-name: master
    35. # 从库数据源名称列表,多个逗号分隔
    36. slave-data-source-names: slave
    37. props:
    38. sql:
    39. show: true #开启SQL显示,默认false
    40. main:
    41. allow-bean-definition-overriding: true # 允许 bean 定义覆盖配置项

    5、Nginx

    5.1、介绍

    5.2、下载和安装 

    Windows 下载地址:nginx: download ,选择需要的版本下载即可

    Linux :

    1. 安装依赖包:
    2. yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
    3. 安装wget
    4. yum install wget
    5. 下载nginx安装包
    6. wget http://nginx.org/download/nginx-1.16.1.tar.gz
    7. 解压
    8. tar -zxvf nginx-1.16.1.tar.gz -C /usr/local
    9. 进入根目录
    10. cd nginx-1.16.1/
    11. 创建安装目录
    12. mkdir -p /usr/local/nginx
    13. 检查nginx安装环境
    14. ./configure --prefix=/usr/local/nginx
    15. 编译并安装nginx
    16. make && make install

    5.3、nginx 目录结构

    5.4、nginx 命令

    5.4.1、查看版本

    在进入 nginx 目录下的 sbin 目录后,使用以下命令可以查看 nginx 版本

    ./nginx -v

    5.4.2、检查配置文件正确性

    在启动 Nginx 服务之前,可以先检查一下 conf/nginx.conf 文件配置的是否有错误,进入 nginx 目录下的 sbin 目录后执行如下命令: 

    ./nginx -t

    5.4.3、启动和停止 Nginx

    启动:

    ./nginx

    启动后配置完防火墙,在浏览器访问 ip 地址即可看到如下界面:

    启动后可以查看 nginx 进程

    ps -ef | grep nginx

    停止:

    ./nginx -s stop

    启动后,在 logs 目录下会生成 nginx.pid 文件,里面记录的是当前 nginx 程序的 pid,停止后会消失

    5.4.4、重新加载配置文件

    当修改Nginx配置文件后,需要重新加载才能生效,可以使用下面命令重新加载配置文件:

    ./nginx -s reload

    5.4.5、

    修改 /etc/profile 文件

    在 PATH 前加上 nginx 的 sbin 的完整路径,这里是 /usr/local/nginx/sbin:  (注意有个冒号)

    PATH=/usr/local/nginx/sbin:$JAVA_HOME/bin:$PATH

    修改完后重新加载

    source /etc/profile

    5.5、nginx 配置文件结构

    全局块:从开始到 events 之前

    5.6、nginx 具体应用

    5.6.1、部署静态资源

    5.6.2、反向代理

    5.6.3、负载均衡

  • 相关阅读:
    用户运营中,数据分析给与企业的三个精准帮助
    Linux中查找某路径下,包含某个字符串的所有文件
    sql练习记录
    java智慧园区系统源码 智慧园区小程序源码
    相同的树(C++解法)
    less笔记
    Centos7通过yum安装docker
    webgl(threejs)生成房间楼层
    ESP32 Arduino实战协议篇-搭建独立的 Web 服务器
    C# 反射(一)基础概念
  • 原文地址:https://blog.csdn.net/Mr_zhangyj/article/details/126832574