Linux云计算 |【第四阶段】RDBMS2-DAY2

主要内容:

数据读写分离概述、Maxscale实现数据读写分离、多实例配置、中间件概述

一、数据读写分离概述

数据读写分离(Read/Write Splitting)是一种数据库架构设计模式,旨在提高数据库系统的性能、可扩展性和可用性。通过将读操作和写操作分离到不同的数据库实例上,可以有效减轻主数据库的负载,提高系统的整体性能。

使用读写分离的原因:

  • ① 数据库写入效率要低于读取效率
  • ② 一般来说,数据读取频率高于写入频率
  • ③ 单个数据库实例在写入的时候,可能因写入效率慢,从而影响读取性能

基本概念:

将数据库的读操作(SELECT)和写操作(INSERT、UPDATE、DELETE)分离到不同的数据库实例上。通常有一个主数据库(Master)负责处理所有的写操作,而多个从数据库(Slaves)负责处理读操作。可由程序员通过代码实现,也可通过中间件服务器实现,如mysql-proxy、mycat、maxscale。

工作原理:

主数据库(Master):

  • 负责处理所有的写操作(INSERT、UPDATE、DELETE)
  • 将写操作记录到二进制日志(Binary Log)中

从数据库(Slaves):

  • 通过复制主数据库的二进制日志,同步主数据库的数据
  • 负责处理所有的读操作(SELECT)

负载均衡:

  • 通过负载均衡器(Load Balancer)将读操作分发到多个从数据库上,以均衡负载

优点:

提高性能:

- 通过将读操作分发到多个从数据库上,减轻主数据库的负载,提高系统的整体性能。
- 适用于读操作远多于写操作的场景。
提高可扩展性:

- 通过增加从数据库的数量,可以水平扩展系统的读能力。
- 主数据库和从数据库可以部署在不同的物理服务器上,提高系统的可扩展性。
提高可用性:

- 从数据库可以作为主数据库的备份,提供数据的安全性和可靠性。
- 当主数据库发生故障时,可以从从数据库中选择一个作为新的主数据库,实现故障转移。

缺点:

数据一致性问题:

- 由于主数据库和从数据库之间的数据同步存在延迟,可能会导致数据一致性问题。
- 适用于对数据一致性要求不严格的场景。
配置复杂:

- 需要配置和管理主数据库和从数据库之间的复制关系。
- 需要配置负载均衡器,以实现读操作的分发。
单点写入:

- 主数据库仍然是单点写入,存在单点故障风险。
- 可以通过主主复制(Master-Master Replication)或多主复制(Multi-Master Replication)来解决单点写入问题,但配置和管理更加复杂。

二、Maxscale概述

MaxScale 是 MariaDB 公司开发的一款开源数据库中间件,旨在提供高性能、高可用性和可扩展性的数据库服务。MaxScale 支持多种数据库系统,包括 MySQL、MariaDB、PostgreSQL 等,并提供了丰富的功能,如读写分离、负载均衡、连接池、查询路由、数据分片等。

当主库故障后,Maxscale还可实现数据库自动故障转移,通过识别数据库语句,并将这些语句转发到一个或多个数据库服务器,扩展了MariaDB服务器的高可用性、可伸缩性和安全性(自动选取其中一个从库作为主库,其它从库自动指向新主库进行复制)。

下载地址:https://downloads.mariadb.com/MaxScale/

  • 主配置文件:/etc/maxscale.cnf
  • 服务日志文件:/var/log/maxscale/maxscale.log

1、主要功能

读写分离(Read/Write Splitting)

  • MaxScale 支持自动将读操作和写操作分发到不同的数据库实例上,从而提高系统的性能和可扩展性。主数据库(Master)负责处理所有的写操作,而从数据库(Slaves)负责处理读操作。

负载均衡(Load Balancing)

  • MaxScale 可以将客户端的请求分发到多个数据库实例上,以均衡负载。负载均衡策略可以根据请求类型(读或写)、数据库实例的负载情况等进行动态调整。

连接池(Connection Pooling)

  • MaxScale 提供了连接池功能,可以有效管理数据库连接,减少连接建立和断开的开销,提高系统的性能和稳定性。

查询路由(Query Routing)

  • MaxScale 可以根据查询的类型和内容,将查询路由到合适的数据库实例上。例如,可以将复杂的查询路由到性能较高的数据库实例上,将简单的查询路由到性能较低的数据库实例上。

数据分片(Data Sharding)

  • MaxScale 支持数据分片功能,可以将数据分布到多个数据库实例上,以提高系统的可扩展性和性能。数据分片可以根据表、列或查询条件进行。

