Day-14-数据库服务分布式存储及优化
Day-14-数据库服务分布式存储及优化
1、数据库服务分布式存储(mycat)
2、数据库服务优化讲解
1、数据库服务分布架构(MyCAT)
1.1 数据库服务分布架构概述介绍
分布式架构理念:(基于业务逻辑分布式/基于程序逻辑分布式)
- 架构演变过程早期,为了满足主要业务功能需求,可以将所有程序部署在一个服务器节点上;
- 架构演变过程发展,为了满足主要业务压力增长,可以将所有程序拆分部署在不同服务器上;
- 架构演变过程发展,为了满足主要业务安全稳定,可以将数据库设计成主从架构或读写分离;
- 架构演变过程发展,为了满足多个业务数量增加,可以将架构环境根据业务的情况独立拆分;
- 架构演变过程发展,为了满足单独业务数量激增,可以将多个数据表进行拆分到多个节点上;(垂直拆分-MVCAT进行数据表信息整合)
- 架构演变过程发展,为了满足单独业务数量激增,可以将单个数据表进行拆分到多个节点上;(水平拆分-MYCAT进行数据表信息整合)
- 架构演变过程发展,为了满足业务的数据搜索业务需求、缓存业务需求、大数据业务分析需求,还要引入NOSQL或NewSQL数据库;
传统网站架构的发展变化历程:

数据库存储架构发展变化历程:


1.2 数据库服务分布架构部署
第一个历程:架构规划
两个虚拟主机 每个虚拟主机中需要4个实例
实例之间的关系
3307-3309 实现主从 3307 - 3307 (双主)
3308-3310 实现主从 3308 - 3308 (双主)

