MySQL中的网络命名空间支持

Network Namespace Support(网络命名空间支持) 提供了在Linux系统中创建和管理多个隔离网络空间的能力。网络命名空间是来自主机系统的网络堆栈的逻辑副本。网络命名空间对于设置容器或虚拟环境非常有用。每个名称空间都有自己的IP地址、网络接口、路由表等等。默认命名空间或全局命名空间是主机系统物理接口所在的命名空间。

当MySQL连接跨命名空间时,命名空间特定的地址空间可能会导致问题。例如,在容器或虚拟网络中运行的MySQL实例的网络地址空间可能与主机的地址空间不同。这可能会产生一些现象,例如来自一个命名空间中地址的客户端连接对MySQL服务器来说似乎来自不同的地址,即使是运行在同一台机器上的客户端和服务器也是如此。假设两个进程都在IP地址为203.0.113.10的主机上运行,但使用不同的命名空间。连接可能会产生这样的结果:

$> mysql --user=admin --host=203.0.113.10 --protocol=tcpmysql> SELECT USER();
+--------------------+
| USER()             |
+--------------------+
| admin@198.51.100.2 |
+--------------------+

在这种情况下,预期的USER()值为admin@203.0.113.10。如果连接的来源地址不是它显示的地址,这种行为可能会使正确分配帐户权限变得困难。

为了解决这个问题,MySQL允许指定用于TCP/IP连接的网络命名空间,以便连接的两个端点都使用商定的公共地址空间。

MySQL 8.0.22及更高版本支持在实现它们的平台上使用网络命名空间。MySQL中的支持适用于:

  • MySQL服务器,mysqld。
  • X插件。
  • mysql客户端和mysqlxtest测试套件客户端。(不支持其他客户端。必须从要连接的服务器的网络命名空间中调用它们。)
  • 定期复制。
  • 组复制,仅当使用MySQL通信堆栈建立组通信连接时(从MySQL 8.0.27开始)。

以下部分介绍如何在MySQL中使用网络命名空间:

1 主机系统先决条件

在MySQL中使用网络命名空间支持之前,必须满足以下主机系统先决条件:

  • 主机操作系统必须支持网络命名空间。(例如,Linux。)
  • MySQL要使用的任何网络命名空间都必须首先在主机系统上创建。
  • 主机名解析必须由系统管理员配置,以支持网络命名空间。

注意:在MySQL中,主机名解析不适用于网络命名空间特定主机文件中指定的名称。例如,如果在/etc/netns/red/hosts文件中指定了red命名空间中主机名的地址,则绑定到该名称在服务器端和客户端都会失败。解决方法是使用IP地址而不是主机名。

  • 系统管理员必须为支持网络命名空间(mysqld、MySQL、mysqlxtest)的MySQL二进制文件启用CAP_SYS_ADMIN操作系统权限。

注意:

启用CAP_SYS_ADMIN是一项对安全性敏感的操作,因为它使进程能够执行除设置命名空间之外的其他特权操作。由于系统管理员必须显式启用CAP_SYS_ADMIN,因此MySQL二进制文件默认情况下不启用网络命名空间支持。在启用之前,系统管理员应评估使用CAP_SYS_ADMIN运行MySQL进程的安全影响。

以下示例中的指令是设置名为red和blue的网络命名空间。选择的名称不同,主机系统上的网络地址和接口也可能不同。

以root操作系统用户的身份调用此处显示的命令,或者在每个命令前面加上sudo。例如,如果您不是root用户,要调用ip或setcap命令,请使用sudo-ip或sudo-setcap。

要配置网络命名空间,请使用ip命令。对于某些操作,ip命令必须在特定的命名空间(必须已经存在)内执行。在这种情况下,按如下方式开始执行命令:

ip netns exec namespace_name

例如,此命令在red命名空间内执行,以打开环回接口:

ip netns exec red ip link set lo up

要添加名为red和blue的命名空间,每个命名空间都要有自己的虚拟以太网设备,用作命名空间和自己的环回接口之间的链接:

ip netns add red
ip link add veth-red type veth peer name vpeer-red
ip link set vpeer-red netns red
ip addr add 192.0.2.1/24 dev veth-red
ip link set veth-red up
ip netns exec red ip addr add 192.0.2.2/24 dev vpeer-red
ip netns exec red ip link set vpeer-red up
ip netns exec red ip link set lo upip netns add blue
ip link add veth-blue type veth peer name vpeer-blue
ip link set vpeer-blue netns blue
ip addr add 198.51.100.1/24 dev veth-blue
ip link set veth-blue up
ip netns exec blue ip addr add 198.51.100.2/24 dev vpeer-blue
ip netns exec blue ip link set vpeer-blue up
ip netns exec blue ip link set lo up# if you want to enable inter-subnet routing...
sysctl net.ipv4.ip_forward=1
ip netns exec red ip route add default via 192.0.2.1
ip netns exec blue ip route add default via 198.51.100.1