高可用性(High Availability)

  • MaxScale 支持主从复制和多主复制,可以实现数据库的高可用性。当主数据库发生故障时,MaxScale 可以自动将从数据库提升为主数据库,实现故障转移。

 

2、架构和工作原理

1)监听器(Listener)

监听器负责监听客户端的连接请求,并将请求转发给合适的服务模块。监听器可以配置多个,以支持不同的协议和端口。

2)服务模块(Service)

服务模块是 MaxScale 的核心组件,负责处理客户端的请求。服务模块可以配置多个,每个服务模块可以对应一个或多个数据库实例。

3)路由模块(Router)

路由模块负责将客户端的请求路由到合适的数据库实例上。MaxScale 提供了多种路由模块,如读写分离路由模块(Read/Write Splitter)、负载均衡路由模块(Load Balancer)、查询路由模块(Query Router)等。

4)过滤器(Filter)

过滤器可以在请求到达数据库实例之前或之后对请求进行处理。MaxScale 提供了多种过滤器,如日志过滤器、查询重写过滤器、数据分片过滤器等。

5)监控模块(Monitor)

监控模块负责监控数据库实例的状态,如主从复制状态、数据库连接状态等。监控模块可以配置多个,以支持不同的数据库实例。

 

3、配置和管理

1)配置文件示例

MaxScale 的配置文件是一个文本文件,通常命名为 maxscale.cnf。配置文件中定义了监听器、服务模块、路由模块、过滤器、监控模块等的配置信息。以下是一个简单的配置文件示例:

