Day14-数据库服务分布存储

Day-14-数据库服务分布式存储及优化
1、数据库服务分布式存储(mycat)
2、数据库服务优化讲解

1、数据库服务分布架构(MyCAT)

1.1 数据库服务分布架构概述介绍

分布式架构理念:(基于业务逻辑分布式/基于程序逻辑分布式)

  • 架构演变过程早期,为了满足主要业务功能需求,可以将所有程序部署在一个服务器节点上;
  • 架构演变过程发展,为了满足主要业务压力增长,可以将所有程序拆分部署在不同服务器上;
  • 架构演变过程发展,为了满足主要业务安全稳定,可以将数据库设计成主从架构或读写分离;
  • 架构演变过程发展,为了满足多个业务数量增加,可以将架构环境根据业务的情况独立拆分;
  • 架构演变过程发展,为了满足单独业务数量激增,可以将多个数据表进行拆分到多个节点上;(垂直拆分-MVCAT进行数据表信息整合)
  • 架构演变过程发展,为了满足单独业务数量激增,可以将单个数据表进行拆分到多个节点上;(水平拆分-MYCAT进行数据表信息整合)
  • 架构演变过程发展,为了满足业务的数据搜索业务需求、缓存业务需求、大数据业务分析需求,还要引入NOSQL或NewSQL数据库;

传统网站架构的发展变化历程:
image-20241002094853295

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

image-20241002095201250

image-20241002095425830

1.2 数据库服务分布架构部署

第一个历程:架构规划
两个虚拟主机 每个虚拟主机中需要4个实例
实例之间的关系
3307-3309 实现主从 3307 - 3307 (双主)
3308-3310 实现主从 3308 - 3308 (双主)

image-20241002100433146

第二个历程:部署数据库实例

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 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值