第二个历程:部署数据库实例
pkill mysqld
rm -rf /data/330*
mv /etc/my.cnf /etc/my.cnf.bak
-- 清理环境
mkdir /data/33{
07..10}/data -p && chown -R mysql.mysql /data/*
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3310/data
-- 每个数据库服务器都创建4个实例
# db01配置
cat > /data/3307/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
port=3307
log-error=/data/3307/mysql.log
log_bin=/data/3307/mysql-bin
binlog_format=row
skip-name-resolve
server-id=7
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF
-- 3307实例配置文件信息
cat > /data/3308/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
port=3308
log-error=/data/3308/mysql.log
log_bin=/data/3308/mysql-bin
binlog_format=row
skip-name-resolve
server-id=8
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF
-- 3308实例配置文件信息
cat > /data/3309/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
port=3309
log-error=/data/3309/mysql.log
log_bin=/data/3309/mysql-bin
binlog_format=row
skip-name-resolve
server-id=9
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF
-- 3309实例配置文件信息
cat > /data/3310/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3310/data
socket=/data/3310/mysql.sock
port=3310
log-error=/data/3310/mysql.log
log_bin=/data/3310/mysql-bin
binlog_format=row
skip-name-resolve
server-id=10
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF
-- 3310实例配置文件信息
cat > /etc/systemd/system/mysqld3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF
-- 3307实例启动文件信息
cat > /etc/systemd/system/mysqld3308.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
EOF
-- 3308实例启动文件信息
cat > /etc/systemd/system/mysqld3309.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF
-- 3309实例启动文件信息
cat > /etc/systemd/system/mysqld3310.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3310/my.cnf
LimitNOFILE = 5000
EOF
-- 3310实例启动文件信息
# db02配置
cat > /data/3307/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
port=3307
log-error=/data/3307/mysql.log
log_bin=/data/3307/mysql-bin
binlog_format=row
skip-name-resolve
server-id=17
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF
-- 3307实例配置文件信息
cat > /data/3308/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
port=3308
log-error=/data/3308/mysql.log
log_bin=/data/3308/mysql-bin
binlog_format=row
skip-name-resolve
server-id=18
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF
-- 3308实例配置文件信息
cat > /data/3309/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
port=3309
log-error=/data/3309/mysql.log
log_bin=/data/3309/mysql-bin
binlog_format=row
skip-name-resolve
server-id=19
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF
-- 3309实例配置文件信息
cat > /data/3310/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3310/data
socket=/data/3310/mysql.sock
port=3310
log-error=/data/3310/mysql.log
log_bin=/data/3310/mysql-bin
binlog_format=row
skip-name-resolve
server-id=20
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF
-- 3310实例配置文件信息
cat > /etc/systemd/system/mysqld3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF
-- 3307实例启动文件信息
cat > /etc/systemd/system/mysqld3308.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
EOF
-- 3308实例启动文件信息
cat > /etc/systemd/system/mysqld3309.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF
-- 3309实例启动文件信息
cat > /etc/systemd/system/mysqld3310.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3310/my.cnf
LimitNOFILE = 5000
EOF
-- 3310实例启动文件信息
# 启动数据库多实例程序(所有节点均操作)
systemctl daemon-reload
systemctl start mysqld3307
systemctl start mysqld3308
systemctl start mysqld3309
systemctl start mysqld3310
mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"
mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'"
mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'"
mysql -S /data/3310/mysql.sock -e "show variables like 'server_id'"
第三步:构建多个实例主从和双主配置
# 实现红色线条数据主从关系同步
# 实现双主关系建立(10.0.0.51:3307 <---> 10.0.0.52:3307)
mysql -S /data/3307/mysql.sock -e "create user repl@'10.0.0.%' identified with mysql_native_password by '123';grant replication slave on *.* to repl@'10.0.0.%';"
mysql -S /data/3307/mysql.sock -e "create user root@'10.0.0.%' identified with mysql_native_password by '123';grant all on *.* to root@'10.0.0.%';"
-- 在DB02数据库-10.0.0.52上进行操作
mysql -S /data/3307/mysql.sock -e "change master to master_host='10.0.0.52',master_port=3307,master_auto_position=1,master_user='repl',master_password='123';"
mysql -S /data/3307/mysql.sock -e "start slave;"
mysql -S /data/3307/mysql.sock -e "show slave status\G;"|grep Running
-- 在DB01数据库-10.0.0.51上进行操作
mysql -S /data/3307/mysql.sock -e "change master to master_host='10.0.0.51',master_port=3307,master_auto_position=1,master_user='repl',master_password='123';"
mysql -S /data/3307/mysql.sock -e "start slave;"
mysql -S /data/3307/mysql.sock -e "show slave status\G;"|grep Running
-- 在DB02数据库-10.0.0.52上进行操作
# 实现主从关系建立(10.0.0.51:3307 <---> 10.0.0.51:3309)
mysql -S /data/3309/mysql.sock -e "change master to master_host='10.0.0.51',master_port=3307,master_auto_position=1,master_user='repl',master_password='123';"
mysql -S /data/3309/mysql.sock -e "start slave;"
mysql -S /data/3309/mysql.sock -e "show slave status\G;"|grep Running
-- 在DB01数据库-10.0.0.51上进行操作
# 实现主从关系建立(10.0.0.52:3307 <---> 10.0.0.52:3309)
mysql -S /data/3309/mysql.sock -e "change master to master_host='10.0.0.52',master_port=3307,master_auto_position=1,master_user='repl',master_password='123';"
mysql -S /data/3309/mysql.sock -e "start slave;"
mysql -S /data/3309/mysql.sock -e "show slave status\G;"|grep Running
-- 在DB02数据库-10.0.0.52上进行操作
# 实现红色线条数据主从关系同步
# 实现双主关系建立(10.0.0.51:3308 <---> 10.0.0.52:3308)
mysql -S /data/3308/mysql.sock -e "create user repl@'10.0.0.%' identified with mysql_native_password by '123';grant replication slave on *.* to repl@'10.0.0.%';"
mysql -S /data/3308/mysql.sock -e "create user root@'10.0.0.%' identified with mysql_native_password by '123';grant all on *.* to root@'10.0.0.%';"
-- 在DB01数据库-10.0.0.51上进行操作
mysql -S /data/3308/mysql.sock -e "change master to master_host='10.0.0.51',master_port=3308,master_auto_position=1,master_user='repl',master_password='123';"
mysql -S /data/3308/mysql.sock -e "start slave;"
mysql -S /data/3308/mysql.sock -e "show slave status\G;"|grep Running
-- 在DB02数据库-10.0.0.52上进行操作
mysql -S /data/3308/mysql.sock -e "change master to master_host='10.0.0.52',master_port=3308,master_auto_position=1,master_user='repl',master_password='123';"
mysql -S /data/3308/mysql.sock -e "start slave;"
mysql -S /data/3308/mysql.sock -e "show slave status\G;"|grep Running
-- 在DB01数据库-10.0.0.51上进行操作
# 实现主从关系建立(10.0.0.51:3308 <---> 10.0.0.51:3310)
mysql -S /data/3310/mysql.sock -e "change master to master_host='10.0.0.51',master_port=3308,master_auto_position=1,master_user='repl',master_password='123';"
mysql -S /data/3310/mysql.sock -e "start slave;"
mysql -S /data/3310/mysql.sock -e "show slave status\G;"|grep Running
-- 在DB01数据库-10.0.0.51上进行操作
# 实现主从关系建立(10.0.0.52:3308 <---> 10.0.0.52:3310)
mysql -S /data/3310/mysql.sock -e "change master to master_host='10.0.0.52',master_port=3308,master_auto_position=1,master_user='repl',master_password='123';"
mysql -S /data/3310/mysql.sock -e "start slave;"
mysql -S /data/3310/mysql.sock -e "show slave status\G;"|grep Running
-- 在DB02数据库-10.0.0.52上进行操作
# 核实检查主从状态
mysql -S /data/3307/mysql.sock -e "show slave status\G;"|grep Yes
mysql -S /data/3308/mysql.sock -e "show slave status\G;"|grep Yes
mysql -S /data/3309/mysql.sock -e "show slave status\G;"|grep Yes
mysql -S /data/3310/mysql.sock -e "show slave status\G;"|grep Yes
-- 在db01 db02数据库上均做检查
# 异常同步错误重置方法(特殊情况执行)
mysql -S /data/3307/mysql.sock -e "stop slave;reset slave all;"
mysql -S /data/3308/mysql.sock -e "stop slave;reset slave all;"
mysql -S /data/3309/mysql.sock -e "stop slave;reset slave all;"
mysql -S /data/3310/mysql.sock -e "stop slave;reset slave all;"
第四步:安装mycat软件程序
# 预先安装Java运行环境(在主节点操作)
[root@db01 ~ 19:43]# yum install -y java
# 上传解压mycat程序包
[root@db01 ~ 19:43]# cd /usr/local/
[root@db01 local 19:48]# ll
-rw-r--r-- 1 root root 21760812 2024-05-27 17:27 Mycat-server-1.6.7.4-release-20200105164103-linux_.tar.gz
-rw-r--r-- 1 root root 3956740 2024-05-27 17:27 mysql-connector-java-8.0.21.tar.gz
[root@db01 local 19:48]# tar xf Mycat-server-1.6.7.4-release-20200105164103-linux_.tar.gz
[root@db01 local 19:52]# tar xf mysql-connector-java-8.0.21.tar.gz
# 配置服务程序环境变量
vim /etc/profile
export PATH=/usr/local/mycat/bin:$PATH
# 运行启动服务程序并测试连接mycat:
[root@db01 local 19:54]# mycat start
[root@db01 local 19:56]# mysql -uroot -p123456 -h 127.0.0.1 -P8066
或者
[root@db01 local 19:56]# mysql -uroot -p123456 -h 127.0.0.1 -P8066 --default-auth=mysql_native_password
-- 有可能出现连接不上的情况,因为mycat程序中,使用的Java连接驱动器版本唯5.1版本,和数据库8.0可能有兼容问题
cp mysql-connector-java-8.0.21/mysql-connector-java-8.0.21.jar /usr/local/mycat/lib/
mycat restart
-- 可以进行mycat连接驱动更新操作,可以解决mycat连接问题
# 查看mycat程序日志
[root@db01 local 20:04]# ll ./mycat/logs/wrapper.log
-rw-r--r-- 1 root root 1110 2024-10-06 20:04 ./mycat/logs/wrapper.log
[root@db01 local 20:05]# cat ./mycat/logs/wrapper.log
STATUS | wrapper | 2024/10/06 19:55:55 | --> Wrapper Started as Daemon
STATUS | wrapper | 2024/10/06 19:55:56 | Launching a JVM...
INFO | jvm 1 | 2024/10/06 19:55:56 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO | jvm 1 | 2024/10/06 19:55:56 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
INFO | jvm 1 | 2024/10/06 19:55:56 |
INFO | jvm 1 | 2024/10/06 19:55:58 | MyCAT Server startup successfully. see logs in logs/mycat.log
STATUS | wrapper | 2024/10/06 20:04:38 | TERM trapped. Shutting down.
STATUS | wrapper | 2024/10/06 20:04:39 | <-- Wrapper Stopped
STATUS | wrapper | 2024/10/06 20:04:40 | --> Wrapper Started as Daemon
STATUS | wrapper | 2024/10/06 20:04:41 | Launching a JVM...
INFO | jvm 1 | 2024/10/06 20:04:41 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO | jvm 1 | 2024/10/06 20:04:41 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
INFO | jvm 1 | 2024/10/06 20:04:41 |
INFO | jvm 1 | 2024/10/06 20:04:42 | MyCAT Server startup successfully. see logs in logs/mycat.log
对mycat进行功能配置操作前,需要先了解mycat程序的目录结构:
| 目录信息 | 解释说明 | 文件信息 | 解释说明 |
|---|---|---|---|
| bin | 程序脚本目录 | ||
| conf | 配置文件目录 | schema.xml | 管理节点信息配置文件(主配置文件) 节点信息、读写分离、高可用设置、调用分片策略… |
| rule.xml | 定义分片规则配置文件(分片策略定义、功能使用方法) | ||
| server.xml | 服务功能本身配置文件(服务有关配置) 用户、网络、权限、策略、资源… |
||
| xx.txt | 分片参数定义文件 | ||
| log4j2.xml | 相关日志记录配置 | ||
| lib | 驱动程序目录 | ||
| logs | 日志文件目录 | wrapper.log | 服务运行启动日志文件 |
| mycat.log | 服务运行情况日志文件 |
# 配置文件信息说明:schema.xml(实现读写分离)
[root@db01

最低0.47元/天 解锁文章
1753

被折叠的 条评论
为什么被折叠?