[maxscale]
threads=auto[server1]
type=server
address=192.168.1.101
port=3306
protocol=MySQLBackend[server2]
type=server
address=192.168.1.102
port=3306
protocol=MySQLBackend[Read-Write-Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale
passwd=maxscale_password[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MySQLClient
port=4006

2)管理工具

MaxScale 提供了命令行工具 maxctrl 和 Web 管理界面,用于管理和监控 MaxScale 的运行状态

  • maxctrl:命令行工具,用于查看和修改 MaxScale 的配置,监控数据库实例的状态等
  • Web 管理界面:通过 Web 界面可以直观地查看 MaxScale 的运行状态,配置和管理 MaxScale 的各个组件


读写分离实施示例:

实验拓扑图:

  • 服务器角色:node10为主(Master),node11为从(Slave),node17为中间件(Maxscale);
  • node10配置:ip地址192.168.2.10,启动mysqld,检查主从同步;
  • node11配置:ip地址192.168.2.11,启动mysqld,检查主从同步;
  • node17配置:ip地址192.168.2.17,安装Maxscale,不启用mysqld服务;
  • client配置:ip地址192.168.2.5,启动mysqld,验证连接maxscale服务;

提示:提前关闭防火墙和SELinux;

步骤1:环境准备

① 准备YUM源(参考/linux-soft/4/mysql/maxscale-2.1.2-1.rhel.7.x86_64.rpm)

[root@localhost ~]# cp maxscale-2.1.2-1.rhel.7.x86_64.rpm /var/www/html/mysql/
[root@localhost ~]# cd /var/www/html/mysql/
[root@localhost mysql]# createrepo -v .

② 检查node17是否安装mysqld服务。如果已安装则停止服务;

[root@node17 ~]# systemctl stop mysqld
[root@node17 ~]# systemctl disable mysqld

③ 安装Maxscale

[root@node17 ~]# yum clean all
[root@node17 ~]# yum -y install maxscale.x86_64
[root@node17 ~]# id maxscale
uid=997(maxscale) gid=995(maxscale) 组=995(maxscale)

 

步骤2:Maxscale服务器配置

① 修改配置文件(建议修改前备份)

[root@node17 ~]# vim /etc/maxscale.cnf
# MaxScale documentation on GitHub:
# https://github.com/mariadb-corporation/MaxScale/blob/2.1/Documentation/Documentation-Contents.md# Global parameters      //【全局配置】
#
# Complete list of configuration options:
# https://github.com/mariadb-corporation/MaxScale/blob/2.1/Documentation/Getting-Started/Configuration-Guide.md[maxscale]
threads=auto    //线程数默认为1,需设置为auto,CPU有几个核心就产生几个线程(lscpu)# Server definitions    //【服务器定义】
#
# Set the address of the server to the network
# address of a MySQL server.
#[server1]      //定义要连接的后端mysql服务器(server1)
type=server
address=192.168.2.10
port=3306
protocol=MySQLBackend     //Mysql后端协议[server2]      //定义要连接的后端mysql服务器(server2)
type=server
address=192.168.2.11
port=3306
protocol=MySQLBackend# Monitor for the servers   //【定义监控服务器】
#
# This will keep MaxScale aware of the state of the servers.
# MySQL Monitor documentation:
# https://github.com/mariadb-corporation/MaxScale/blob/2.1/Documentation/Monitors/MySQL-Monitor.md[MySQL Monitor]             //定义要监视的数据库节点
type=monitor                //类型为monitor
module=mysqlmon             //自带的监控模块
servers=server1,server2     //添加定义的服务器
user=maxscalemon            //定义监控用户
passwd=NSD2021@tedu.cn      //用户密码
monitor_interval=10000      //监控间隔默认10秒(单位为ms)# Service definitions   //【服务定义】
#
# Service Definition for a read-only service and
# a read/write splitting service.
## ReadConnRoute documentation:
# https://github.com/mariadb-corporation/MaxScale/blob/2.1/Documentation/Routers/ReadConnRoute.md# [Read-Only Service]       //注释只读连接路由服务
# type=service
# router=readconnroute
# servers=server1
# user=myuser
# passwd=mypwd
# router_options=slave# ReadWriteSplit documentation:
# https://github.com/mariadb-corporation/MaxScale/blob/2.1/Documentation/Routers/ReadWriteSplit.md[Read-Write Service]        //定义读写分离的数据库节点
type=service                //类型为service
router=readwritesplit       //读写分离路由
servers=server1,server2     //添加定义的服务器
user=maxscalerouter         //定义路由用户
passwd=NSD2021@tedu.cn      //用户密码
max_slave_connections=100%# This service enables the use of the MaxAdmin interface   //【管理服务接口】
# MaxScale administration guide:
# https://github.com/mariadb-corporation/MaxScale/blob/2.1/Documentation/Reference/MaxAdmin.md[MaxAdmin Service]
type=service      //类型为service
router=cli        //管理使用命令行接口界面# Listener definitions for the services    //【监听服务端口及协议定义】
#
# These listeners represent the ports the
# services will listen on.
## [Read-Only Listener]      //注释只读监听信息
# type=listener
# service=Read-Only Service
# protocol=MySQLClient
# port=4008[Read-Write Listener]         //定义读写分离服务配置
type=listener                 //类型为listener
service=Read-Write Service    //读写分离服务
protocol=MySQLClient          //协议
port=4006         //读写分离服务访问端口(默认)[MaxAdmin Listener]           //定义管理服务配置
type=listener                //类型为listener
service=MaxAdmin Service      //管理服务
protocol=maxscaled           //协议 
socket=default
port=4016         //添加管理服务访问端口

 

步骤3:在主服务器上创建maxscale需要的监控、读写用户(node10操作)

① 创建监控用户(授予权限:replication slave、replication client,所有库所有表)

[root@node10 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> grant replication slave,replication client on *.* to maxscalemon@'%' identified by 'NSD2021@tedu.cn';
Query OK, 0 rows affected, 1 warning (0.01 sec)

② 创建路由用户(授予权限:select,Mysql库的所有表)

mysql> grant select on mysql.* to maxscalerouter@'%' identified by 'NSD2021@tedu.cn';
Query OK, 0 rows affected, 1 warning (0.00 sec)

补充:通过该授权用户maxscalerouter去select查看授权库mysql.{mysql,db等},查看访问数据库的用户是否有权限操作数据库;

③ 从服务器上查看用户是否已同步(node11操作)

mysql> select user,host from mysql.user where user like 'maxscale%';
+----------------+------+
| user           | host |
+----------------+------+
| maxscalemon    | %    |
| maxscalerouter | %    |
+----------------+------+
2 rows in set (0.00 sec)

 

步骤4:启动maxscale服务

[root@node17 ~]# systemctl start maxscale.service

补充:如果服务无法启动,可查看/var/log/maxscale/maxscale.log日志

步骤5:验证登录Maxscale服务管理,并查看监控信息

maxadmin默认用户为admin,密码是mariadb;(端口:4016)

[root@node17 ~]# maxadmin -uadmin -pmariadb -P4016   //管理服务端口4016

① 查看后端主从同步服务器的连接状态信息

MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.2.10    |  3306 |           0 | Master, Running
server2            | 192.168.2.11    |  3306 |           0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------

② 查看服务状态信息

MaxScale> list services
Services.
--------------------------+-------------------+--------+----------------+-------------------
Service Name              | Router Module     | #Users | Total Sessions | Backend databases
--------------------------+-------------------+--------+----------------+-------------------
Read-Write Service        | readwritesplit    |      1 |              1 | server1, server2
MaxAdmin Service          | cli               |      3 |              3 |
--------------------------+-------------------+--------+----------------+-------------------

③ 查看所有服务的监听状态信息

MaxScale> list listeners
Listeners.
---------------------+---------------------+--------------------+-----------------+-------+--------
Name                 | Service Name        | Protocol Module    | Address         | Port  | State
---------------------+---------------------+--------------------+-----------------+-------+--------
Read-Write Listener  | Read-Write Service  | MySQLClient        | *               |  4006 | Running
MaxAdmin Listener    | MaxAdmin Service    | maxscaled          | *               |  4016 | Running
MaxAdmin Listener    | MaxAdmin Service    | maxscaled          | default         |     0 | Running
---------------------+---------------------+--------------------+-----------------+-------+--------

步骤6:验证读写分离测试

# 在mysql主服务器上创建用于连接数据库的用户

mysql> grant all on nsd2021.* to tom@'%' identified by 'NSD2021@tedu.cn';
Query OK, 0 rows affected, 1 warning (0.00 sec)

# 使用客户端192.168.2.5访问Maxscale服务器对主从数据库进行读写操作测试(端口4006)

[root@localhost ~]# mysql -utom -pNSD2021@tedu.cn -h192.168.2.17 -P4006

① 查询测试

mysql> select @@hostname;    //查询主机名
+------------+
| @@hostname |
+------------+
| node11     |
+------------+
1 row in set (0.00 sec)

解释:查询语句只转发到从服务器,所以得到的是从服务器主机名;

② 写入测试

mysql> insert into nsd2021.departments(dept_name) values('test');
Query OK, 1 row affected (0.09 sec)

解释:写入语句是转发到主服务器,数据会自动同步到从服务器,在从服务器上可查到新增内容;

# 登录从服务器node11查看是否同步内容(node11操作)

mysql> select * from nsd2021.departments where dept_name='test';
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|      11 | test      |
+---------+-----------+
1 row in set (0.00 sec)

三、多实例配置

在数据库管理和部署中,多实例配置(Multi-Instance Configuration)是指在同一台物理服务器或虚拟机上运行多个独立的数据库实例。每个实例都有自己的配置文件、数据目录、进程和端口,彼此之间相互隔离。多实例配置可以提高资源利用率,实现资源共享,同时满足不同应用的需求。

许多数据库系统(如 MySQL、PostgreSQL、MariaDB)都提供了多实例功能,允许在同一台服务器上运行多个独立的数据库实例。

多实例配置的优势:

资源共享:

- 多个实例可以共享同一台服务器的硬件资源(如CPU、内存、磁盘),提高资源利用率。
隔离性:

- 每个实例独立运行,互不干扰,可以避免不同应用之间的资源争用和冲突。
灵活性:

- 可以根据不同应用的需求,为每个实例配置不同的参数和资源限制,满足多样化的需求。
高可用性:

- 可以在同一台服务器上运行多个实例,实现负载均衡和高可用性。

注意事项:

  • 资源限制:为每个实例配置合理的资源限制(如内存、CPU),避免资源争用和性能瓶颈
  • 端口冲突:确保每个实例使用不同的端口,避免端口冲突
  • 数据隔离:确保每个实例的数据目录独立,避免数据混淆和冲突
  • 安全性:为每个实例配置独立的安全策略(如用户权限、防火墙规则),确保数据安全

1、多实例配置的实现方式

1)在 MySQL 中,可以通过以下步骤配置多实例:

① 创建数据目录:为每个实例创建独立的数据目录,例如:

mkdir -p /var/lib/mysql1
mkdir -p /var/lib/mysql2

② 创建配置文件:为每个实例创建独立的配置文件,例如:

cp /etc/my.cnf /etc/my1.cnf
cp /etc/my.cnf /etc/my2.cnf

修改每个配置文件中的 datadirsocketport 等参数,确保它们不冲突。

③ 初始化数据库:使用 mysqld --initialize 命令初始化每个实例的数据目录,例如:

mysqld --initialize --user=mysql --datadir=/var/lib/mysql1
mysqld --initialize --user=mysql --datadir=/var/lib/mysql2

④ 启动实例:使用 mysqld_multi 或手动启动每个实例,例如:

mysqld_multi start 1
mysqld_multi start 2

2)在 PostgreSQL 中,可以通过以下步骤配置多实例:

