MySQL中的网络命名空间支持

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

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

$> mysql --user=admin --host=203.0.113.10 --protocol=tcp

mysql> 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 up

ip 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           blue

192.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-blue

ip netns del red
ip netns del blue

sysctl 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 TO
  SOURCE_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_password

mysql> 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_password

mysql> 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_password

mysql> 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.mfbz.cn/a/763280.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL架构和性能优化

文章目录 一、MySQL架构架构图存储引擎MyISAM引擎特点InnoDB引擎特点管理存储引擎 二、性能优化索引索引管理EXPLAIN 工具使用profile工具 监控 一、MySQL架构 架构图 存储引擎 MySQL提供了多种存储引擎供用户选择&#xff0c;每种存储引擎都有自己的特点和使用场景。 InnoDB…

算法刷题之路之链表初探(二)Leecode21合并两个有序链表

算法刷题之路之链表初探&#xff08;二&#xff09; 今天来学习的算法题是leecode141环形链表&#xff0c;是一道简单的入门题&#xff0c;话不多说&#xff01;直接上&#xff01; 条件&#xff08;Leecode21&#xff09; 重点&#xff01;&#xff01;&#xff01; 我直接把…

primetime中cell和net的OCV

文章目录 前言一、Cell OCV1. POCV coefficient file2. POCV Slew-Load Table in Liberty Variation Format&#xff08;LVF lib&#xff09; 二、Net OCV三、如何check OCV是否已加上&#xff1f;总结 前言 在生产中&#xff0c;外界环境的各种变化&#xff0c;比如PVT&#…

代码随想录第40天|动态规划

完全背包 完全背包物品可以无限使用 01背包核心代码 01背包中的二维dp数组的两个for遍历可颠倒, 而一维dp数组的一定先遍历物品再遍历背包容量状态转移方程(背包容量一定为递减) 完全背包核心代码 (只在完全背包中一维dp数组嵌套顺序可颠倒, 实际题目需要确定遍历顺序) 状…

云计算与生成式AI的技术盛宴!亚马逊云科技深圳 Community Day 社区活动流程抢先知道!

小李哥最近要给大家分享7月7日在深圳的即将举办的亚马逊云科技生成式AI社区活动Community Day &#xff0c;干货很多内容非常硬核&#xff0c;不仅有技术分享学习前沿AI技术&#xff0c;大家在现场还可以动手实践沉浸式体验大模型&#xff0c;另外参与现场活动还可以领取诸多精…

API-本地存储

学习目标&#xff1a; 掌握本地存储 学习内容&#xff1a; 本地存储介绍本地存储分类存储复杂数据类型 本地存储介绍&#xff1a; 以前我们页面写的数据一刷新页面就没有了&#xff0c;是不是? 随着互联网的快速发展&#xff0c;基于网页的应用越来越普遍&#xff0c;同时也…

中医药文化传承进校园活动授牌仪式在石家庄主办举办

青春闪“药”&#xff0c;我心向党。2024年6月30日&#xff0c;由河北省药品医疗器械检验研究院主办的”中医药文化传承进校园活动在石家庄主办。来自河北省各地24所学校作为示范学校现场接牌。 河北省科协科普部部长范玉鑫、河北省教育厅学位管理与研究生处副处长耿立艳、河北…

Springboot项目实训--day1

目录 一、软件安装 二、软件的简单了解 三、基础知识应用 1、四个常用注释 2、尝试新建类 3、控制反转&#xff08;IOC容器&#xff09; 4、返回数据给浏览器 5、浏览器传回数据给服务器 易错点 一、软件安装 需要安装的软件是idea专业版&#xff0c;刚使用的时候可以使…

mac|浏览器链接不上服务器但可以登微信

千万千万千万不要没有关梯子直接关机&#xff0c;不然就会这样子呜呜呜 设置-网络&#xff0c;点击三个点--选择--位置--编辑位置&#xff08;默认是自动&#xff09; 新增一个&#xff0c;然后选中点击完成 这样就可以正常上网了

