首页 > 数据库 >MySQL中的网络命名空间支持

MySQL中的网络命名空间支持

时间:2024-07-01 14:58:44浏览次数:3  
标签:blue ip 网络 空间 MySQL 命名 red

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()             |
+--------------------+
| [email protected] |
+--------------------+

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

为了解决这个问题,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()             |
+--------------------+
| [email protected] |
+--------------------+
$> mysql -u blue_user -h 198.51.100.2 --network-namespace=blue -p
Enter password: blue_user_password

mysql> SELECT USER();
+------------------------+
| USER()                 |
+------------------------+
| [email protected] |
+------------------------+

注意:
可能会从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)语句。

标签:blue,ip,网络,空间,MySQL,命名,red
From: https://blog.csdn.net/u011565038/article/details/140098700

相关文章

  • 升级到 MySQL 8.4,MySQL 启动报错:io_setup() failed with EAGAIN
    问题最近碰到一个case,一台主机上,部署了多个实例。之前使用的是MySQL8.0,启动时没有任何问题。但升级到MySQL8.4后,部分实例在启动时出现了以下错误。[Warning] [MY-012582] [InnoDB] io_setup() failed with EAGAIN. Will make 5 attempts before giving up.[W......
  • mysql数据库简介
    一、数据库介绍1.数据库基本概念数据(Data)描述事物的符号记录包括数字,文字、图形、图像、声音、档案记录等以“记录”形式按统一的格式进行存储表将不同的记录组织在一起用来存储具体数据数据库表的集合,是存储数据的仓库以一定的组织方式存储的相互有关的数据集合数据......
  • 浅谈 K8s Service 网络机制
    浅谈K8sService网络机制云原生运维圈 2024-07-0112:03 上海 1人听过 以下文章来源于腾讯云原生 ,作者王成腾讯云原生.云原生技术交流阵地,汇聚云原生最新技术资讯、文章、活动,以及云原生产品及用户最佳实践内容。王成,腾讯云研发工程师,Kubernetesmember,从......
  • 知识不成体系?这篇Mysql数据库将成为你的解忧杂货店!(子查询)
     欢迎来到@一夜看尽长安花博客,您的点赞和收藏是我持续发文的动力对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:[email protected]。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。   专栏:java全栈C&C++PythonAIP......
  • 记一次 .NET某网络边缘计算系统 卡死分析
    一:背景1.讲故事早就听说过有什么网络边缘计算,这次还真给遇到了,有点意思,问了下chatgpt这是干嘛的?网络边缘计算是一种计算模型,它将计算能力和数据存储位置从传统的集中式数据中心向网络边缘的用户设备、传感器和其他物联网设备移动。这种模型的目的是在接近数据生成源头的......
  • 1974Springboot医院远程诊断管理系统idea开发mysql数据库web结构java编程计算机网页源
    一、源码特点 springboot医院远程诊断管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSPjava编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。springboot医院远程诊断系统......
  • Google命名规范
    Google风格指南中的C#|风格指南---C#atGoogleStyleGuide|styleguide命名规则Code 1.类、方法、枚举、公共字段、公共属性、命名空间的名称: PascalCase 2.局部变量、参数的名称: camelCase 3.私有、受保护、内部和受保护的内部字段和属性的名称: _camelCase4.......
  • 基于RBF神经网络的机械臂运动控制算法(Matlab代码实现)
       ......
  • Android 监听网络状态变化(无切换中间态版)
    需求:获取当前的网络状态与类型(WIFI、数据流量)监听网络状态真正变化监听网络类型发生变化业务场景:用户打开App时、使用过程中,出现无网络时,显示Toast提示。但当wifi、数据流量互相切换的过程中不要有提示。下载功能支持检测到用户连接上wifi时开启静默下载,当换成数据......
  • Mysql模拟数据
    模拟SQL模拟报表数据(每日一条记录)--删除现有临时表(如果存在)DROPTEMPORARYTABLEIFEXISTStemp_citypower_dates;--创建临时表用于生成模拟数据CREATETEMPORARYTABLEtemp_citypower_dates(city_idINT,daytimeDATE,typeINT,powerDECIMAL(1......