① 创建数据目录:为每个实例创建独立的数据目录,例如:

mkdir -p /var/lib/pgsql/9.6/data1
mkdir -p /var/lib/pgsql/9.6/data2

② 初始化数据库:使用 initdb 命令初始化每个实例的数据目录,例如:

initdb -D /var/lib/pgsql/9.6/data1
initdb -D /var/lib/pgsql/9.6/data2

③ 创建启动脚本:为每个实例创建独立的启动脚本,例如:

cp /etc/init.d/postgresql /etc/init.d/postgresql1
cp /etc/init.d/postgresql /etc/init.d/postgresql2

修改每个启动脚本中的 PGDATAPGPORT 等参数,确保它们不冲突。

④ 启动实例:使用启动脚本启动每个实例,例如:

service postgresql1 start
service postgresql2 start

 


多实例部署示例:

步骤1:环境准备

① 配置192.168.2.10为多实例数据库服务器,如已安装MySQL,则停止服务或将其卸载

[root@node10 ~]# yum list installed | grep mysql   //列出已安装的软件包
mysql-community-client.x86_64           5.7.17-1.el7                   @mysql
mysql-community-server.x86_64           5.7.17-1.el7                   @mysql
…
[root@node10 ~]# yum -y remove mysql-community-server.x86_64   //卸载MySQL服务