命名空间之间的链接图如下所示:

red              global           blue192.0.2.2   <=>  192.0.2.1
(vpeer-red)      (veth-red)198.51.100.1 <=> 198.51.100.2(veth-blue)      (vpeer-blue)

要检查存在哪些命名空间和链接,请执行以下操作:

ip netns list
ip link list

要查看全局命名空间和命名命名空间的路由表,请执行以下操作:

ip route show
ip netns exec red ip route show
ip netns exec blue ip route show

要删除red和blue链接以及名称空间,请执行以下操作:

ip link del veth-red
ip link del veth-blueip netns del red
ip netns del bluesysctl net.ipv4.ip_forward=0

为了使包含网络命名空间支持的MySQL二进制文件能够实际使用名称空间,您必须授予它们CAP_SYS_ADMIN功能。以下setcap命令假设您已将位置更改为包含MySQL二进制文件的目录(根据需要调整系统的路径名):

cd /usr/local/mysql/bin

要将CAP_SYS_ADMIN功能授予相应的二进制文件,请执行以下操作:

setcap cap_sys_admin+ep ./mysqld
setcap cap_sys_admin+ep ./mysql
setcap cap_sys_admin+ep ./mysqlxtest

要检查CAP_SYS_ADMIN功能:

$> getcap ./mysqld ./mysql ./mysqlxtest
./mysqld = cap_sys_admin+ep
./mysql = cap_sys_admin+ep
./mysqlxtest = cap_sys_admin+ep

要删除CAP_SYS_ADMIN功能:

setcap -r ./mysqld
setcap -r ./mysql
setcap -r ./mysqlxtest

注意:

如果要重新安装先前已应用setcap的二进制文件,则必须再次使用setcap。例如,如果执行MySQL立即升级,则未能再次授予CAP_SYS_ADMIN功能将导致与命名空间相关的故障。服务器在尝试绑定到具有命名命名空间的地址时失败,并出现以下错误:

[ERROR] [MY-013408] [Server] setns() failed with error 'Operation not permitted'

使用--network namespace选项调用的客户端失败如下:

ERROR: Network namespace error: Operation not permitted

2 MySQL 配置

假设前面的主机系统先决条件已经得到满足,MySQL可以为连接的侦听(入站)端配置服务器端命名空间,为连接的出站端配置客户端命名空间。

在服务器端,bind_address、admin_address和mysqlx_bind_address系统变量具有扩展语法,用于指定要用于侦听传入连接的给定IP地址或主机名的网络命名空间。要为地址指定命名空间,请添加斜线和命名空间名称。例如,服务器my.cnf文件可能包含以下行:

[mysqld]
bind_address = 127.0.1.1,192.0.2.2/red,198.51.100.2/blue
admin_address = 102.0.2.2/red
mysqlx_bind_address = 102.0.2.2/red

这些规则适用于:

  • 可以为IP地址或主机名指定网络命名空间。
  • 不能为通配符IP地址指定网络命名空间。
  • 对于给定的地址,网络名称空间是可选的。如果给定,则必须在地址后立即指定为/ns后缀。
  • 没有/ns后缀的地址使用主机系统全局命名空间。因此,全局命名空间是默认命名空间。
  • 后缀为/ns的地址使用名为ns的命名空间。
  • 主机系统必须支持网络命名空间,并且每个命名的命名空间必须事先设置好。命名不存在的命名空间会产生错误。
  • bind_address和(自MySQL 8.0.21起)mysqlx_bind_addresss接受多个逗号分隔地址的列表,变量值可以指定全局命名空间、命名命名空间或混合命名空间中的地址。

如果在服务器启动期间尝试使用命名空间时发生错误,则服务器不会启动。如果X插件在初始化过程中出现错误,导致无法绑定到任何地址,则插件初始化顺序失败,服务器不会加载它。

在客户端,可以在以下上下文中指定网络命名空间:

  • 对于mysql客户端和mysqlxtest测试套件客户端,请使用--network - namespace选项。例如:
mysql --host=192.0.2.2 --network-namespace=red

如果省略了--network - namespace选项,则连接将使用默认(全局)命名空间。

  • 对于从副本服务器到源服务器的复制连接,请使用CHANGE replication source to语句(从MySQL 8.0.23开始)或CHANGE MASTER to语句(在MySQL 8.00.23之前),并指定NETWORK_NAMESPACE选项。例如:
CHANGE REPLICATION SOURCE TOSOURCE_HOST = '192.0.2.2',NETWORK_NAMESPACE = 'red';

如果省略了NETWORK_NAMESPACE选项,则复制连接将使用默认(全局)命名空间。