Python 异常

文章目录 捕获异常捕获常规异常捕获指定异常捕获多个异常 else语法finally语法异常的传递 捕获异常 假设某处可能会出现异常&#xff0c;提前做好准备。 捕获常规异常 所有的异常都会被捕获&#xff0c;不指定异常。 语法&#xff1a; try:可能出错的代码 except:出现异常后…

Open3D 点云快速全局配准FGR算法(粗配准)

目录 一、概述 1.1原理和步骤 1.2关键技术和优势 1.3应用场景 二、代码实现 2.1 关键代码 2.1.1.函数&#xff1a;execute_fast_global_registration 2.1.2调用registration_fgr_based_on_feature_matching函数 2.2完整代码 三、实现效果 3.1原始点云 3.2粗配准后点…

写代码,为什么还需要作图?

引言 古人云 &#xff1a;一图胜千言&#xff0c;闲人说&#xff1a;无图无真相。 在日常的聊天工具当中&#xff0c;无论是使用微信&#xff0c;还是钉钉。使用图片或表情包的频次越来越高&#xff0c;那是为什么呢&#xff1f;其实在互联网没有那么发达的时候&#xff0c;我…

算法题笔记

主要记录python的力扣题解 参考的优质网站&#xff1a; 算法通关手册&#xff08;LeetCode&#xff09; | 算法通关手册&#xff08;LeetCode&#xff09; (itcharge.cn) 代码随想录 (programmercarl.com) 2024.6.28 题目&#xff1a;轮转数组 官网连接&#xff1a;189. …

Linux环境安装配置nginx服务流程

Linux环境的Centos、麒麟、统信操作系统安装配置nginx服务流程操作&#xff1a; 1、官网下载 下载地址 或者通过命令下载 wget http://nginx.org/download/nginx-1.20.2.tar.gz 2、上传到指定的服务器并解压 tar -zxvf nginx-1.20.1.tar.gzcd nginx-1.20.1 3、编译并安装到…

武汉星起航:跨境电商流量红利爆发,2023年出海企业迎突破增长

在数字时代的浪潮中&#xff0c;中国跨境电商以惊人的爆发力崭露头角&#xff0c;成为全球贸易的璀璨新星。2023年数据显示&#xff0c;跨境电商出口额高达1.83万亿元&#xff0c;同比增长19.6%&#xff0c;这一显著增速不仅刷新纪录&#xff0c;更为众多出海企业带来了前所未有…

vscode搭建suricata调试环境

一、环境 windows10 wsl2 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.2 LTS Release: 20.04 Codename: focal二、编译 2.1 下载源码 wget https://www.openinfosecfoundation.org/download/suri…

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

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

【Vue】微信禁止打开,可弹出提示:请用360、搜狗浏览器的极速模式打开。

需求 某网站链接&#xff0c;使用微信端打开&#xff0c;某些材料自动下载会造成泄密。所以添加限制&#xff1a;微信禁止打开&#xff0c;可弹出提示&#xff1a;请用360、搜狗浏览器的极速模式打开。 处理前 微信访问该链接&#xff0c;点击【继续访问】可直接跳转到该网站 处…

苍穹外卖项目 常用注解 + 动态sql

常用注解 常见的注解解析方法有两种&#xff1a; 编译期直接扫描&#xff1a;编译器在编译 Java 代码的时候扫描对应的注解并处理&#xff0c;比如某个方法使用Override 注解&#xff0c;编译器在编译的时候就会检测当前的方法是否重写了父类对应的方法。运行期通过反射处理&…

ROS2使用C++开发动作通信

1.开发接口节点 cd chapt4_ws/ ros2 pkg create robot_control_interfaces --build-type ament_cmake --destination-directory src --maintainer-name "joe" --maintainer-email "1027038527qq.com" mkdir -p src/robot_control_interfaces/action touch…