② 检查是否有/etc/my.cnf文件,若卸载成功则该文件不存在,如果有此文件则移走它

[root@node10 ~]# ls /etc/my.cnf
ls: 无法访问/etc/my.cnf: 没有那个文件或目录

③ 拷贝软件包(mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz)

[root@localhost ~]# scp mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz root@192.168.2.10:/root

④ 解压多实例Mysql软件包

[root@node10 ~]# tar -xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
[root@node10 ~]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@node10 ~]# ls /usr/local/mysql/

步骤2:编写配置文件

[root@node10 ~]# vim /etc/my.cnf
[mysqld_multi]      //多实例基本配置(运行服务命令)
mysqld = /usr/local/mysql/bin/mysqld_safe        //启动服务程序路径
mysqladmin = /usr/local/mysql/bin/mysqladmin    //服务修改密码命令
user = root         //服务用户为root[mysqld1]   //多实例1
datadir = /mysqlmul/mysqld1      //指定数据库工作目录(需要手动创建)
port = 3306      //端口号为3306
log-error = /mysqlmul/mysqld1/mysqld1.err     //指定错误日志(启动服务自动生成)
pid-file = /mysqlmul/mysqld1/mysqld1.pid      //指定进程文件
socket = /mysqlmul/mysqld1/mysqld1.sock       //指定套接字文件[mysqld2]   //多实例2
datadir = /mysqlmul/mysqld2      //指定数据库工作目录
port = 3307     //端口号为3307(注意:端口不能冲突)
log-error = /mysqlmul/mysqld2/mysqld2.err     //指定错误日志(启动服务自动生成)
pid-file = /mysqlmul/mysqld2/mysqld2.pid      //指定进程文件
socket = /mysqlmul/mysqld2/mysqld2.sock       //指定套接字文件

步骤3:创建数据库工作目录

[root@node10 ~]# mkdir -p /mysqlmul/mysqld{1,2}    //【-p】父目录一同创建
[root@node10 ~]# ls /mysqlmul/
mysqld1  mysqld2      //子目录不创建,运行服务也可生成

步骤4:加入MySQL命令路径到PATH变量

① 方法1:临时增加环境变量