以下示例设置了一个MySQL服务器,该服务器侦听全局、red和blue命名空间中的连接,并显示了如何配置从red和blue命名空间连接的帐户。假设已经创建了red和blue命名空间,如主机系统先决条件中所示。

1. 将服务器配置为侦听多个命名空间中的地址。将这些行放入服务器my.cnf文件中,然后启动服务器:

[mysqld]
bind_address = 127.0.1.1,192.0.2.2/red,198.51.100.2/blue

上面代码中给出的值告诉服务器监听全局命名空间中的环回地址127.0.0.1、红色命名空间中的地址192.0.2.2和蓝色命名空间中的198.51.100.2。

 2. 连接到全局命名空间中的服务器,并创建具有从每个命名命名空间的地址空间中的地址进行连接的权限的帐户:

$> mysql -u root -h 127.0.0.1 -p
Enter password: root_passwordmysql> CREATE USER 'red_user'@'192.0.2.2'IDENTIFIED BY 'red_user_password';
mysql> CREATE USER 'blue_user'@'198.51.100.2'IDENTIFIED BY 'blue_user_password';

3. 验证您是否可以连接到每个命名命名空间中的服务器:

$> mysql -u red_user -h 192.0.2.2 --network-namespace=red -p
Enter password: red_user_passwordmysql> SELECT USER();
+--------------------+
| USER()             |
+--------------------+
| red_user@192.0.2.2 |
+--------------------+
$> mysql -u blue_user -h 198.51.100.2 --network-namespace=blue -p
Enter password: blue_user_passwordmysql> SELECT USER();
+------------------------+
| USER()                 |
+------------------------+
| blue_user@198.51.100.2 |
+------------------------+

注意:
可能会从USER()中看到不同的结果,如果您的DNS被配置为能够将地址解析为相应的主机名,并且服务器没有在启用skip_name_resolve系统变量的情况下运行,USER可以返回一个包含主机名而非IP地址的值。

您也可以尝试在不使用--network - namespace选项的情况下调用mysql,以查看连接尝试是否成功,如果成功,USER()值将如何受到影响。

3 网络命名空间监视

出于复制监视的目的,这些信息源有一列显示连接的适用网络命名空间:

  • 性能架构replication_connection_configuration表。
  • 副本服务器连接元数据存储库。
  • SHOW REPLICA STATUS(或MySQL 8.0.22之前的SHOW SLAVE STATUS)语句。

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

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

相关文章

什么是应用安全态势管理 (ASPM):综合指南

软件开发在不断发展&#xff0c;应用程序安全也必须随之发展。 传统的应用程序安全解决方案无法跟上当今开发人员的工作方式或攻击者的工作方式。 我们需要一种新的应用程序安全方法&#xff0c;而ASPM在该方法中发挥着关键作用。 什么是 ASPM&#xff1f; 应用程序安全…

配电智能网关赋能电力系统智能化运行维护

随着智能电网和物联网技术的不断发展&#xff0c;两者之间的融合应用成为电力行业的重要趋势。配电智能网关作为连接两者的关键设备&#xff0c;在智能电网的物联网应用中发挥着重要作用。 配电智能网关能够实现对电力系统的实时监控、数据采集、远程控制等功能&#xff0c;为…

已解决org.omg.CORBA.portable.RemarshalException:在CORBA中需要重新编组的正确解决方法,亲测有效!!!

已解决org.omg.CORBA.portable.RemarshalException&#xff1a;在CORBA中需要重新编组的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 服务器端代码 客户端代码 报错原因 解决思路 解决方法 1. 检查网络连接 …

力扣:LCR 024. 反转链表(Java)

目录 题目描述&#xff1a;示例 1&#xff1a;示例 2&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 给定单链表的头节点 head &#xff0c;请反转链表&#xff0c;并返回反转后的链表的头节点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#x…

Xinstall智能安装页面:一键唤起App,提升用户体验

在移动互联网时代&#xff0c;App已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;随着App数量的不断增加&#xff0c;用户面临着越来越多的选择&#xff0c;如何快速、便捷地安装并打开App成为了用户的一大痛点。针对这一问题&#xff0c;Xinstall凭借其强大的技术实…

数据结构——Hash Map

1. Hash Map简介 Hash Map是一种基于键值对的数据结构&#xff0c;通过散列函数将键映射到存储位置&#xff0c;实现快速的数据查找和存储。它可以在常数时间内完成查找、插入和删除操作&#xff0c;因此在需要频繁进行这些操作时非常高效。 2. Hash Map的定义 散列表&#xff…

计组_程序的机器级代码表示

