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.pswp.cn/diannao/39013.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39013.shtml
英文地址,請注明出處:http://en.pswp.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 支持