[root@node10 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
[root@node10 ~]# export PATH=$PATH:/usr/local/mysql/bin
[root@node10 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/usr/local/mysql/bin

② 方法2:永久修改PATH环境变量

[root@node10 ~]# vim .bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin   //PATH路径
export PATH
[root@node10 ~]# source .bash_profile
[root@node10 ~]# echo $PATH    //查看环境变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/usr/local/mysql/bin

补充:若未有加入$PATH环境变量,则需要绝对路径:/usr/local/mysql/bin/mysqld_multi

步骤5:启动MySQL服务

① 启动第一个实例(mysqld1)

[root@node10 ~]# mysqld_multi start 1
2021-06-13T14:39:57.915320Z 1 [Note] A temporary password is generated for root@localhost: 8#a=+C20ja=i   //启动完成,会生成临时密码

[root@node10 ~]# ss -nlptu | grep :3306    //查看服务
tcp    LISTEN     0      80       :::3306                 :::*                   users:(("mysqld",pid=2252,fd=16))
[root@node10 ~]# ls /mysqlmul/mysqld1/

② 通过本机socket连接数据库并修改密码(/mysqlmul/mysqld1/mysqld1.sock)

[root@node10 ~]# mysqladmin -uroot -p'8#a=+C20ja=i' password '123456' -S /mysqlmul/mysqld1/mysqld1.sock

补充:Socket套接字文件需要启动服务后才能生成

测试本地Socket连接访问数据库

[root@node10 ~]# mysql -uroot -p123456 -S /mysqlmul/mysqld1/mysqld1.sock
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

③ 启动第二个实例(mysqld2)

[root@node10 ~]# mysqld_multi start 2
2021-06-13T15:20:35.200117Z 1 [Note] A temporary password is generated for root@localhost: jf8wBz5c(o4-

[root@node10 ~]# ss -nlptu | grep :3307    //查看服务
tcp    LISTEN     0      80       :::3307                 :::*                   users:(("mysqld",pid=2573,fd=16))
[root@node10 ~]# ls /mysqlmul/mysqld2/

④ 通过本机socket连接数据库并修改密码

[root@node10 ~]# mysql -uroot -p'jf8wBz5c(o4-' -S /mysqlmul/mysqld2/mysqld2.sock
mysql> alter user root@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

⑤ 测试通过网络连接数据库

[root@node10 ~]# mysql -uroot -p123456 -h127.0.0.1 -P3307
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

步骤6:停止服务

[root@node10 ~]# mysqld_multi --user root --password 123456 stop 1
[root@node10 ~]# ss -nlptu | grep :3306

补充:什么是读写分离?为什么要实现读写分离?

答:读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。数据库的写操作是非常耗时的,写10000条数据可能需要几分钟,而读取10000条数据只要几秒钟。所以读写分离,解决的是数据库写入影响到了查询的速率。这样,主服务器处理增删改请求,从服务器处理读请求,可以极大地提高性能。


扩展知识:中间件

中间件(Middleware)是一种位于操作系统和应用程序之间的软件层,用于协调和管理不同应用程序之间的通信和数据交换。中间件提供了一系列服务和功能,简化了应用程序的开发和部署,提高了系统的可扩展性、可靠性和安全性。

1、中间件的主要功能:

1)通信管理
中间件提供了通信管理功能,包括消息传递、远程过程调用(RPC)、分布式对象请求代理(CORBA)等,使得不同应用程序之间可以方便地进行通信和数据交换。

2)数据管理
中间件提供了数据管理功能,包括数据缓存、数据复制、数据同步、数据分片等,确保数据的一致性和可靠性。

3)事务管理
中间件提供了事务管理功能,确保分布式事务的原子性、一致性、隔离性和持久性(ACID),避免数据不一致和事务失败。

4)安全性
中间件提供了安全性功能,包括身份验证、授权、加密、审计等,确保系统的安全性和数据的保密性。

5)负载均衡
中间件提供了负载均衡功能,将客户端的请求分发到多个服务器上,均衡负载,提高系统的性能和可扩展性。

6)高可用性
中间件提供了高可用性功能,包括故障检测、故障转移、容错机制等,确保系统的高可用性和可靠性。

7)监控和管理
中间件提供了监控和管理功能,包括性能监控、日志管理、配置管理等,帮助管理员监控和管理系统的运行状态。

可理解为是一类能够为一种或多种应用程序合作互通、资源共享,同时还能够为该应用程序提供相关的服务的软件。中间件是一类软件统称,而非一种软件,中间件不仅仅实现互连,还要实现应用之间的互操作。

2、中间件的类型:

消息中间件(Message-Oriented Middleware, MOM)

消息中间件用于在不同应用程序之间传递消息,支持异步通信和消息队列。常见的消息中间件包括:

  • RabbitMQ:一个开源的消息代理,支持多种消息协议。
  • Apache Kafka:一个分布式流处理平台,用于高吞吐量的消息传递。
  • ActiveMQ:一个开源的消息代理,支持多种消息协议。

数据库中间件(Database Middleware)

数据库中间件用于管理和优化数据库访问,提供连接池、负载均衡、读写分离、数据分片等功能。常见的数据库中间件包括:

  • MaxScale:MariaDB 公司开发的数据库中间件,支持 MySQL 和 MariaDB。
  • ProxySQL:一个高性能的数据库代理,支持 MySQL 和 PostgreSQL。
  • pgpool-II:一个 PostgreSQL 数据库中间件,提供连接池、负载均衡、复制等功能。