2024.06.13&#xff1a;计算机组成原理程序的机器级代码表示 第15节 程序的机器级代码表示 5.1 x86的汇编指令格式5.2 常用指令 眼熟最基础的汇编语法和助记符即可 5.1 x86的汇编指令格式 5.2 常用指令

WinSCP 登录跳板机

使用 WinSCP 登录跳板机&#xff08;跳板机是一种中间服务器&#xff0c;用于安全连接到其他服务器&#xff09;需要进行一些配置。这里是一个简单的步骤指南&#xff1a; 准备工作 下载和安装 WinSCP&#xff1a;如果你还没有 WinSCP&#xff0c;可以从 WinSCP 官方网站 下载…

DeepMind的新论文,长上下文的大语言模型能否取代RAG或者SQL这样的传统技术呢?

长上下文大型语言模型&#xff08;LCLLMs&#xff09;确实引起了一些关注。这类模型可能使某些任务的解决更加高效。例如理论上可以用来对整本书进行总结。有人认为&#xff0c;LCLLMs不需要像RAG这样的外部工具&#xff0c;这有助于优化并避免级联错误。但是也有许多人对此持怀…

【PYG】简单分析 Cora 数据集的文件 cora.cites 和 cora.content

手动下载 Cora 数据集的文件 cora.cites 和 cora.content 后&#xff0c;你可以通过以下步骤将它们加载到 Python 环境中&#xff0c;并使用 PyTorch Geometric 或其他工具进行进一步处理和分析。 数据集文件说明 cora.cites: 包含了论文之间的引用关系。每一行表示一条引用关…

WPF对象样式

基本样式设置 Style 设置指定对象的属性 属性&#xff1a; TargetType 引用在哪个类型上面&#xff0c;例如Button、Textblock。。 如果在控件对象里面设置Style&#xff0c;则TargetType必须指定当前控件名 只在作用域里面有效果&#xff0c;其他的相同控件没有影响&…

统一的可观察性和安全性如何增强你的业务?

作者&#xff1a;来自 Elastic Michael Calizo 利用人工智能、异常检测和增强攻击发现功能&#xff0c;在一个平台上增强组织的可观察性和安全性能力 当今数字环境中的组织越来越关注服务可用性&#xff0c;并保护其软件免受恶意篡改和攻击。传统的安全和可观察性工具通常以孤…

VBA打开其他Excel文件

前言 本节会介绍通过VBA实现打开其他excel文件&#xff0c;包括模糊匹配文件名称、循环同时打开多个文件&#xff0c;并获取工作表及工作簿进行数据操作后&#xff0c;对打开的文件进行保存并关闭操作。 一、打开固定文件名称的文件 场景说明&#xff1a; 1.新建一个宏文件VBA…

通过Python将视频添加图片

from PIL import Image from moviepy.editor import *from configs.settings import PROJECT_PATHdef movie_add_image(video_config, type, video_path, out_path):# 加载视频文件video VideoFileClip(video_path)all_time 0for config in video_config:image config.get(t…

【NFS】【部署】NFS文件系统Server端部署,及客户端挂载

服务器准备 主机名IPk8s04192.168.199.24k8s05192.168.199.25 配置husts文件 vi /etc/hosts #追加 192.168.199.24 k8s04 192.168.199.25 k8s05Server端部署 yum install -y nfs-utils创建NFS存储目录 mkdir /data配置NFS服务 vi /etc/exports #添加 /data 192.168.…

【React】上传文章封面基础实现

<Form.Item label"封面"><Form.Item name"type"><Radio.Group onChange{onTypeChange}><Radio value{1}>单图</Radio><Radio value{3}>三图</Radio><Radio value{0}>无图</Radio></Radio.Group&…

react 自定义 年-月-日 组件,单独选择年、月、日,并且产生联动

自定义 年-月-日 组件 code import { useState } from react function Year_Month_Date() {const [yearList, setYearList] useState([])const [monthList, setMonthList] useState([])const [dateList, setDateList] useState([])const [currentYear, setCurrentYear] u…

javaweb(四)——过滤器与监听器

文章目录 过滤器Filter基本概念滤波器的分类: 时域和频域表示滤波器类型1. 低通滤波器(Low-Pass Filter)2. 高通滤波器(High-Pass Filter)3. 带通滤波器(Band-Pass Filter)4. 带阻滤波器(Band-Stop Filter) 滤波器参数1. 通带频率(Passband Frequency)2. 截止频率(Cutoff Frequ…

【Kotlin】Kotlin 基础语法指南

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

dell g15机器awcc删除后无法重新安装

那是因为注册表并没有删除干净&#xff0c;需要手动删除&#xff0c;但是普通小白又没有时间进行手动删除&#xff0c; 这个个时候就需要微软的删除工具的帮忙了. 微软软件删除工具&#xff1a;修复阻止程序安装或删除的问题 - Microsoft 支持