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

1、问题说明

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第1张图片

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第2张图片

2、MySQL 主从复制

2.1、介绍

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第3张图片

2.2、配置

2.2.1、主库

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

vim /etc/my.cnf

 添加以下配置

log-bin=mysql-bin      # 启用二进制日志
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后不要再执行任何操作

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第4张图片

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;

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第5张图片

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

2.3、测试

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

3、读写分离

3.1、背景

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第6张图片

3.2、Sharding - JDBC

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第7张图片

3.3、读写分离案例

读写分离步骤:

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

3.3.1、引入依赖

        
        
            org.apache.shardingsphere
            sharding-jdbc-spring-boot-starter
            4.0.0-RC1
        

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

server:
  port: 8080
spring:
  shardingsphere:
    datasource:
      names:
        master,slave  # 数据源名字,可自定义,只要上下对应即可
      # 主数据源
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.44.128:3306/rw?characterEncoding=utf-8&useSSL=false
        username: root
        password: zyj123
      # 从数据源
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.44.127:3306/rw?characterEncoding=utf-8&useSSL=false
        username: root
        password: zyj123
    masterslave:
      # 读写分离配置
      load-balance-algorithm-type: round_robin  # 负载均衡策略:轮询
      # 最终的数据源名称
      name: dataSource
      # 主库数据源名称
      master-data-source-name: master
      # 从库数据源名称列表,多个逗号分隔
      slave-data-source-names: slave
    props:
      sql:
        show: true #开启SQL显示,默认false
  main:
    allow-bean-definition-overriding: true  # 允许 bean 定义覆盖配置项
mybatis-plus:
  configuration:
    #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID

4、项目实现读写分离

4.1、引入依赖

        
        
            org.apache.shardingsphere
            sharding-jdbc-spring-boot-starter
            4.0.0-RC1
        

4.2、修改配置文件

spring:
  application:
    name: reggie_take_out # 应用名称,若不配置默认为当前项目的工程名
#  datasource:
#    druid:
#      driver-class-name: com.mysql.cj.jdbc.Driver
#      url: jdbc:mysql://localhost:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
#      username: root
#      password: zyj123
  shardingsphere:
    datasource:
      names:
        master,slave  # 数据源名字,可自定义,只要上下对应即可
      # 主数据源
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.44.128:3306/reggie?characterEncoding=utf-8&useSSL=false
        username: root
        password: zyj123
      # 从数据源
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.44.127:3306/reggie?characterEncoding=utf-8&useSSL=false
        username: root
        password: zyj123
    masterslave:
      # 读写分离配置
      load-balance-algorithm-type: round_robin  # 负载均衡策略:轮询
      # 最终的数据源名称
      name: dataSource
      # 主库数据源名称
      master-data-source-name: master
      # 从库数据源名称列表,多个逗号分隔
      slave-data-source-names: slave
    props:
      sql:
        show: true #开启SQL显示,默认false
  main:
    allow-bean-definition-overriding: true  # 允许 bean 定义覆盖配置项

5、Nginx

5.1、介绍

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第8张图片

5.2、下载和安装 

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

Linux :

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第9张图片

安装依赖包:
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel

安装wget
yum install wget

下载nginx安装包
wget http://nginx.org/download/nginx-1.16.1.tar.gz

解压
tar -zxvf nginx-1.16.1.tar.gz -C /usr/local

进入根目录
cd nginx-1.16.1/

创建安装目录
mkdir -p /usr/local/nginx

检查nginx安装环境
./configure --prefix=/usr/local/nginx

编译并安装nginx
make && make install

5.3、nginx 目录结构

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第10张图片

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 地址即可看到如下界面:

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第11张图片

启动后可以查看 nginx 进程

ps -ef | grep nginx

停止:

./nginx -s stop

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

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第12张图片

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 之前

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第13张图片

5.6、nginx 具体应用

5.6.1、部署静态资源

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第14张图片

5.6.2、反向代理

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第15张图片

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第16张图片

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第17张图片

5.6.3、负载均衡

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第18张图片

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第19张图片

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第20张图片

瑞吉外卖 —— 12、项目优化:主从复制、读写分离_第21张图片

你可能感兴趣的:(瑞吉外卖,mysql,数据库)