应用服务器中间件(Application Server Middleware)

应用服务器中间件用于管理和部署企业级应用程序,提供事务管理、安全性、负载均衡等功能。常见的应用服务器中间件包括:

  • Apache Tomcat:一个开源的 Java Servlet 容器,用于部署 Java Web 应用程序。
  • JBoss/WildFly:一个开源的应用服务器,支持 Java EE 标准。
  • WebLogic:Oracle 公司开发的应用服务器,支持 Java EE 标准。

事务处理中间件(Transaction Processing Middleware)

事务处理中间件用于管理和协调分布式事务,确保事务的原子性、一致性、隔离性和持久性。常见的事务处理中间件包括:

  • Tuxedo:Oracle 公司开发的事务处理中间件,支持 C/C++ 和 Java 应用程序。
  • WebSphere:IBM 公司开发的应用服务器,支持事务处理和 Java EE 标准。

对象请求代理中间件(Object Request Broker, ORB)

对象请求代理中间件用于在分布式系统中调用远程对象的方法,支持分布式对象请求代理(CORBA)标准。常见的对象请求代理中间件包括:

  • CORBA:一个分布式对象计算的标准,支持多种编程语言和平台。
  • DCOM:微软公司开发的分布式对象计算技术,支持 Windows 平台。

Web 服务中间件(Web Services Middleware)

Web 服务中间件用于管理和调用 Web 服务,支持 SOAP、REST 等 Web 服务标准。常见的 Web 服务中间件包括:

  • Apache Axis:一个开源的 Web 服务框架,支持 SOAP 和 WSDL。
  • Apache CXF:一个开源的 Web 服务框架,支持 SOAP、REST 和 WSDL。
  • Spring Web Services:一个开源的 Web 服务框架,支持 SOAP 和 REST。

思维导图:

 

小结:

本篇章节为【第四阶段】RDBMS2-DAY2 的学习笔记,这篇笔记可以初步了解到 数据读写分离概述、Maxscale实现数据读写分离、多实例配置、中间件概述,除此之外推荐参考相关学习网址:

  • 参考:https://blog.csdn.net/weixin_40210977/article/details/109729464 


Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1559892.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

how to increase the height of the ps or cdm window

when the line reaches the bottom; directly pull up the top bar of the window after pulling down the bar

Llama-3.2-3B-Instruct PyTorch模型微调最佳实践

1 引言 Meta Llama 3.2多语言大型语言模型集合(LM)是一个1B和3B大小(文本输入/文本输出)的预训练和指令微调模型集合。Llama 3.2指令调整的纯文本模型针对多语言对话用例进行了优化,包括智能检索和总结任务。它们在常…

Vue组件继承与扩展

Vue组件继承与扩展 前言 与Class继承类似,在Vue中可以通过组件继承来达到复用和扩展基础组件的目的,虽然它可能会带来一些额外的性能损耗和维护成本,但其在解决一些非常规问题时有奇效。本文将通过一些非常规的功能需求来讨论其实现过程。 …

锐明Crocus系统 RepairRecord.do SQL注入漏洞

0x01 产品描述: 明锐技术是一家专注于AI和视频技术的商用车智能物联(AIoT)解决方案提供商,Crocus系统是其核心产品之一。该系统旨在利用人工智能、高清视频、大数据和自动驾驶技术,提高企业或车队的运营效率&#xff0…

python31_format方法的使用

