数据库读写分离部署及配置操作手册

举报
架构师聊技术 发表于 2021/12/02 15:47:16 2021/12/02
【摘要】 本文是给客户做系统优化时,记录的文章,主要是通过数据库的读写分离,通过中间件的方式实现,这样业务逻辑层是透明的,节省了大量时间,所以分享出来,希望对有这方面需求的同行,提供个参考。

一、版本说明

序号 名称 版本
1 mysql 5.7.32
2 maxscale 2.5.15
  • 建议在新环境实施


二、 MySql安装

  1. 删除系统自带mariaDB旧包

    1. 查看已经安装的rpm包

    rpm -qa | grep -i mariadb                   
    2. 根据查询结果,删除已经安装的旧包
    rpm -e rpm旧包名称
    1. 查看是否有mariaDB遗留配置文件或者文件目录,如果有一并用 rm -rf 删除

    whereis mariadb
  2. 删除系统已有MySql(如果此数据库已正在使用请卸载前备份)

    1. 查看已经安装的rpm包

    rpm -qa | grep -i mysql                 
    2. 根据查询结果,删除已经安装的旧包
    rpm -e rpm旧包名称
    1. 查看是否有MySql遗留配置文件或者文件目录,如果有一并用 rm -rf 删除

    whereis mysql
  3. 安装MySql数据库

    rpm -ivh mysql-community-common-5.7.32-1.el7.x86_64.rpm
    rpm -ivh mysql-community-libs-5.7.32-1.el7.x86_64.rpm
    rpm -ivh mysql-community-client-5.7.32-1.el7.x86_64.rpm
    rpm -ivh mysql-community-server-5.7.32-1.el7.x86_64.rpm
  4. 查看初始密码

    grep "password" /var/log/mysqld.log| more
  5. 修改初始密码及授权远程访问

    mysql -uroot -p
    mysql> use mysql
    mysql> flush privileges;
    mysql> grant all privileges on *.* to 'root'@'%' identified by 'CM@Mysql201' with grant option;
    mysql> flush privileges;
    mysql> quit
  6. 在主数据库添加主从同步账号

    mysql> GRANT all privileges ON *.* TO 'slave'@'%' IDENTIFIED BY 'CM@Mysql201' WITH GRANT OPTION;
    mysql> flush privileges;
    mysql> quit
  7. 修改主数据库配置文件

    • 默认MySql配置文件路径 /etc/my.cnf

    主要参数修改如下

    # 指定全局唯一服务器ID,ID范围1~65536的任意一个值,但不能重复
    server-id = 1
    log-bin = mysql-bin
    binlog-ignore-db = information_schema
    binlog-ignore-db = performance_schema
    binlog_ignore_db = sys
    binlog_format = ROW


  8. 修改从数据库配置文件

    • 默认MySql配置文件路径 /etc/my.cnf

    # 指定全局唯一服务器ID,ID范围1~65536的任意一个值,但不能重复
    server-id =2
    read-only=ON
    log-bin=bin-log
  9. 查看主数据库状态

    show master status;
    • 显示类似如下结果,主要注意File、Position参数值,后面做同步的时候会用到

      数据库读写分离_0.png


  10. 在从服务器配置主服务器

change master to master_host='10.134.29.201',master_user='slave',master_password='CM@Mysql201',master_log_file='mysql-bin.000004',master_log_pos=953283316; 
  • 然后启动slave

start slave;
  • 通过语句查看从数据库状态

mysql> show slave status;
  • 显示类似如下信息则说明设置完成

    数据库读写分离_1.png

三、读写中间件安装

  1. 到官方网站对应的版本或者到我整理的网盘下载部署的包文件

    链接:https://pan.baidu.com/s/13uCN6y49eB-6XPg9cPymgw 
    提取码:zvyd
  2. 把下载的文件上传到服务器相应的文件目录,如:/opt/package

  3. 执行安装命令

    sudo rpm -ivh maxscale-2.5.15-1.rhel.7.x86_64.rpm
  4. 修改配置文件参数,主要修改存储路径、访问端口号、及内存大小限制

    • 默认maxscale.cnf路径

    /etc/maxscale.cnf

    主要参数修改如下,注意把服务器、账号信息配置为前面创建的账号

    [maxscale]
    threads=auto
    admin_host=0.0.0.0
    admin_secure_gui=false
    ​
    [server1]
    type=server
    address=10.134.29.201
    port=3306
    protocol=MySQLBackend
    ​
    ​
    [server2]
    type=server
    address=10.114.30.72
    port=3306
    protocol=MySQLBackend
    ​
    [MariaDB-Monitor]
    type=monitor
    module=mysqlmon
    servers=server1,server2
    user=slave
    password=CM@Mysql201
    monitor_interval=2000
    ​
    [Read-Write-Service]
    type=service
    router=readwritesplit
    router_options=master,slave
    servers=server1,server2
    user=slave
    password=CM@Mysql201
    ​
    # 提供读写分离服务端口号
    [Read-Write-Listener]
    type=listener
    service=Read-Write-Service
    protocol=MySQLClient
    address=0.0.0.0
    port=4006
  5. 启动maxscale,常用命令

    # 启动maxscale服务
    systemctl start maxscale.service
    # 停止maxscale服务
    systemctl stop maxscale.service
    # 查看maxscale服务状态
    systemctl status maxscale.service
    # 查看MySql服务列表
    maxctrl list servers
  6. 在主服务器上创建一个链接账号如research

    GRANT ALL PRIVILEGES ON *.* TO 'research'@'%' IDENTIFIED BY 'CM@Mysql201' WITH GRANT OPTION;
    flush privileges;
  7. 链接中间件跟Mysql类似,端口号为监听设置的端口号

    mysql -uresearch -p'CM@Mysql201' -h'172.16.1.51' -P4006

六、程序配置

修改项目的application.properties配置文件,把链接改成代理的地址配置如下

spring.datasource.druid.url=jdbc:mysql://10.114.30.72:4006/iacl_cmp?characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.druid.username=research
spring.datasource.druid.password=CM@Mysql201


七、注意事项

  1. 在部署数据库主从时,要注意数据的备份及不影响正常的业务

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。