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

news2024/11/23 18:38:07

主要内容:

数据读写分离概述、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.coloradmin.cn/o/2202885.html

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

相关文章

Machine Learning Specialization 学习笔记(6)

文章目录 前言一、协同过滤二进制标签均值归一化 二、基于内容的过滤三、PCA算法降低特征数量PCAPCA和线性回归重建 四、强化学习回报与折扣因子马尔科夫决策过程状态动作值函数定义:作用:学习过程:Qfunction 贝尔曼方程random stochastic en…

在 ubantu 20.04 云服务器上基于 bochs 编译 linux0.11

安装 bochs 将下面的命令全部执行一遍: sudo apt-get install build-essential sudo apt-get install xorg-dev sudo apt-get install bison sudo apt-get install g 我们区官网下载一下bochs的源码:bochs下载 这里我下载好了bochs2.6.8 这个版本的…

基于SpringBoot+Vue+uniapp的高校教务管理小程序系统设计和实现

2. 详细视频演示 文章底部名片,联系我获取更详细的演示视频 3. 论文参考 4. 项目运行截图 代码运行,效果展示图 代码运行,效果展示图 代码运行,效果展示图 代码运行,效果展示图 代码运行,效果展示图 5. 技…

中科星图GVE(案例)——AI检测采样区域的滑坡

目录 简介 函数 gve.Services.AI.Object_Detection_Landslide(image) 代码 结果 知识星球 机器学习 简介 AI可以通过分析卫星图像或航拍图像来检测采样区域的滑坡。以下是一些可能的方法: 图像识别: AI算法可以训练,以识别滑坡的视觉…

Spring Boot常见错误与解决方法

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 目录 创建第一个SpringBoot项目 SpringBoot项目各个…

基于分级分类的千亿级规模车联网数据采集与数据安全方案与实践

当前,中国的汽车行业发展势头正旺。造车势力百家争鸣、百花齐放,甚至迈出国门、走向世界。 比如,前不久我们看到的一个现象:中国新能源汽车在欧洲和中东备受欢迎,把本地汽车打的毫无招架之力。 那在这个过程中&#…

SPIE出版-EI会议-人机交互 虚拟现实 <<< 11月杭州

EI、Scopus检索|人机交互与虚拟现实国际会议征稿进行中❗会议已通过SPIE出版❗ 2024人机交互与虚拟现实国际会议 ✅大会时间:2024年11月15-17日 ✅大会地点:中国-杭州 ✅报名/截稿:2024年10月15日(团队投稿可享优惠&#xff…

车载电源OBC+DC/DC

文章目录 1. 车载DC/DC应用场景2. PFC2.1 简介2.2 专业名词2.3 常见拓扑结构2.3.1 传统桥式PFC2.3.2 普通无桥型PFC2.3.3 双Boost无桥PFC2.3.4 图腾柱PFC2.3.5 参考资料 2.4 功率因数2.4.1 简介2.4.2 计算 3. DC/DC3.1 Boost升压电路3.1.1 简介3.1.2 电路框图3.1.3 工作原理3.1…

多功能点击器(文末附Gitee源码)——光遇自动弹奏

之前提到的多功能点击器,使用场景比较多,之前玩光遇喜欢在里面弹琴,想到用这个点击器也能自动弹琴,跟别的自动弹琴脚本不一样,这个比较简单容易操作。 借这个光遇自动弹琴使用教程再讲解一下这个多功能点击头的使用方法…

mac端口被占用解决方法

通常情况下:lsof -i:#{port} 就可以找到对应的进程的pid kill -9 #{pid} 直接终结 kill -15 #{pid} 等待正在进行的任务完成再终结 本次纪要 问题出现: 当我想要使用docker启动mysql的时候报错:Error response from daemon: Ports are not…

【项目实战】g-sensor输出的gyro数据值没有变化

项目场景: GR5515 sensor hub SDK 与 master 展锐W307(UWS6130E)通过串口通讯。 问题描述 量产的设备,概率性出现以下问题:G-SENSOR 输出的gyro数据值没有变化,始终是一组一样的值。G-SENSOR型号为icm-42670-p。规格书已上传。 正常的设备是有变化的。参考下图, 对比异…

10.10 工作笔记

需要做的事: 修改文件名:资金曲线_BTC-USDT_1INCH-USDT_24H.csv为 BTC-1INCH_24H.csv整理代码订正数据正确性 1 涨跌幅 4.10第一个涨跌幅为none 正确 4.12涨跌幅 第一个和最后一个着重看看 正确 2 资金曲线 3 总体资金曲线 4 总体涨跌幅 5 总体资金曲线…

bclinux安装minio和mc

下载MinIO服务器二进制文件 访问MinIO的官方网站或使用wget、curl等工具直接从MinIO的官方GitHub存储库下载最新版本的MinIO服务器二进制文件。例如,使用以下命令: 下载命令:wget https://dl.min.io/server/minio/release/linux-amd64/ 授…

PCL 将点云投影到拟合直线

PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新) 一、概述 该代码通过拟合直线模型,将点云投影到该直线上,并输出投影后的点云。 1.1原理 点云投影到直线的过程主要包括以下…

nacos源码修改持久化到postgreSQL数据库

很多业务场景,业务功能必须用pg数据库,这时候注册中心如果用mysql的话,显得浪费资源,基于此,nacos源码修改持久化到postgreSQL数据库是一个必然需求,此处我们修改为只支持pg数据库,2.4版本的源码…

文献阅读Prov-GigaPath模型--相关知识点罗列

文章链接:A whole-slide foundation model for digital pathology from real-world data | NatureDigital pathology poses unique computational challenges, as a standard gigapixel slide may comprise tens of thousands of image tiles1–3. Prior models hav…

联软安全助手卸载 UniAccess Agent,最简单的方法,两步解决!!!

背景: 前段时间因为业务需要安装了这个可恶的安全助手,然后发现卸载不掉,找了网上很多的方法,比如经典的方案一、方案二那个文章,禁用服务根本禁不掉,过两三秒他自己就会把禁用状态改为自动状态&#xff0…

OpenCSG传神社区月度功能更新

9月社区ReleaseNote 在9月的社区更新中,我们继续秉持开放与创新的精神,推出了一系列新功能和技术升级。这些更新不仅扩展了社区的技术支持范围,还为用户提供了更多资源,助力其在人工智能、大数据处理和推理加速等领域的创新。通过…

老男孩mysql系列 1_Mysql 8.0常规安装

1. MySQL安装准备 选择安装的MySQL版本首先判断是否要和公司其他已经安装好的MySQL保持版本一致如果没有上述要求,则一般会安装最新版本(目前是5.7)如果不是实验新功能性质,则不要选择development release,而要安装Gen…

nuScenes里的目标物体的速度是如何获取的

nuScenes的那些标注文件里并没有标注记录物体的速度数据,而是读取标注数据后根据sample_annotation.json里目标在前后帧里的translation数据相减除以时间差获得x、y、z方向的三个速度分量(Vx,Vy,Vz)的,一版只使用了Vx和Vy,具体实现代码在nusc…