format方法的使用 def str_format(c, d):"""格式化字符串函数本函数的目的是通过给定的参数c和d,去填充一个预设的字符串模板。模板中包含了{name1}和{name2}两个占位符,分别用参数c和d的值来替换。这个过程演示了Python中字符串格式化的…

AR虚拟试用,让网购不再只靠想象!

在数字化浪潮席卷全球的今天,电子商务已成为我们日常生活中不可或缺的一部分。然而,传统的网购体验往往受限于二维图片和文字描述,消费者在购买前只能依靠想象来构建商品的模样与适用性,这无疑增加了购物的不确定性和风险。幸运的…

基于卷积神经网络的脊柱骨折识别系统,resnet50,mobilenet模型【pytorch框架+python】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示: 基于卷积神经网络的脊柱骨折识别系统,resnet50,mobilenet【pytorch框架,python,tkinter】_哔哩哔哩_bilibili (一)简介 基于卷…

Java面试宝典-Java集合02

目录 Java面试宝典-Java集合02 21、TreeMap 和 TreeSet 在排序时如何比较元素? 22、ArrayList 和 LinkedList 的区别是什么? 23、ArrayList 和 Vector 的区别? 24、队列和栈是什么?有什么区别? 25、Queue和Deque的区别…

版本控制系统Helix Core的常见使用误区及解决办法、实用工具及新功能介绍

日前,Perforce携手合作伙伴龙智一同亮相Unreal Fest 2024上海站,分享Helix Core版本控制系统及其协作套件的强大功能与最新动态,助力游戏创意产业加速前行。 Perforce解决方案工程师Kory Luo在活动主会场,带来《Perforce Helix C…

谈谈英国硕士毕业论文如何收集问卷数据

在之前几期文章中,英国翰思教育小编介绍了在写英国硕士毕业论文的时候如何设计问卷,以及设计问卷时需要注意的一些原则和细节。希望通过那些往期内容,可以帮助同学们正确认识毕业论文问卷设计,也可以帮助大家找到合适的问卷设计思…

vantUI用popup和picker和field做关键词搜索功能

<van-field class"mainFileCss" v-model"currentflowmeterLocation" left-icon"search" click"openPicker" center label"位号"placeholder"请输入位号"><template slot"button"></temp…

Linux查看下nginx及使用的配置文件

1、查到nginx进程 ps -aef | grep nginx2、通过进行pid查到nginx路径 pwdx <pid>3、根据路径得到配置文件 path***/nginx -t如下&#xff1a;

基于xml配置文件的Spring事务

在项目中对事务属性通常传播属性&#xff0c;回滚属性&#xff0c;隔离级别&#xff0c;超时属性都取默认值&#xff0c;只有只读属性会如下的配置&#xff1a; 什么意思&#xff1a;Service层你的类里的方法&#xff0c;以get&#xff0c;find&#xff0c;select等开头的方法是…

shell注意点

变量命名&#xff1a; 注意&#xff0c;变量名和等号之间不能有空格&#xff0c;定义变量时&#xff0c;变量名不加美元符号$&#xff0c;这可能和你熟悉的所有编程语言都不一样。同时&#xff0c;变量名的命名须遵循如下规则&#xff1a; 只包含字母、数字和下划线&#xff…

【text2sql】ReFSQL检索生成框架

论文标题为《ReFSQL: A Retrieval-Augmentation Framework for Text-to-SQL Generation》&#xff0c;发表在 EMNLP 2023 上。ReFSQL框架通过结构增强检索器来获取与当前问题语义和模式结构相似的样本&#xff0c;然后通过对比学习机制来引导模型学习到这些样本的特定知识&…

10款超实用的Sketch插件合集,别错过!

在 UI 界面设计领域&#xff0c;Sketch 以其高效、轻便的优势获得了不少设计团队的青睐&#xff0c;帮助全球设计师创造了许多妙不可言的作品。在使用 Sketch 的过程中&#xff0c;使用一些 辅助用的 Sketch 插件&#xff0c;可以让我们更加高效地完成设计任务。本文将将揭秘大…

jenkins中的allure和email问题梳理

一、allure相关 1、我安装了jenkins之后需要再安装allure吗&#xff1f;在jenkins插件中心直接安装allure 1.Allure Jenkins Plugin 只是一个集成插件&#xff0c;它要求你在 Jenkins 服务器上安装 Allure 命令行工具&#xff08;Allure Commandline&#xff09;来实际生成报…

Spring Boot教学资源库:从入门到精通

1绪 论 1.1研究背景 目前&#xff0c;在网络大环境下&#xff0c;越来越多高校开始实行网络教学&#xff0c;利用网络教学方式有利于学生更好的学习。 网络教学是指以计算机及网络为基础&#xff0c;来实现教学资源的上传、存储、传播和共享的教学手段。它是一种教学活动&#…

伪随机调制

伪随机调制是一种利用伪随机序列来调制信号的技术&#xff0c;广泛应用于现代通信系统中。其主要目的在于增强信号的抗干扰能力和隐蔽性&#xff0c;同时提升数据传输的安全性。以下是关于伪随机调制的详细介绍&#xff0c;包括原理、数学表达以及应用。 一、原理 1. 伪随机序…

ITSS-IT服务工程师和ITSS-IT服务经理的区别

培训目的差异&#xff1a;ITSS 服务项目经理的培训旨在为应对 IT 服务行业一线管理人员短缺的问题提供有力支持&#xff1b;而 ITSS 服务工程师的培训则致力于向 IT 服务业输送初级人才&#xff0c;协助企业将一部分内部成本转移至社会。 培训方向区分&#xff1a;ITSS 服务经理…