日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MySQL InnoDB Cluster部署方案与实践

發(fā)布時(shí)間:2023/12/18 数据库 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL InnoDB Cluster部署方案与实践 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MySQL InnoDB Cluster

一、InnoDB Cluster 基本概述

MySQL InnoDB Cluster 為 MySQL 提供了一個(gè)完整的高可用解決方案。通過使用 MySQL Shell 提供的 AdminAPI,你可以輕松地配置和管理一組至少由3個(gè)MySQL服務(wù)器實(shí)例組成的 InnoDB 集群。

InnoDB 集群中的每個(gè) MySQL 服務(wù)器實(shí)例都運(yùn)行 MySQL Group Replication(組復(fù)制),該復(fù)制提供了在 InnoDB 集群中復(fù)制數(shù)據(jù)的機(jī)制,具有內(nèi)置的故障切換功能。AdminAPI 使我們避免了直接在 InnoDB 集群中使用組復(fù)制。從 MySQL 8.0.27開始,你還可以通過鏈接一個(gè)主 InnoDB 集群及其一個(gè)或多個(gè)異地(例如不同數(shù)據(jù)中心)副本來組成 InnoDB ClusterSet,以此來提供異地容災(zāi)功能。

MySQL Router 可以根據(jù)你部署的集群自動(dòng)配置自己,并將客戶端應(yīng)用程序透明地連接到 MySQL 服務(wù)器實(shí)例。如果 MySQL 服務(wù)器實(shí)例發(fā)生意外故障,集群將自動(dòng)重新配置。在默認(rèn)的單主模式下,InnoDB 集群只有一個(gè)讀寫服務(wù)器實(shí)例–主服務(wù)器,多個(gè)輔助服務(wù)器實(shí)例是主服務(wù)器的副本。如果主服務(wù)器故障,輔助服務(wù)器將自動(dòng)升級(jí)為主服務(wù)器角色。MySQL Router 檢測(cè)到這一點(diǎn)后,會(huì)將客戶端應(yīng)用程序的請(qǐng)求轉(zhuǎn)發(fā)到新的 MySQL 主服務(wù)器上。高級(jí)用戶還可以將集群配置為具有多個(gè)主節(jié)點(diǎn),但大多情況都不必要這樣做。

InnoDB 集群至少由三個(gè) MySQL 服務(wù)器實(shí)例組成,并提供高可用性和可擴(kuò)展性功能。將使用到以下 MySQL 技術(shù):

  • MySQL Shell,它是MySQL官方提供的高級(jí)客戶端和代碼編輯器。
  • MySQL Server 和 Group Replication(組復(fù)制),它們配合工作可以使一組MySQL實(shí)例對(duì)外提供高可能性。InnoDB Cluster提供了另一種易于使用的編程方式來使用Group Replication(組復(fù)制)功能。
  • MySQL Router,一個(gè)能在應(yīng)用程序和InnoDB集群之間提供透明路由的輕量級(jí)中間件,是官方提供的MySQL實(shí)例負(fù)載均衡器(不再需要借助類似HAProxy的第三方負(fù)載均衡器了)。

基于MySQL的Group Replication(組復(fù)制)構(gòu)建的集群,可提供自動(dòng)成員管理、容錯(cuò)、自動(dòng)故障切換等功能。InnoDB集群通常以單主模式(single-primary)運(yùn)行,具有一個(gè)主實(shí)例(primary讀寫)和多個(gè)輔助實(shí)例(secondary只讀)。高級(jí)用戶還可以利用多主模式(multi-primary),其中所有實(shí)例都是主實(shí)例。

你可以使用 MySQL Shell 提供的 AdminAPI 來操作 InnoDB集群。AdminAPI 有 JavaScript 和 Python 兩種版本,非常適合通過編寫腳本來自動(dòng)化部署MySQL,以實(shí)現(xiàn)高可用性和可擴(kuò)展性。通過使用 MySQL Shell 的 AdminAPI,你可以避免手動(dòng)配置許多實(shí)例。AdminAPI 為 MySQL 實(shí)例集(組)提供了一個(gè)高效的現(xiàn)代化接口,可以方便地在一個(gè)統(tǒng)一的工具中進(jìn)行配置、管理和監(jiān)控部署工作。

InnoDB Cluster支持MySQL Clone(克隆),這使你可以方便地向集群配置新的實(shí)例。在過去,一個(gè)新的實(shí)例加入到MySQL集群實(shí)例集之前,你可能需要通過某種方式手動(dòng)將事務(wù)傳輸?shù)酱尤氲男聦?shí)例中。這可能涉及制作文件副本、手動(dòng)復(fù)制它們等等。使用InnoDB Cluster,你只需向集群添加一個(gè)實(shí)例,它就會(huì)被自動(dòng)配置。類似地,InnoDB Cluster與 MySQL Router 也進(jìn)行了緊密集成,你可以使用AdminAPI來使它們一起工作。MySQL Router可以基于InnoDB Cluster,通過一個(gè)被稱為bootstrapping(引導(dǎo))的過程自動(dòng)化的配置它自己,你無(wú)需手動(dòng)配置路由。然后 MySQL Router 便可透明地將客戶端應(yīng)用程序連接到InnoDB集群,為客戶端連接提供路由和負(fù)載平衡。這種集成還允許你使用 AdminAPI 管理基于 InnoDB Cluster 引導(dǎo)的 MySQL Router 的某些方面。InnoDB Cluster 的集群狀態(tài)信息包含了基于集群引導(dǎo)的 MySQL Router 的詳細(xì)信息。Operations 使你可以在集群級(jí)別創(chuàng)建 MySQL Router 用戶,以使用基于集群引導(dǎo)的 MySQL Router 等等。

二、重點(diǎn)知識(shí)

2.1 InnoDB集群要求

在進(jìn)行 InnoDB Cluster 的生產(chǎn)部署安裝之前,請(qǐng)確保要使用的 MySQL 服務(wù)器實(shí)例滿足以下要求:

  • InnoDB Cluster使用組復(fù)制,因此你的服務(wù)器實(shí)例必須滿足相同的要求(參考組復(fù)制要求)。AdminAPI 提供 dba.checkInstanceConfiguration() 方法來驗(yàn)證某個(gè)實(shí)例是否滿足組復(fù)制要求,以及 dba.configureInstance() 方法來配置某個(gè)實(shí)例以滿足要求。(注意:使用沙箱部署時(shí),實(shí)例會(huì)自動(dòng)配置為滿足這些要求。)
  • 用于組復(fù)制的數(shù)據(jù)以及用于 InnoDB 集群的數(shù)據(jù),必須存儲(chǔ)在 InnoDB 事務(wù)存儲(chǔ)引擎中。使用其他存儲(chǔ)引擎(包括臨時(shí)內(nèi)存存儲(chǔ)引擎)可能會(huì)導(dǎo)致組復(fù)制錯(cuò)誤。在使用組復(fù)制和 InnoDB 集群之前,需要將使用其他存儲(chǔ)引擎的所有表轉(zhuǎn)換為使用 InnoDB 引擎。你可以通過在MySQL服務(wù)器實(shí)例上設(shè)置 disabled_storage_engines 系統(tǒng)變量來防止使用其他存儲(chǔ)引擎,例如:disabled_storage_engines=“MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY”
  • 在安裝配置集群時(shí),任何MySQL服務(wù)器實(shí)例都不能有入站復(fù)制通道(到達(dá)型)。在一個(gè)復(fù)制組上,由Group Replication(組復(fù)制)自動(dòng)創(chuàng)建的通道才允許被采用(group_replication_applier 和 group_replication_recovery)。InnoDB 集群不支持手工配置的異步復(fù)制通道,使用 AdminAPI 管理的除外。如果要將現(xiàn)有復(fù)制拓?fù)溥w移到一個(gè)InnoDB集群部署,并且需要在安裝過程中暫時(shí)跳過此驗(yàn)證,則可以在創(chuàng)建集群時(shí)使用force選項(xiàng)繞過它。
  • 必須在要與 InnoDB Cluster 一起使用的所有實(shí)例上啟用Performance Schema。
  • MySQL Shell 用于配置 InnoDB 集群中的服務(wù)器時(shí)使用到的配置腳本需要訪問Python。Windows版本的 MySQL Shell 中已經(jīng)包含了 Python,不需要用戶再做配置。在類 Unix 系統(tǒng)上,Python 必須配置為 shell 環(huán)境的一部份。要檢查你的 Unix 類系統(tǒng)是否正確配置了Python,請(qǐng)執(zhí)行以下操作:$ /usr/bin/env python ,如果Python解釋器啟動(dòng),則無(wú)需進(jìn)一步操作。如果前面的命令失敗,請(qǐng)?jiān)谀愕?Unix類系統(tǒng)上安裝正確版本的Python,并在 /usr/bin/python 和你安裝的 Python 二進(jìn)制可執(zhí)行文件之間創(chuàng)建一個(gè)軟鏈接。
  • 從8.0.17版開始,MySQL實(shí)例必須在 InnoDB 集群中使用唯一的 server_id 。當(dāng)你使用 Cluster.addInstance(instance) 操作時(shí),如果 instance 的 server_id 已經(jīng)被集群中的其他實(shí)例使用,那么該操作將失敗并報(bào)錯(cuò)。
  • 從8.0.23版開始,應(yīng)將MySQL實(shí)例配置為使用并行復(fù)制申請(qǐng)者(applier)。
  • 在配置 InnoDB 集群的某個(gè)MySQL實(shí)例過程中,實(shí)例要使用的絕大部分系統(tǒng)變量都已經(jīng)被配置好了。但是 AdminAPI 不會(huì)進(jìn)行 transaction_isolation 系統(tǒng)變量的配置,這意味著它將保持默認(rèn)值 REPEATABLE READ 。這不會(huì)影響單主模式(single-primary)集群,但是如果你使用的是多主模式(multi-primary)集群,那么除非你的應(yīng)用程序確實(shí)依賴默認(rèn)值 REPEATABLE READ ,否則我們強(qiáng)列建議將值設(shè)置為 READ COMMITTED 隔離級(jí)別。
  • 實(shí)例的相關(guān)配置項(xiàng),尤其是組復(fù)制配置項(xiàng),必須位于單個(gè) option 文件中。InnoDB Cluster只支持服務(wù)器實(shí)例的單個(gè) option 文件,不支持使用–defaults-extra-file 選項(xiàng)指定附加的 option 文件。對(duì)于任何使用實(shí)例 option 文件的 AdminAPI 操作,必須指定主文件。 如果你想為與 InnoDB Cluster 無(wú)關(guān)的配置項(xiàng)使用多 option 文件,你必須手動(dòng)配置這些文件,并考慮多 option 文件的使用優(yōu)先規(guī)則,確保它們被正確更新,并確保與 InnoDB Cluster 相關(guān)的設(shè)置沒有錯(cuò)誤地被一個(gè)未被認(rèn)可的額外 option 文件中的選項(xiàng)覆蓋。

2.2 InnoDB集群限制

由于InnoDB Cluster使用了Group Replication(組復(fù)制),所以除了下面列的限制外,還要考慮組復(fù)制的限制:

  • InnoDB 集群不管理手動(dòng)配置的異步復(fù)制通道。Group Replication(組復(fù)制)和 AdminAPI 不確保異步復(fù)制僅在主服務(wù)器上處于活動(dòng)狀態(tài),并且不跨實(shí)例復(fù)制狀態(tài)。這可能會(huì)導(dǎo)致復(fù)制不再工作的各種情況,并且可能導(dǎo)致集群出現(xiàn)腦裂。只有從 MySQL 8.0.27 版本開始可用的 InnoDB ClusterSet 才支持在一個(gè) InnoDB 集群與另一個(gè)集群之間的復(fù)制,它管理著從一個(gè)活動(dòng)的主讀寫 InnoDB 集群到多個(gè)只讀副本集群的復(fù)制工作。
  • InnoDB Cluster 被設(shè)計(jì)為在局域網(wǎng)中部署。在廣域網(wǎng)上部署單個(gè) InnoDB 集群對(duì)寫性能有顯著影響。穩(wěn)定且低延遲的網(wǎng)絡(luò)對(duì)于InnoDB 集群成員服務(wù)器使用底層 Group Replication(組復(fù)制)技術(shù)相互通信以達(dá)成事務(wù)共識(shí)非常重要。然而,InnoDB ClusterSet 是被設(shè)計(jì)為跨多個(gè)數(shù)據(jù)中心部署的,每個(gè) InnoDB 集群部署在單個(gè)數(shù)據(jù)中心中,通過異步復(fù)制通道將它們連接起來。
  • 對(duì)于 AdminAPI 操作,你只能使用 TCP/IP 連接和經(jīng)典的 MySQL 協(xié)議連接到InnoDB集群中的服務(wù)器實(shí)例。AdminAPI操作不支持使用 Unix sockets 和 named pipes(命名管道),AdminAPI 操作也不支持使用 X 協(xié)議。同樣的限制也適用于MySQL 服務(wù)器實(shí)例本身之間的連接。(注意:客戶端應(yīng)用程序可以使用 X 協(xié)議、Unix sockets 和 named pipes(命名管道)連接到InnoDB集群中的實(shí)例,這些限制僅適用于使用 AdminAPI 命令的管理操作,以及集群內(nèi)實(shí)例之間的連接)
  • AdminAPI 和 InnoDB Cluster支持 MySQL Server 5.7 版本的實(shí)例。但是對(duì)這些實(shí)例會(huì)有一些限制,并且有一些功能在這版本上不支持。
  • 使用多主模式時(shí),不支持針對(duì)同一對(duì)象但在不同服務(wù)器上發(fā)出的并發(fā)DDL語(yǔ)句和DML語(yǔ)句。在某個(gè)對(duì)象上發(fā)出數(shù)據(jù)定義語(yǔ)句(DDL)期間,在同一對(duì)象上但從不同服務(wù)器實(shí)例發(fā)出并發(fā)數(shù)據(jù)操作語(yǔ)句(DML),可能會(huì)導(dǎo)致在不同實(shí)例上執(zhí)行的DDL沖突風(fēng)險(xiǎn)而未被檢測(cè)到。(參考組復(fù)制的限制)

2.3 InnoDB集群的用戶賬戶

InnoDB集群中的成員服務(wù)器使用三種類型的用戶帳戶。一個(gè) InnoDB 集群服務(wù)器配置帳戶用于為集群配置服務(wù)器實(shí)例。可以為管理員創(chuàng)建一個(gè)或多個(gè) InnoDB 集群管理員帳戶,以便在集群安裝后管理服務(wù)器實(shí)例。可以為 MySQL Router 實(shí)例創(chuàng)建一個(gè)或多個(gè) MySQL Router 帳戶,用于連接到集群。這些用戶帳戶必須存在 InnoDB 集群中的所有成員服務(wù)器上都存在,并且使用相同的用戶名和密碼。

2.3.1 InnoDB 集群服務(wù)器配置帳戶

此帳戶用于創(chuàng)建和配置 InnoDB 集群的成員服務(wù)器。每個(gè)成員服務(wù)器只有一個(gè)服務(wù)器配置帳戶。集群中的每個(gè)成員服務(wù)器必須使用相同的用戶帳戶名和密碼。為此,你可以在服務(wù)器上使用 root 帳戶,但如果這樣做,集群中每個(gè)成員服務(wù)器上的 root 帳戶必須具有相同的密碼。出于安全原因,不建議這樣做。

首選方法是使用 clusterAdmin 選項(xiàng)中的 dba.configureInstance()命令創(chuàng)建一個(gè) InnoDB集群服務(wù)器配置賬號(hào)。為提高安全性,請(qǐng)?jiān)诮换ヌ崾鞠轮付艽a,也可以使用 clusterAdminPassword 選項(xiàng)指定密碼。在將成為 InnoDB 集群一部分的每個(gè)服務(wù)器實(shí)例上以相同的方式創(chuàng)建相同的帳戶,使用相同的用戶名和密碼——包括你連接以創(chuàng)建集群的實(shí)例,以及之后將加入集群的實(shí)例。

dba.configureInstance()命令會(huì)自動(dòng)授予帳戶所需的權(quán)限(你也可以手動(dòng)設(shè)置該帳戶并授權(quán),但不建議這么做)。除了完整的 MySQL 管理員權(quán)限外,該帳戶還需要對(duì) InnoDB 集群元數(shù)據(jù)表?yè)碛型暾淖x寫權(quán)限。

使用 dba.configureInstance()命令創(chuàng)建一個(gè) InnoDB集群服務(wù)器配置賬號(hào)不會(huì)復(fù)制到集群內(nèi)的其他服務(wù)器上。MySQL Shell 禁用了 dba.configureInstance()命令的二進(jìn)制日志記錄。這意味著你必須在每個(gè) MySQL 服務(wù)器實(shí)例上單獨(dú)創(chuàng)建該帳戶。

2.3.2 InnoDB 集群管理員帳戶

這些帳戶在你完成集群配置之后,可用于管理 InnoDB 集群。你可以設(shè)置多個(gè),每個(gè)帳戶必須存在于 InnoDB 集群中的每個(gè)成員服務(wù)器上,并具有相同的用戶名和密碼。

為了給 InnoDB ClusterSet 創(chuàng)建 InnoDB 集群管理員賬號(hào),你需要在將所有實(shí)例添加到集群后執(zhí)行 cluster.setupAdminAccount()命令。該命令將使用你給定的用戶名和密碼創(chuàng)建賬號(hào),并賦予必要的權(quán)限。使用cluster.setupAdminAccount()創(chuàng)建一個(gè)賬號(hào)的事務(wù)將被寫入到二進(jìn)制日志,并發(fā)送到集群內(nèi)所有其他服務(wù)器實(shí)例上,用于在這些服務(wù)器上創(chuàng)建相同的賬號(hào)。(備注:如果主InnoDB 集群是在MySQL Shell 8.0.20之前版本部署的,cluster.setupAdminAccount()命令可能與 update 選項(xiàng)一起使用,以更新 InnoDB集群服務(wù)器配置帳戶的權(quán)限,這是未寫入二進(jìn)制日志的命令的特殊用法)

2.3.3 MySQL Router 帳戶

這些賬號(hào)被 MySQL Router 用于連接到 InnoDB 集群中的MySQL服務(wù)器實(shí)例。你可以設(shè)置多個(gè)此類賬號(hào),每個(gè)帳戶必須存在于InnoDB 集群中的每個(gè)成員服務(wù)器上,并具有相同的用戶名和密碼。創(chuàng)建 MySQL Router 帳戶的過程與創(chuàng)建 InnoDB 群集管理員帳戶相同,但使用的是 cluster.setupRouterAccount() 命令。(也會(huì)寫binary log 進(jìn)行同步創(chuàng)建)

2.3.4 InnoDB集群創(chuàng)建的內(nèi)部用戶帳戶

作為使用組復(fù)制的一部分,InnoDB 集群會(huì)創(chuàng)建內(nèi)部恢復(fù)用戶,以實(shí)現(xiàn)群集中服務(wù)器之間的連接。這些用戶是集群的內(nèi)部用戶,生成的用戶名遵循 mysql_innodb_cluster_server_id@% 的命名方案,其中 server_id 對(duì)每個(gè)實(shí)例是唯一的。在 8.0.17 之前的版本中,生成用戶的用戶名遵循 mysql_innodb_cluster_r[10_numbers] 的命名方案。

這些內(nèi)部用戶使用的主機(jī)名設(shè)置為“%”。在 v8.0.17 之前,ipAllowlist 會(huì)通過在 ipAllowlist 中每個(gè)主機(jī)一個(gè)賬號(hào)來影響主機(jī)名行為。

每個(gè)內(nèi)部用戶都有一個(gè)隨機(jī)生成的密碼。從 8.0.18 版開始,AdminAPI 允許你更改內(nèi)部用戶生成的密碼。請(qǐng)參閱【重置恢復(fù)帳戶密碼】。隨機(jī)生成的用戶將獲得以下授權(quán):GRANT REPLICATION SLAVE ON . to internal_user;

內(nèi)部用戶帳戶在 seed 實(shí)例上創(chuàng)建,然后復(fù)制到集群中的其他實(shí)例。內(nèi)部用戶包括:

  • 通過執(zhí)行 dba.createCluster()命令創(chuàng)建一個(gè)新集群時(shí)生成的
  • 通過執(zhí)行 Cluster.addInstance()命令向集群添加一個(gè)新實(shí)例時(shí)生成的
  • 使用主要成員正在使用的身份驗(yàn)證插件時(shí)生成的

在 v8.0.17 之前,ipAllowlist 會(huì)導(dǎo)致 Cluster.rejoinInstance()命令移除老的內(nèi)部用戶并生成新的用戶,而不是重用它們。

2.3.5 重置恢復(fù)帳戶密碼

從8.0.18版開始,你可以使用 Cluster.resetRecoveryAccountsPassword()命令重置InnoDB群集創(chuàng)建的內(nèi)部恢復(fù)帳戶的密碼,例如為了遵循自定義密碼生存期策略。使用 Cluster.resetRecoveryAccountsPassword()命令重置群集使用的所有內(nèi)部恢復(fù)帳戶的密碼。該命令為每個(gè)聯(lián)機(jī)實(shí)例的內(nèi)部恢復(fù)帳戶設(shè)置一個(gè)新的隨機(jī)密碼,如果無(wú)法訪問實(shí)例,則操作失敗。你可以使用 force 選項(xiàng)忽略此類脫機(jī)的實(shí)例,但不建議這樣做,在使用此命令之前將實(shí)例重新聯(lián)機(jī)更安全。此命令僅適用于InnoDB Cluster創(chuàng)建的密碼,不能用于更新手動(dòng)創(chuàng)建的密碼。

備注:執(zhí)行此操作的用戶必須具有所有必需的管理權(quán)限,尤其是創(chuàng)建用戶權(quán)限CREATE USER,以確保無(wú)論所需的密碼驗(yàn)證策略如何,都可以更改恢復(fù)帳戶的密碼。換句話說,這與系統(tǒng)變量 password_require_current 是否啟用無(wú)關(guān)。

三、生產(chǎn)環(huán)境部署

在生產(chǎn)環(huán)境中,組成 InnoDB 集群的MySQL服務(wù)器實(shí)例運(yùn)行在以網(wǎng)絡(luò)鏈接的多個(gè)主機(jī)上,而不是一臺(tái)機(jī)器上。在組建 InnoDB 集群之前,我們必須將所需的軟件安裝到要作為集群服務(wù)器實(shí)例的每臺(tái)機(jī)器上。

下圖說明了將組建的 InnoDB 集群的邏輯架構(gòu)(IP只是做示例作用):

注意:對(duì)于生產(chǎn)部署,必須持久化實(shí)例上的任何配置變更,如何做到這一點(diǎn)取決于實(shí)例上運(yùn)行的MySQL版本。

為了將服務(wù)器的連接信息傳遞給 AdminAPI,可以使用類似 URI 的連接字符串或數(shù)據(jù)字典,本例中我們將使用類似 URI 的連接字符串。

3.1 環(huán)境規(guī)劃

IP地址主機(jī)名角色操作系統(tǒng)MySQL版本
192.168.10.51node1MGR/mysqlshellCentOS 7.9mysql 8.0.31
192.168.10.52node2MGR/mysqlshellCentOS 7.9mysql 8.0.31
192.168.10.53node3MGR/mysqlshellCentOS 7.9mysql 8.0.31
192.168.10.54node0mysqlrouter/mysqlshellCentOS 7.9mysql 8.0.31

3.1.1基礎(chǔ)環(huán)境準(zhǔn)備

  • 關(guān)閉防火墻
#在每個(gè)節(jié)點(diǎn)執(zhí)行 systemctl disable firewalld systemctl stop firewalld
  • 永久關(guān)閉selinux
#在每個(gè)節(jié)點(diǎn)執(zhí)行 sed -i 's/^ *SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  • 設(shè)置主機(jī)名
#在node1執(zhí)行 hostnamectl set-hostname node1 #在node2執(zhí)行 hostnamectl set-hostname node2 #在node3執(zhí)行 hostnamectl set-hostname node3 #在node0執(zhí)行 hostnamectl set-hostname node0#沒每個(gè)節(jié)點(diǎn)執(zhí)行 cat >> /etc/hosts << EOF 192.168.10.51 node1 192.168.10.52 node2 192.168.10.53 node3 192.168.10.54 node0 EOF
  • 配置SSH互信
#在每個(gè)節(jié)點(diǎn)分別生成私鑰對(duì) ssh-keygen -t rsa #在node1,根據(jù)提示完成操作 ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.52 ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.53 ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.54#在node2,根據(jù)提示完成操作 ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.51 ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.53 ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.54#在node3,根據(jù)提示完成操作 ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.51 ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.52 ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.54#在node0,根據(jù)提示完成操作 ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.51 ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.52 ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.53
  • yum配置

離線環(huán)境下,需要為每個(gè)節(jié)點(diǎn)配置本地yum源。

#將鏡像文件mount至/media [root@node1 ~]# mount -o loop -t iso9660 CentOS-7-x86_64-DVD-2009.iso /media [root@node1 ~]# cat /etc/yum.repos.d/local.repo [local] name=local baseurl=file:///media gpgcheck=0 enabled=1 gpgkey=file:///media/RPM-GPG-KEY-CentOS-7 #校驗(yàn)yum [root@node1 ~]# yum clean all

3.2 安裝mysql

前往mysql官方下載地址:https://dev.mysql.com/downloads/。下載操作系統(tǒng)適配的MySQL Shell安裝包,MySQL Router安裝包以及MySQL Server。以下以8.0.31為例:

將以上文件上傳至各個(gè)服務(wù)器臨時(shí)安裝目錄,準(zhǔn)備進(jìn)行下一步安裝。

3.2.1 安裝3個(gè)數(shù)據(jù)庫(kù)實(shí)例

安裝并初始化3個(gè)數(shù)據(jù)庫(kù)實(shí)例,這里步驟省略,跟安裝部署MySQL步驟一樣,以node1為例進(jìn)行說明。

#清理操作系統(tǒng)自帶的 MySQL或者 Mariadb rpm -qa | grep mariadb | xargs rpm -e --nodeps rpm -qa | grep mysql | xargs rpm -e --nodeps#解壓mysql安裝壓縮包 tar -xvf mysql-8.0.31-1.el7.x86_64.rpm-bundle.tar #yum安裝mysql server相關(guān)的安裝包,可以自動(dòng)處理依賴關(guān)系 yum install -y mysql-community-* #改命令安裝mysql全部包 yum install -y mysql-community-{server,client,common,libs}-*#亦有此命令安裝mysql基礎(chǔ)包 #以上兩種安裝方式都可以,一個(gè)是安裝全部安裝包,一個(gè)是安裝基本安裝包。建議全部安裝。

3.2.2 初始化3個(gè)數(shù)據(jù)庫(kù)實(shí)例

在第一次啟動(dòng)的/var/log/mysqld.log中找到初始密碼,并使用該密碼進(jìn)行登錄。而后分別在每個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)執(zhí)行以下操作。

#啟動(dòng)mysql [root@node1 ~]# systemctl start mysqld [root@node1 ~]# cat /var/log/mysqld.log | grep 'temporary password' 2022-11-13T09:54:43.615664Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: oVdjq0vrAd/C #登錄并修改root用戶初始密碼 [root@node1 ~]# mysql -u root -p mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'Abcd@1234'; #修改root訪問權(quán)限 mysql> use mysql; mysql> update user set host='%' where user='root'; mysql> grant all on *.* to 'root'@'%' with grant option;

3.2.3 在所有節(jié)點(diǎn)安裝MySQL Shell

yum install -y mysql-shell-8.0.31-1.el7.x86_64.rpm

3.3 InnoDB Cluster 配置及初始化

因root用戶權(quán)限較大,不建議將其作為集群配置用戶。可以參考以下權(quán)限,新建用戶。

CREATE USER 'ic_admin'@'%' IDENTIFIED BY 'Abcd@1234'; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,DROP ON *.* TO 'ic_admin'@'%' WITH GRANT OPTION; GRANT CREATE USER, FILE, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN, SUPER ON *.* TO 'ic_admin'@'%' WITH GRANT OPTION; GRANT ALTER ROUTINE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, EVENT, EXECUTE, INDEX, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER ON mysql_innodb_cluster_metadata.* TO 'ic_admin'@'%' WITH GRANT OPTION; GRANT ALTER ROUTINE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, EVENT, EXECUTE, INDEX, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER ON mysql_innodb_cluster_metadata_bkp.* TO 'ic_admin'@'%' WITH GRANT OPTION; GRANT ALTER ROUTINE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, EVENT, EXECUTE, INDEX, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER ON mysql_innodb_cluster_metadata_previous.* TO 'ic_admin'@'%' WITH GRANT OPTION; GRANT CLONE_ADMIN, CONNECTION_ADMIN, EXECUTE, GROUP_REPLICATION_ADMIN, PERSIST_RO_VARIABLES_ADMIN, REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, ROLE_ADMIN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'ic_admin'@'%' WITH GRANT OPTION; flush privileges;

在三個(gè)MySQL Server所在虛擬機(jī)上用mysqlsh命令打開MySQL Shell,并分執(zhí)行以下命令將其上的MySQL實(shí)例配置為用于InnoDB集群的實(shí)例(實(shí)際上這些命令會(huì)查找MySQL的配置文件my.cnf,將集群需要的配置寫入其中,當(dāng)然還有其他些方面的配置變更),同時(shí)指定 InnoDB 集群管理員賬號(hào)——icadmin,必須是相同的賬號(hào)名稱和密碼(注意:MySQL 5.7用的是configureLocalInstance(),不是configureInstance()):

3.3.1 節(jié)點(diǎn)配置檢查

  • 檢查

執(zhí)行每個(gè)節(jié)點(diǎn)的參數(shù)及權(quán)限配置預(yù)需求檢測(cè)。

mysqlsh ic_admin@node1 MySQL node1:33060+ ssl JS > dba.checkInstanceConfiguration('ic_admin@node1') MySQL node1:33060+ ssl JS > dba.checkInstanceConfiguration('ic_admin@node2') MySQL node1:33060+ ssl JS > dba.checkInstanceConfiguration('ic_admin@node3')

檢測(cè)通過會(huì)顯示如下:
檢測(cè)失敗會(huì)顯示如下:

  • 配置

對(duì)每個(gè)節(jié)點(diǎn),通過dba.configureInstance()進(jìn)行集群相關(guān)信息配置。

MySQL node1:33060+ ssl JS > dba.configureInstance('ic_admin@node1') MySQL node1:33060+ ssl JS > dba.configureInstance('ic_admin@node2') MySQL node1:33060+ ssl JS > dba.configureInstance('ic_admin@node3')

以下為對(duì)node1節(jié)點(diǎn)的配置,在交互式窗口中輸入’y’進(jìn)行確認(rèn)。執(zhí)行完成后,再次通過上面的檢測(cè)命令進(jìn)行每個(gè)節(jié)點(diǎn)檢測(cè),直到所有節(jié)點(diǎn)狀態(tài)都是ok為止。

MySQL node1:33060+ ssl JS > dba.configureInstance('ic_admin@node1') Configuring local MySQL instance listening at port 3306 for use in an InnoDB cluster...This instance reports its own address as node1:3306 Clients and other cluster members will communicate with it through this address by default. If this is not correct, the report_host MySQL system variable should be changed.applierWorkerThreads will be set to the default value of 4.NOTE: Some configuration options need to be fixed: +----------------------------------------+---------------+----------------+--------------------------------------------------+ | Variable | Current Value | Required Value | Note | +----------------------------------------+---------------+----------------+--------------------------------------------------+ | binlog_transaction_dependency_tracking | COMMIT_ORDER | WRITESET | Update the server variable | | enforce_gtid_consistency | OFF | ON | Update read-only variable and restart the server | | gtid_mode | OFF | ON | Update read-only variable and restart the server | | server_id | 1 | <unique ID> | Update read-only variable and restart the server | +----------------------------------------+---------------+----------------+--------------------------------------------------+Some variables need to be changed, but cannot be done dynamically on the server. Do you want to perform the required configuration changes? [y/n]: y Do you want to restart the instance after configuring it? [y/n]: y Configuring instance... The instance 'node1:3306' was configured to be used in an InnoDB cluster. Restarting MySQL... NOTE: MySQL server at node1:3306 was restarted.

3.3.2 創(chuàng)建集群

  • 創(chuàng)建集群

將node1規(guī)劃為創(chuàng)建集群的種子節(jié)點(diǎn),在node1上使用集群管理員賬號(hào)重新進(jìn)入MySQL Shell中,執(zhí)行以下命令創(chuàng)建一個(gè)名為 "myCluster"的集群:

[root@node1 software]# mysqlsh --uri ic_admin@node1 MySQL Shell 8.0.31Copyright (c) 2016, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type '\help' or '\?' for help; '\quit' to exit. Creating a session to 'ic_admin@node1' Fetching schema names for auto-completion... Press ^C to stop. Your MySQL connection id is 22 (X protocol) Server version: 8.0.31 MySQL Community Server - GPL No default schema selected; type \use <schema> to set one. #在創(chuàng)建集群添加Seed Instance的過程中可能會(huì)報(bào)錯(cuò),這個(gè)時(shí)候要 cat /var/log/mysqld.log 打開日志看看具體報(bào)錯(cuò),比如我的就是由于防火器阻止了端口33061上的連接所致:MySQL node1:33060+ ssl JS > var cluster=dba.createCluster('myCluster') A new InnoDB Cluster will be created on instance 'node1:3306'.Validating instance configuration at node1:3306...This instance reports its own address as node1:3306Instance configuration is suitable. NOTE: Group Replication will communicate with other members using 'node1:3306'. Use the localAddress option to override.Creating InnoDB Cluster 'myCluster' on 'node1:3306'...Adding Seed Instance... Cluster successfully created. Use Cluster.addInstance() to add MySQL instances. At least 3 instances are needed for the cluster to be able to withstand up to one server failure.
  • 添加節(jié)點(diǎn)

如果你前面使用 dba.createCluster(‘myCluster’);創(chuàng)建集群時(shí),沒用 var cluster來承接,或者你創(chuàng)建完集群后重新進(jìn)入MySQL Shell的,那么你可以通過下面命令來獲取的目標(biāo)集群對(duì)象(舊時(shí)代叫【句柄】):

MySQL node1:33060+ ssl JS > var cluster=dba.getCluster('myCluster') #添加節(jié)點(diǎn)MySQL node1:33060+ ssl JS > cluster.addInstance('ic_admin@node2')MySQL node1:33060+ ssl JS > cluster.addInstance('ic_admin@node3')

添加節(jié)點(diǎn)顯示如下:

3.3.3 查看集群

#查看集群狀態(tài)MySQL node1:33060+ ssl JS > cluster.status()

至此,集群配置完成。查看集群狀態(tài),正常顯示如下,所有節(jié)點(diǎn)ONLINE。

3.4 安裝mysql router

3.4.1 mysql router簡(jiǎn)介

從前面出現(xiàn)過的這兩張集群邏輯架構(gòu)圖中我們可以清楚的看到:在一個(gè)MySQL InnoDB集群中,MySQL Router 是獨(dú)立出來放在集群外面的,這也是由它在整個(gè)集群中所充當(dāng)?shù)慕巧鶝Q定的。

MySQL Router作為整個(gè)InnoDB集群的流量入口(門神),肩負(fù)著流量承接、負(fù)載均衡、成員管理以及故障轉(zhuǎn)移的重任(就像前置Nginx服務(wù)器一樣),非常有必要使用一臺(tái)高性能的獨(dú)立服務(wù)器進(jìn)行部署,還要配以足夠的帶寬(事實(shí)上,如果僅有一臺(tái)集中式MySQL Router服務(wù)器的話,它將成為整個(gè)集群性能和可用性的瓶頸,而解決這個(gè)問題方法是接下來要講的內(nèi)容)。另外, MySQL Shell 作為InnoDB集群的管理入口,其實(shí)也可以放在整個(gè)集群之上安裝,但在用MySQL Shell的指令dba.configureInstance(“configer@linux01:3306”);將MySQL Server實(shí)例配置為用于InnoDB集群的實(shí)例時(shí),會(huì)在命令執(zhí)行的本機(jī)查找MySQL Server的配置文件my.cnf,找不到將會(huì)報(bào)錯(cuò),所以上面三臺(tái)MySQL Server實(shí)例所在主機(jī)上也安裝上MySQL Shell。

實(shí)際生產(chǎn)中,為了獲得最佳性能,MySQL Router通常會(huì)與它服務(wù)的客戶端應(yīng)用程序安裝在同一臺(tái)主機(jī)上,主要原因有:

  • 這將允許客戶端應(yīng)用程序使用本地UNIX域socket來與MySQL Router建立鏈接,而不需要走TCP/IP;(注意:本地UNIX域socket只能在應(yīng)用程序和MySQL Router之間發(fā)揮作用,在MySQL Router和MySQL Server之間不行)
  • 這將減少網(wǎng)絡(luò)延遲;
  • 這將允許MySQL Router直接使用分配給客戶端應(yīng)用程序的MySQL賬號(hào)(例如myapp@192.168.0.254)來連接MySQL,而不需要單獨(dú)為MySQL Router的宿主機(jī)再分配一個(gè)額外的MySQL賬號(hào)(例如放大可登錄范圍的賬號(hào)myapp@%);
  • 這將允許MySQL Router跟隨應(yīng)用程序服務(wù)器一起橫向擴(kuò)展,形成一對(duì)一的服務(wù),消除集中式MySQL Router性能和可用性問題;

當(dāng)然,你也可以在網(wǎng)絡(luò)上運(yùn)行多個(gè)MySQL Router實(shí)例,并且不需要將MySQL Router 獨(dú)立部署到一臺(tái)機(jī)器上。這是因?yàn)镸ySQL Router不會(huì)依賴于何特定的服務(wù)器或主機(jī)!

下面是官方給出的MySQL Router的系統(tǒng)要求:

  • 硬件:至少需要1核CPU和256MB的內(nèi)存,建議使用4核CPU和4GB以上的內(nèi)存;
  • 磁盤空間:最少需要100MB的空間;
  • 外部庫(kù)依賴:大部分外部依賴都已經(jīng)打包在了MySQL Router包中(例如protobuf和rapidjson),有一個(gè)例外,那就是OpenSSL,它僅在Windows版本的MySQL Router包中有捆綁。類Linux系統(tǒng)的包管理器會(huì)自動(dòng)解決OpenSSL依賴,并根據(jù)需要安裝正確的OpenSSL版本。

3.4.2 安裝mysql router

在node4安裝mysql router

yum install -y mysql-router-community-8.0.31-1.el7.x86_64.rpm

3.4.3 配置mysql router

  • 配置MySQL Router,實(shí)現(xiàn)InnoDB集群讀寫分離和故障自動(dòng)轉(zhuǎn)移:

MySQL Router通過使用–bootstrap和其他命令行選項(xiàng)為現(xiàn)有的InnoDB集群自動(dòng)配置MySQL Router。在引導(dǎo)過程中,MySQL Route連接到目標(biāo)集群,獲取其元數(shù)據(jù)來實(shí)現(xiàn)自我配置(如果對(duì)應(yīng)的InnoDB集群重新創(chuàng)建了,使用它的MySQL Router需要?jiǎng)h除舊引導(dǎo)生成的配置文件(/etc/mysqlrouter/mysqlrouter.conf),并重新初始化引導(dǎo))。

mysqlrouter --bootstrap ic_admin@node1:3306 --user root # ic_admin 是InnoDB集群管理員賬號(hào),node1:3306是集群主節(jié)點(diǎn)或成員節(jié)點(diǎn),如果給的是成員節(jié)點(diǎn)引導(dǎo)模塊會(huì)自動(dòng)轉(zhuǎn)發(fā)到主節(jié)點(diǎn)(PRIMARY); # --user root指定的是操作系統(tǒng)賬號(hào),不MySQL Router用于連接到 InnoDB 集群的賬號(hào),該賬號(hào)你可以重新建一個(gè)專用的,也可以直接用了root賬號(hào);

可以看到配置完成后顯示:MySQL經(jīng)典協(xié)議讀寫操作走的是6446端口,而只讀協(xié)議走的是6647端口,有興趣的話你可以進(jìn)一步查看一下生成的MySQL Router配置文件 /etc/mysqlrouter/mysqlrouter.conf。后面啟動(dòng)MySQL Router時(shí),如不做特殊指定的話將使用這個(gè)生成的默認(rèn)配置文件!

如果開啟了防火墻,要第一時(shí)間記得對(duì)它們進(jìn)行防火墻例外設(shè)置,并重新載入防火墻。

  • 為集群配置 MySQL Router 帳戶:

在安裝有MySQL Shell的主機(jī)上連接上集群,使用MySQL Shell AdminAPI為集群添加MySQL Router專用賬號(hào)(可以多個(gè),但實(shí)際上可以不添加MySQL Router賬號(hào),直接使用分配給應(yīng)用程序的MySQL賬號(hào)即可,否則你還得為這個(gè)新添加的專用賬號(hào)到MySQL服務(wù)器上做授權(quán)操作,默認(rèn)權(quán)限很少)。

[root@node4 software]# mysqlsh --uri ic_admin@node1MySQL node1:33060+ ssl JS > var cluster =dba.getCluster('myCluster')MySQL node1:33060+ ssl JS > cluster.setupRouterAccount('myrouter') #以上命令為集群創(chuàng)建了一個(gè)可以在任意位置向集群發(fā)起連接的MySQL Router賬號(hào)——myrouter@%。如果要限制在某個(gè)IP或域名下才能發(fā)起連接,可以這樣做:MySQL node1:33060+ ssl JS > cluster.setupRouterAccount('myrouter@192.168.10.%')

輸入密碼和再次確認(rèn)密碼后,賬戶創(chuàng)建成功,顯示如下:

注意:該命令創(chuàng)建的myrouter用戶只有基礎(chǔ)權(quán)限,在實(shí)際應(yīng)用中,應(yīng)當(dāng)秉承最小權(quán)限原則,在主節(jié)點(diǎn)對(duì)myrouter用戶進(jìn)行正確的授權(quán)。

3.4.4 啟動(dòng)mysql router

mysqlrouter -c /etc/mysqlrouter/mysqlrouter.conf &

3.4.5 驗(yàn)證

在只裝有mysql client的服務(wù)器或者其他客戶端上面進(jìn)行登錄、數(shù)據(jù)操作等驗(yàn)證。以windows端navicat客戶端為例進(jìn)行驗(yàn)證。

以上配置中,主機(jī)地址為mysql routher服務(wù)器的ip地址,端口為讀寫端口,用戶名和密碼為3.4.3中配置的MySQL Router 帳戶。同樣的方式進(jìn)行只讀端口驗(yàn)證。

應(yīng)用程序通過MySQL Router連接上MySQL InnoDB集群里MySQL Server實(shí)例的過程:

  • MySQL客戶端或Connector連接器連接到MySQL Router的指定端口,例如這里的6446或6447;
  • MySQL Router檢查可用的MySQL Server實(shí)例;
  • MySQL Router向合適的MySQL Server實(shí)例建立連接并打開(根據(jù)端口類型:讀寫(RW)端口發(fā)給主節(jié)點(diǎn),只讀(RO)端口會(huì)進(jìn)行負(fù)載均衡選取從節(jié)點(diǎn));
  • MySQL Router在應(yīng)用程序和MySQL服務(wù)器之間來回轉(zhuǎn)發(fā)數(shù)據(jù)包。
  • 如果連接的MySQL服務(wù)器出現(xiàn)故障,MySQL Router將斷開應(yīng)用程序的連接。然后,應(yīng)用程序可以重試連接到MySQL Router,MySQL Router會(huì)選擇另一個(gè)可用的MySQL服務(wù)器建立連接。

3.5 驗(yàn)證

3.5.1 讀寫分離

通過Mysql命令show variables like ‘server_id’; 先查看一下InnoDB集群中三臺(tái)MySQL Server實(shí)例的server_id是多少,并將它們記下來:

node1:2861026507

node2:770008088

node3:1770854672

可以看到,讀寫請(qǐng)求被分發(fā)到node1,只讀請(qǐng)求分別被分發(fā)到node2和node3:

3.5.2 故障轉(zhuǎn)移

在上一步的基礎(chǔ)上,保持上一步的各個(gè)會(huì)話連接不要斷開,直接停掉當(dāng)前的主節(jié)點(diǎn)(node1上的MySQL Server實(shí)例),我們看看會(huì)發(fā)生什么:

登錄node2節(jié)點(diǎn),查看集群狀態(tài):

我們看到故障轉(zhuǎn)移在上一步實(shí)驗(yàn)的客戶端會(huì)話連接未關(guān)閉的情況下就自動(dòng)發(fā)生了,但卻有一個(gè)只讀(RO)端口的連接連在了當(dāng)前的新主節(jié)點(diǎn)上!這是為什么呢?不是說只讀(RO)端口建立連接時(shí)只會(huì)選擇從節(jié)點(diǎn)嗎?其實(shí)原因是:我們是在沒有關(guān)閉上一步的會(huì)話連接的情況下做的本次實(shí)驗(yàn),這次關(guān)掉舊主節(jié)點(diǎn)時(shí),其它節(jié)點(diǎn)上原先保持住的會(huì)話連接并不會(huì)重新建立,只有原來建立在舊的主節(jié)點(diǎn)上的連接會(huì)重新進(jìn)行連接!當(dāng)然后續(xù)新發(fā)起的連接還是會(huì)根據(jù)端口類型:讀寫(RW)端口發(fā)給主節(jié)點(diǎn),只讀(RO)端口會(huì)進(jìn)行負(fù)載均衡選取從節(jié)點(diǎn)!

四、集群相關(guān)操作

4.1 查看集群狀態(tài)

cluster.status()

MySQL node1:33060+ ssl JS > var cluster=dba.getCluster('myCluster')MySQL node1:33060+ ssl JS > cluster.status() {"clusterName": "myCluster", "defaultReplicaSet": {"name": "default", "primary": "node1:3306", "ssl": "REQUIRED", "status": "OK", "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", "topology": {"node1:3306": {"address": "node1:3306", "memberRole": "PRIMARY", "mode": "R/W", "readReplicas": {}, "replicationLag": "applier_queue_applied", "role": "HA", "status": "ONLINE", "version": "8.0.31"}, "node2:3306": {"address": "node2:3306", "memberRole": "SECONDARY", "mode": "R/O", "readReplicas": {}, "replicationLag": "applier_queue_applied", "role": "HA", "status": "ONLINE", "version": "8.0.31"}, "node3:3306": {"address": "node3:3306", "memberRole": "SECONDARY", "mode": "R/O", "readReplicas": {}, "replicationLag": "applier_queue_applied", "role": "HA", "status": "ONLINE", "version": "8.0.31"}}, "topologyMode": "Single-Primary"}, "groupInformationSourceMember": "node1:3306" }MySQL node1:33060+ ssl JS >

4.2 配置節(jié)點(diǎn)權(quán)重

memberWeight選項(xiàng)的值域?yàn)?到100之間的整數(shù),缺省值為50。該值是故障轉(zhuǎn)移時(shí)自動(dòng)選舉主節(jié)點(diǎn)的百分比權(quán)重,具有較高memberWeight值的實(shí)例更有可能在單主群集中被選為主節(jié)點(diǎn)

// 在集群創(chuàng)建完成后修改權(quán)重 var cluster = dba.getCluster() cluster.setInstanceOption('node1:3306','memberWeight',100) cluster.setInstanceOption('node2:3306','memberWeight',50) cluster.setInstanceOption('node3:3306','memberWeight',25)// 查看集群的參數(shù)配置(包括memberWeight優(yōu)先級(jí)配置) cluster.options()// 在集群創(chuàng)建時(shí)配置 dba.createCluster('myCluster', {memberWeight:75}) // 第一個(gè)節(jié)點(diǎn)配置方式 var cluster = dba.getCluster() cluster.addInstance('node2:3306',{memberWeight:50}) cluster.addInstance('node3:3306',{memberWeight:25})

4.3 將節(jié)點(diǎn)重新加入集群

狀態(tài)為mssing的節(jié)點(diǎn),通常是組復(fù)制關(guān)閉或中斷狀態(tài),可以用cluster.rejoinInstance()重新加入集群,會(huì)重新對(duì)該節(jié)點(diǎn)設(shè)置MGR相關(guān)參數(shù)(持久化到mysqld-auto.conf中)

4.3.1 rejoinInstance

{"node1:3306": {"address": "node1:3306", "memberRole": "PRIMARY", "mode": "R/W", "readReplicas": {}, "replicationLag": "applier_queue_applied", "role": "HA", "status": "ONLINE", "version": "8.0.31"}, "node2:3306": {"address": "node2:3306", "memberRole": "SECONDARY", "mode": "R/O", "readReplicas": {}, "replicationLag": "applier_queue_applied", "role": "HA", "status": "(MISSING)", "version": "8.0.31"}, "node3:3306": {"address": "node3:3306", "memberRole": "SECONDARY", "mode": "R/O", "readReplicas": {}, "replicationLag": "applier_queue_applied", "role": "HA", "status": "ONLINE", "version": "8.0.31"} }// 重新加入集群 cluster.rejoinInstance("ic_admin@node2:3306")

4.3.2 removeInstance && addInstance

如果一些參數(shù)做了修改,如server_uuid變更,導(dǎo)致rejoin失敗,則需要將節(jié)點(diǎn)從集群中刪除后重新加入

cluster.removeInstance("root@node2:3306",{force:true}) cluster.rescan() cluster.addInstance("root@node2:3306")

4.4 集群多數(shù)節(jié)點(diǎn)異常恢復(fù)

當(dāng)集群多個(gè)節(jié)點(diǎn)異常,則失去了仲裁機(jī)制,剩下的一個(gè)節(jié)點(diǎn)

// 將集群剝離為單節(jié)點(diǎn)運(yùn)行 JS > cluster.forceQuorumUsingPartitionOf("ic_admin@node3:3306")// 重新加另外2個(gè)節(jié)點(diǎn)加入 JS > cluster.rejoinInstance("ic_admin@node1:3306") JS > cluster.rejoinInstance("ic_admin@node2:3306")

4.5 完整關(guān)閉的集群如何恢復(fù)

每個(gè)節(jié)點(diǎn)都是正常的停止且正常的觸發(fā)stop group_replication停止的,當(dāng)重新啟動(dòng)時(shí)如果手工我們需要做以下操作才可拉起集群

  • 判斷哪個(gè)節(jié)點(diǎn)的GTID最新

  • 將最新的GTID節(jié)點(diǎn)group_replication_bootstrap_group設(shè)置為on表示以這個(gè)節(jié)點(diǎn)為基礎(chǔ)啟動(dòng)組復(fù)制

  • 再將其他節(jié)點(diǎn)的組復(fù)制啟動(dòng),集群恢復(fù)

我們也可以用mysqlsh的功能來讓其自行判斷最新數(shù)據(jù)的節(jié)點(diǎn),再采用dba.rebootClusterFromCompleteOutage()方式啟動(dòng)集群

// 通過node1節(jié)點(diǎn)觸發(fā)命令 MySQL node1:3306 ssl JS > dba.rebootClusterFromCompleteOutage() Restoring the default cluster from complete outage...// 檢測(cè)到node2服務(wù)器也包含在集群中,確認(rèn)添加 The instance 'node2:3306' was part of the cluster configuration. Would you like to rejoin it to the cluster? [y/N]: y// 檢測(cè)到node3服務(wù)器也包含在集群中,確認(rèn)添加 The instance 'node3:3306' was part of the cluster configuration. Would you like to rejoin it to the cluster? [y/N]: y// 檢測(cè)到node1不是最新的節(jié)點(diǎn),node2才是 Dba.rebootClusterFromCompleteOutage: The active session instance (node1:3306) isn't the most updated in comparison with the ONLINE instances of the Cluster's metadata. Please use the most up to date instance: 'node2:3306'. (RuntimeError)// 重新連接到node2上執(zhí)行相同操作 MySQL node1:3306 ssl JS > \connect "ic_admin@node2:3306" MySQL node1:3306 ssl JS > dba.rebootClusterFromCompleteOutage()// 完成后查看集群狀態(tài)是否正常 var cluster = dba.getCluster() cluster.status()

4.6 集群節(jié)點(diǎn)角色切換

在MGR的管理下提供了一下3中方式進(jìn)行角色切換,mysqlsh對(duì)其進(jìn)行了封裝調(diào)用

  • group_replication_set_as_primary(member_uuid);
    • cluster.setPrimaryInstance("IP:PORT")
  • group_replication_switch_to_single_primary_mode()
    • cluster.switchToSinglePrimaryMode("IP:PORT")
  • group_replication_switch_to_multi_primary_mode()
    • cluster.switchToMultiPrimaryMode()

4.6.1 單主模式-指定主節(jié)點(diǎn)切換

var cluster = dba.getCluster() cluster.setPrimaryInstance('node2:3306') cluster.status()

切換結(jié)果如下:

4.6.2 單主模式和多主模式相互切換

// 切換為多主模式 var cluster = dba.getCluster() cluster.switchToMultiPrimaryMode()// 指定明確的主節(jié)點(diǎn)將多主模式切換為單主模式 cluster.switchToSinglePrimaryMode("node1:3306")

4.7 參數(shù)配置

可以用cluster.options()查看當(dāng)前集群的配置屬性,集群參數(shù)配置分為兩種方式:

  • cluster.setOption() 用來設(shè)置所有節(jié)點(diǎn)的參數(shù)
  • cluster.setInstanceOption() 用來對(duì)指定節(jié)點(diǎn)配置屬性
// 將所有節(jié)點(diǎn)的權(quán)重都改為50/重新加入集群重試次數(shù)改為5次 var cluster = dba.getCluster() cluster.setOption("memberWeight",50) cluster.setOption("autoRejoinTries",5)// 將其中一個(gè)節(jié)點(diǎn)的權(quán)重改為75/重新加入集群重試次數(shù)改為10次 cluster.setInstanceOption("node1:3306","memberWeight",75) cluster.setInstanceOption("node1:3306","autoRejoinTries",10)

4.8 銷毀集群

刪除與群集關(guān)聯(lián)的所有元數(shù)據(jù)和配置,并禁用實(shí)例上的組復(fù)制,但不會(huì)刪除在實(shí)例之間復(fù)制的任何數(shù)據(jù)。要再次創(chuàng)建集群,使用,dba.createCluster()

var cluster = dba.getCluster() cluster.dissolve()

4.9 常見錯(cuò)誤

4.9.1 getCluster() 報(bào)錯(cuò)

// 獲取集群報(bào)錯(cuò),集群中的該節(jié)點(diǎn)MGR功能未啟動(dòng)MySQL 10.186.63.65:3310 ssl JS > var cluster = dba.getCluster() Dba.getCluster: This function is not available through a session to a standalone instance (metadata exists, instance belongs to that metadata, but GR is not active) (RuntimeError)// 可以切換到sql模式查看集群當(dāng)前狀態(tài) // 可以看到當(dāng)前集群只有一個(gè)節(jié)點(diǎn)且處于OFFLINE狀態(tài)MySQL 10.186.63.65:3310 ssl SQL > \sql select * from performance_schema.replication_group_members\G *************************** 1. row ***************************CHANNEL_NAME: group_replication_applierMEMBER_ID: 67c08e33-92c4-11eb-803d-02000aba3f41MEMBER_HOST: 10.186.63.65MEMBER_PORT: 3310MEMBER_STATE: OFFLINEMEMBER_ROLE: MEMBER_VERSION: 1 row in set (0.0038 sec)-- 可以將該節(jié)點(diǎn)作為引導(dǎo)節(jié)點(diǎn)啟動(dòng)集群 set global group_replication_bootstrap_group=on; start group_replication;-- 啟動(dòng)完畢后需關(guān)閉該參數(shù) set global group_replication_bootstrap_group=off;-- 再次查看可看到第一個(gè)節(jié)點(diǎn)恢復(fù)正常MySQL 10.186.63.65:3310 ssl SQL > select * from performance_schema.replication_group_members\G *************************** 1. row ***************************CHANNEL_NAME: group_replication_applierMEMBER_ID: 67c08e33-92c4-11eb-803d-02000aba3f41MEMBER_HOST: 10.186.63.65MEMBER_PORT: 3310MEMBER_STATE: ONLINEMEMBER_ROLE: PRIMARY MEMBER_VERSION: 8.0.22 1 row in set (0.0016 sec)

4.9.2 addInstance 報(bào)錯(cuò) Unknown MySQL server host

報(bào)這個(gè)錯(cuò)誤需要配置/etc/hosts將主機(jī)名和IP對(duì)應(yīng)關(guān)系配置上

Cluster.addInstance: Unknown MySQL server host '10-186-63-65' (2) (MySQL Error 2005)// cluster.status() 命令也會(huì)有如下顯示 "shellConnectError": "MySQL Error 2005 (HY000): Unknown MySQL server host '10-186-63-65' (2)",

4.9.3 清理殘留的mgr信息

dba.dropMetadataSchema()

Dba.checkInstanceConfiguration: Dba.checkInstanceConfiguration: This function is not available through a session to a standalone instance (metadata exists, instance belongs to that metadata, but GR is not active) (RuntimeError)

4.9.4 克隆插件不能設(shè)置為force_plus_permanent

在多次對(duì)同一個(gè)實(shí)例做集群初始化時(shí),不管是全量還是增量都會(huì)對(duì)克隆插件做一次重新加載,會(huì)如果對(duì)克隆插件開啟了force_plus_permanent屬性,則無(wú)法卸載。

Cluster.addInstance: error uninstalling plugin 'clone': 10.186.63.67:3310: Plugin 'clone' is force_plus_permanent and can not be unloaded (RuntimeError)

總結(jié)

以上是生活随笔為你收集整理的MySQL InnoDB Cluster部署方案与实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

久久福利电影 | 亚洲精品在线观看av | 日韩电影中文字幕在线观看 | 婷婷综合成人 | 亚洲精选国产 | 日韩精品中文字幕有码 | 色综合国产 | 国产美女视频一区 | a视频免费在线观看 | 免费视频一二三 | 日韩在线中文字幕 | 九九久久国产精品 | 一本一道久久a久久综合蜜桃 | av电影在线不卡 | www五月婷婷| 精品福利在线观看 | 一区二区不卡视频在线观看 | 黄色特级片| 日韩精品一区二区三区高清免费 | 中文字幕有码在线 | 91精品久久久久 | 在线看黄网站 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产精品伦一区二区三区视频 | 欧美一级日韩三级 | 五月婷婷在线综合 | 欧美在线视频一区二区三区 | 久久精品一二三区 | 最新日本中文字幕 | 亚洲高清视频一区二区三区 | 99免费观看视频 | 综合色在线观看 | 97在线成人 | 久久视频 | 午夜av剧场 | 丁香色婷| 久久久精品成人 | 国产精品入口麻豆 | 狠狠干美女 | 成人久久久久久久久 | 国产久草在线观看 | 成人国产精品久久久春色 | 91少妇精拍在线播放 | 国产成人精品电影久久久 | 青青网视频 | 国产精品自拍在线 | 日韩一级电影网站 | 欧美日韩首页 | 天天色天天色天天色 | 成人动漫精品一区二区 | 视频在线99re | 亚洲无吗av | 97人人澡人人添人人爽超碰 | 亚洲国产999| 狠狠色综合网站久久久久久久 | 中文字幕日韩av | 中文字幕在线播放第一页 | 在线看日韩av | 精品影院一区二区久久久 | 国产精品丝袜在线 | 片黄色毛片黄色毛片 | 中文字幕在线观看免费观看 | 婷婷午夜激情 | 欧美性免费 | 天天干天天操天天射 | 午夜精品一区二区三区在线播放 | 丁香激情五月婷婷 | 日韩精品在线看 | av观看久久久 | 青春草免费在线视频 | 99久久视频| 国产小视频你懂的在线 | 色网站视频 | 亚洲理论视频 | 蜜臀av性久久久久av蜜臀三区 | 伊人网综合在线观看 | 麻豆视频在线观看 | 最近日本韩国中文字幕 | 久久精品系列 | 最近日本韩国中文字幕 | 国产又粗又硬又爽的视频 | 激情综合中文娱乐网 | 极品美女被弄高潮视频网站 | 91麻豆免费版 | 欧美一级片| 亚洲国产日韩在线 | 精品欧美日韩 | 成人国产精品久久久久久亚洲 | 亚洲一区天堂 | 美女网站久久 | 九九热只有这里有精品 | 综合网婷婷 | 亚洲伦理一区二区 | 日本久久电影网 | 欧美日韩午夜在线 | 亚洲精品国产成人 | 色婷在线 | 欧美午夜一区二区福利视频 | 日韩在线视频看看 | 国产91学生| 日日操夜夜操狠狠操 | 中文字幕一区二区三区乱码不卡 | av黄在线播放 | 国产欧美综合在线观看 | 91黄色成人 | av青草| 激情视频一区二区三区 | 免费视频成人 | 在线免费观看国产 | www好男人| 成人免费xxxxxx视频 | 狠狠的干狠狠的操 | 久久激情视频 久久 | 狠狠躁夜夜躁人人爽超碰97香蕉 | www久久久| 久久九九久久精品 | 日韩欧美一区二区三区在线观看 | 日韩精品中文字幕在线播放 | 久久免费精彩视频 | 中文在线资源 | 久久精品一二三 | 国产午夜精品一区二区三区在线观看 | av成人资源 | 国产精品国产三级国产不产一地 | 日韩精品一区电影 | 成人理论电影 | 成人国产网站 | 久久亚洲欧美日韩精品专区 | 国产精品视频不卡 | 在线观看国产福利片 | 色综合国产 | 精品国产精品久久一区免费式 | 91mv.cool在线观看 | 亚洲永久精品在线 | 久草视频2 | 456免费视频 | 99精品99| 91亚州 | 国产成人av在线 | 黄污网站在线观看 | 国产精品1区2区3区 久久免费视频7 | 超碰人人在线 | 国产高清视频免费 | 国产一级片不卡 | 西西人体www444 | 亚洲第一区在线观看 | 香蕉免费 | 免费成人在线视频网站 | 中文字幕电影在线 | 色综合久久五月天 | 国产黄色电影 | 福利视频午夜 | 国产精品久久久影视 | 天天天射 | 国产午夜精品一区二区三区欧美 | 午夜国产福利在线 | 又紧又大又爽精品一区二区 | 激情综合色播五月 | 欧美成人精品在线 | 欧美日本不卡高清 | 免费成人av在线 | 一级免费观看 | 国产破处在线播放 | 国产成人一二片 | 免费观看丰满少妇做爰 | 九九九在线观看 | 91片黄在线观看动漫 | 69国产在线观看 | 日韩一二区在线观看 | 国产精品久久久久久久久久东京 | 国产精彩视频一区二区 | 91大神在线看 | 懂色av一区二区三区蜜臀 | 深夜男人影院 | 精品超碰| 成人啊 v | 国产乱老熟视频网88av | 999电影免费在线观看2020 | 精品在线观看视频 | 夜夜干天天操 | 成人久久18免费 | 成人午夜黄色 | 欧美亚洲国产日韩 | 99 精品 在线| 久久免费视频4 | 国产一卡二卡在线 | 日日干日日 | 免费黄色av片 | 日韩精品一区二区不卡 | 91在线小视频 | 国产精品2019 | 国产美女精品久久久 | 免费三及片 | 久久成人精品电影 | 国产三级视频在线 | 中文av字幕在线观看 | 亚洲人成人天堂h久久 | 久久伦理电影 | 日韩av进入 | 国产高清在线观看 | 国产精品网红福利 | 亚洲不卡123 | 69绿帽绿奴3pvideos | 中文字幕在线视频一区二区三区 | 黄色app网站在线观看 | 日韩免费观看高清 | a√天堂中文在线 | 久久99国产综合精品 | 色综合久久天天 | 欧美美女一级片 | 美女福利视频一区二区 | 狠狠网站 | 国产中文字幕久久 | 久久久天堂 | 视频在线观看入口黄最新永久免费国产 | 精品一区二区三区在线播放 | 日韩免费在线播放 | 91av视频 | av一区二区三区在线播放 | 国产视频在线观看免费 | 五月婷婷久草 | 亚洲视频免费在线观看 | 狠狠久久婷婷 | 91视频啊啊啊 | 午夜影院在线观看18 | www.天天操.com| 超碰精品在线 | 久久久久久久久国产 | 国产不卡视频在线播放 | 亚洲一级片在线观看 | 激情综合五月网 | 成人免费在线播放视频 | 五月天婷婷视频 | 成人午夜毛片 | 精品视频在线免费观看 | 色综合www | 国产精品成人免费一区久久羞羞 | 黄污网站在线观看 | 日韩视 | 国产91免费在线观看 | 欧美日韩大片在线观看 | 97视频久久久 | 精品伦理一区二区三区 | 日本一区二区免费在线观看 | 久久久久www | 午夜视频在线观看一区 | 成人在线免费看视频 | 91av在线视频免费观看 | 99精品毛片| 婷婷丁香色 | 免费看片成年人 | 亚州av免费 | 欧美日韩国产精品一区二区 | 久久精品视频在线免费观看 | 午夜国产在线观看 | 成人毛片一区 | 91高清视频在线 | a色视频 | 日韩中文字幕视频在线观看 | a天堂一码二码专区 | 三级黄色片子 | 亚洲 中文 在线 精品 | 福利电影久久 | 一级特黄aaa大片在线观看 | 中文字幕在线免费观看 | 麻豆传媒视频在线播放 | 成人av教育 | 亚洲婷婷综合色高清在线 | 中文字幕亚洲欧美日韩2019 | 91精彩在线视频 | 中文在线免费观看 | 国产超碰在线 | 福利网址在线观看 | 亚洲 欧美变态 另类 综合 | 日本3级在线观看 | 91人人揉日日捏人人看 | 天天射天天干天天操 | 麻豆av一区二区三区在线观看 | 婷婷伊人综合亚洲综合网 | 久久综合久久久久88 | 色综合中文字幕 | 色综合久久中文字幕综合网 | 天天操天天色天天射 | 黄色毛片大全 | 免费av一级电影 | 亚洲精品美女久久 | 大荫蒂欧美视频另类xxxx | 色大片免费看 | 久久精品免视看 | 亚洲久草在线视频 | 亚洲国产三级 | 狠狠色婷婷丁香六月 | 国产在线观看地址 | 色综合久久久网 | 激情av资源 | 一区二区三区在线视频111 | 久久网站最新地址 | 日本久久免费视频 | 欧美国产日韩一区二区三区 | 国产亚洲精品久久久久久 | 97视频免费在线观看 | 日韩欧美一区二区在线观看 | 久久情侣偷拍 | 亚洲最大av网 | 亚洲天天摸日日摸天天欢 | 日韩精品久久久久久久电影竹菊 | 久久视影| 亚洲激情五月 | 久久乐九色婷婷综合色狠狠182 | 中文字幕欧美日韩va免费视频 | 日韩精品一区二区免费 | 99热国产在线| 亚洲欧美精品一区二区 | 久久久www成人免费毛片麻豆 | 亚洲精品欧美视频 | 国产午夜精品久久 | 91麻豆福利 | 免费网站看av片 | 最近免费中文字幕mv在线视频3 | 91黄色在线观看 | 久久区二区 | 久久免费激情视频 | 亚洲精品久久久久久久不卡四虎 | 国产精久久| 亚洲成av人片在线观看 | 高清一区二区三区av | mm1313亚洲精品国产 | 一本一本久久a久久精品综合妖精 | 日本久久免费电影 | 婷婷伊人综合 | 国产免费久久 | 精品一区二区免费在线观看 | 玖玖玖精品 | 久久66热这里只有精品 | 亚洲黄色成人网 | 久久久九色精品国产一区二区三区 | 国产精品欧美久久久久久 | 在线免费观看欧美日韩 | 久草视频免费观 | 久草在线| 欧美日韩在线播放 | 久久精品国产免费看久久精品 | 亚洲伊人av| 在线看成人av | 亚洲国产欧美在线看片xxoo | 91av在线视频播放 | 三级av中文字幕 | 国产成本人视频在线观看 | 美女视频黄频大全免费 | 日韩黄色免费在线观看 | 99视频在线精品国自产拍免费观看 | 在线观看亚洲精品视频 | 日本久久久久久久久久 | 国产极品尤物在线 | 成年人免费观看在线视频 | 日韩av午夜在线观看 | 国产自偷自拍 | 日韩在线首页 | 久久久久蜜桃 | 国产在线精品播放 | 国产一级二级在线播放 | 欧美一级大片在线观看 | 亚洲精品视频免费在线观看 | 亚洲国产播放 | 九九久久影视 | 日本精品视频在线观看 | 狠狠色噜噜狠狠狠狠2021天天 | 91精品久久久久久 | 黄色免费网站 | 日韩欧美电影在线观看 | 在线视频 成人 | 国产不卡av在线播放 | 欧美久久久久久久久久久 | 亚洲首页 | 国产一区二区精品久久91 | 日韩最新理论电影 | a级国产乱理论片在线观看 特级毛片在线观看 | 久久一区二 | 日本三级不卡 | 欧美精品一区在线 | 高清不卡毛片 | 欧美精品网站 | 成人午夜网址 | 黄色1级毛片 | 日本天天色 | 久久伊人爱 | 99久久精品视频免费 | 天天操夜夜操国产精品 | 81国产精品久久久久久久久久 | 中文超碰字幕 | 国内三级在线观看 | 视频一区二区在线观看 | 欧洲精品亚洲精品 | 伊人婷婷在线 | 国产一级二级在线 | 一本一道久久a久久精品 | 久久国产网站 | 在线最新av | 亚洲精品乱码久久久久久 | 亚洲免费观看在线视频 | 五月花激情 | 久久综合久色欧美综合狠狠 | 在线观看一区二区视频 | av在线免费在线 | 久久免费99精品久久久久久 | 久久久人| 一级淫片在线观看 | 亚洲男人天堂a | 国产精品一区在线播放 | 日韩爱爱网站 | 中文字幕欧美激情 | 午夜视频欧美 | 中文字幕观看视频 | 欧美精品v国产精品 | 一区二区三区四区免费视频 | 5月丁香婷婷综合 | a精品视频| 亚洲成人资源在线观看 | 操一草| 人人干人人草 | 国产精品少妇 | 日韩免费看视频 | 最近更新中文字幕 | 国产精品一区二区白浆 | 麻豆一区在线观看 | 人人干在线观看 | 亚洲欧美国产精品久久久久 | 中文字幕av网站 | 色综合久久久网 | 久久影视一区 | 手机在线看永久av片免费 | 91久久人澡人人添人人爽欧美 | 国产小视频在线播放 | 久草在线 | 亚洲综合日韩在线 | 久久久久久久久影视 | 一区二区三区电影在线播 | 久久黄色小说 | 亚洲乱码中文字幕综合 | 国产精品成人aaaaa网站 | 天天干天天插 | 91精品在线免费观看 | 狠狠色伊人亚洲综合网站野外 | 日韩在线免费视频观看 | 久久精品视频在线看 | 最近中文字幕第一页 | 国产不卡视频在线播放 | 国产视频在 | 在线观看深夜福利 | 国产字幕在线播放 | a黄色一级 | av最新资源 | 国产在线1区 | 精品美女久久 | 美女福利视频在线 | 女人18毛片a级毛片一区二区 | 一二三四精品 | 国产成人一区二区啪在线观看 | 97爱| 亚洲精品午夜久久久久久久久久久 | 久久污视频 | 亚洲春色综合另类校园电影 | 韩国av一区二区三区 | 国产精品久久在线观看 | 国产91在线免费视频 | 久久免费视频精品 | 99成人精品 | 久久这里精品视频 | 欧美aaa级片| 国产91精品在线观看 | 欧美一区免费在线观看 | 中文字幕免费播放 | 91成人精品一区在线播放 | 久久精品首页 | 免费在线观看黄色网 | 中日韩欧美精彩视频 | 亚洲乱码久久久 | 91福利视频网站 | 99久久999久久久精玫瑰 | 91视频在线免费看 | 成人理论在线观看 | 色综合久久五月天 | 在线播放av网址 | 亚洲天堂精品 | 欧美二区三区91 | 99在线观看视频网站 | 久久在线免费观看视频 | 一区二区三区在线免费观看视频 | 看片网站黄| 国产成人精品a | 97免费在线观看视频 | 97夜夜澡人人双人人人喊 | 免费v片 | 免费看精品久久片 | 日韩免| 日日夜夜精品网站 | 色综合天天综合在线视频 | 国产亚洲精品v | 国产亚洲精品电影 | 日本mv大片欧洲mv大片 | 91精品视频观看 | 色偷偷网站视频 | 久久久久久久看片 | 亚洲综合丁香 | 91国内在线视频 | 久久婷亚洲五月一区天天躁 | 久久综合久久综合这里只有精品 | 国产精品久久久久久吹潮天美传媒 | 亚洲黄色免费在线 | 九九热精品视频在线观看 | 欧美日韩三区二区 | 日韩mv欧美mv国产精品 | 欧美在线观看视频 | 337p欧美| 久久黄色小说视频 | 国产一区二区三区免费在线 | 亚洲电影一级黄 | 国产美女主播精品一区二区三区 | 男女视频国产 | 国产精品视频免费观看 | 久久亚洲美女 | 欧美日韩一级久久久久久免费看 | 亚洲区视频在线观看 | 日韩在线观看你懂得 | 久久精品99国产精品亚洲最刺激 | 91丨九色丨蝌蚪丨对白 | 中文字幕精品一区 | 国产精品99页 | 樱空桃av| 久久深夜福利免费观看 | 日本三级香港三级人妇99 | 午夜av在线 | 精品久久久久久久久久岛国gif | 99久久精品国产观看 | 久草在线播放视频 | 久久毛片视频 | 日本中文字幕网站 | 亚洲干 | 国产精品久久久久久久久久久久久久 | 中文字幕在线精品 | 四虎成人在线 | 91网免费看 | 国产一级h| 精品在线一区二区三区 | 久久a v视频 | 96精品视频 | 亚洲天堂网在线播放 | 亚洲午夜久久久综合37日本 | 婷婷九九 | 久久午夜色播影院免费高清 | 日韩高清不卡在线 | 国产在线播放一区二区三区 | 中文字幕观看av | 免费观看av| 亚洲干| 最近最新mv字幕免费观看 | 99久在线精品99re8热视频 | 久久久一本精品99久久精品 | 国产在线观看午夜 | 婷婷激情在线 | 久久高清免费观看 | 玖草在线观看 | 中文字幕国产在线 | 波多野结衣在线中文字幕 | 久草视频手机在线 | 日韩精品一区二区电影 | 国产精品一区二区三区免费看 | 91九色在线视频 | 国产一区av在线 | 韩国中文三级 | 综合网久久 | 天天干夜夜夜操天 | 亚洲免费av在线播放 | 韩日电影在线 | 色综合综合 | 欧美999| 午夜影院在线观看18 | 日韩在线看片 | 欧美日韩中字 | 911精品美国片911久久久 | 亚洲aⅴ免费在线观看 | 日日干夜夜干 | 中文字幕欧美日韩va免费视频 | 黄污在线观看 | 国精产品满18岁在线 | 成年人电影免费在线观看 | 久久99精品久久久久久秒播蜜臀 | 激情五月在线 | 99视频这里只有 | 麻豆视频在线看 | 天天综合网 天天综合色 | 国产男男gay做爰 | www.99av | 美女视频久久黄 | av中文字幕免费在线观看 | 午夜视频在线观看一区二区 | 中文乱码视频在线观看 | 91看片在线免费观看 | 看片网站黄 | 在线观看激情av | 久久久精品国产一区二区电影四季 | 国产精品黄色在线观看 | 免费在线成人av | 在线观看91网站 | 国产成人在线免费观看 | 国产黄色免费在线观看 | 国产精品免费视频网站 | 懂色av一区二区三区蜜臀 | 亚洲经典在线 | 欧美精品久久久久久 | 超碰在线个人 | 欧洲精品码一区二区三区免费看 | 人人搞人人爽 | 久久综合中文字幕 | 久草在线免费看视频 | 在线观看国产福利片 | 亚洲综合视频在线观看 | 天天操综合 | 国产精品va最新国产精品视频 | 国产成人一区在线 | 欧美日韩国产高清视频 | 日韩av手机在线观看 | 91片网| 国产精品理论片在线播放 | 国产又粗又猛又爽 | 人人干人人草 | 天天色官网 | 久久国产午夜精品理论片最新版本 | 在线影视 一区 二区 三区 | 五月激情天 | 九九一级片| 精品国产一区二区三区免费 | 欧美影院久久 | 婷婷 综合 色| 欧美狠狠操 | 免费在线一区二区 | 在线视频麻豆 | 久一久久| av成人动漫 | 日韩| 亚洲国产一区二区精品专区 | 色干综合 | 视频一区二区在线 | 久久精视频 | 91自拍91| av在线网站观看 | 天天综合色天天综合 | 麻豆传媒电影在线观看 | 日韩精品久久久 | 婷婷色婷婷 | 91丨九色丨91啦蝌蚪老版 | 中文字幕专区高清在线观看 | 天天操天天干天天操天天干 | 精品国产一区二区三区在线观看 | 精品在线亚洲视频 | 99精品欧美一区二区 | 99色亚洲 | 国产精品久久久久久久久久东京 | 国产视频一区二区三区在线 | 91丨九色丨丝袜 | 午夜狠狠干 | 日韩三区在线观看 | 午夜精品一区二区三区在线播放 | 亚洲麻豆精品 | 在线日韩一区 | 久久免费精品视频 | 人人插人人插 | 午夜精品久久久久久久久久久久久久 | 视频国产 | 99精品视频在线看 | 婷婷综合成人 | 国产成人在线一区 | 国产小视频福利在线 | 精品人人人 | 五月婷婷视频 | 亚洲激情网站免费观看 | 天天色成人网 | 中文免费| 国产中文自拍 | 国内精品视频在线播放 | 69亚洲乱 | 国产精品扒开做爽爽的视频 | 久久久国产网站 | 久久精彩免费视频 | av最新资源| 麻豆va一区二区三区久久浪 | 国产成人精品999 | 成年人视频免费在线播放 | 九热精品| 精品国产视频一区 | 亚洲激情网站免费观看 | 久草在线观 | 在线黄色观看 | 国产探花视频在线播放 | 69视频在线播放 | 精品国产诱惑 | 欧美午夜精品久久久久久孕妇 | 精品夜夜嗨av一区二区三区 | 国产在线观看91 | 国产视频二区三区 | 九九精品在线观看 | 在线观看日本高清mv视频 | 久久国产精品一区二区 | 狠狠狠狠干 | 亚洲黄色免费在线 | 中文字幕一区在线观看视频 | 日日爱视频| 337p日本欧洲亚洲大胆裸体艺术 | 五月婷婷激情网 | 久久精品a | 成人高清在线 | 日本三级在线观看中文字 | 亚洲精品字幕在线 | 国产麻豆视频在线观看 | 亚洲精品字幕在线 | 十八岁以下禁止观看的1000个网站 | 91精品国产乱码久久 | 色.www| www黄免费| 久久久久国产一区二区三区 | 婷婷激情综合 | 国产成人av在线影院 | 黄色网址中文字幕 | 玖玖在线观看视频 | 久久精品99国产国产 | 91精彩视频在线观看 | 国产91精品看黄网站在线观看动漫 | 欧美一区二区三区在线 | 精品美女在线视频 | 久久精品一区二区国产 | 精品在线一区二区三区 | 日韩电影在线一区 | 99精品热视频只有精品10 | 天天干夜夜想 | 中文在线免费观看 | 九九色在线| 天天摸天天干天天操天天射 | 国产在线精品观看 | 最新av网址在线观看 | www五月| av电影在线观看完整版一区二区 | 一级成人在线 | 成人国产精品免费 | 中文字幕中文字幕在线一区 | 人人爽人人澡人人添人人人人 | 干 操 插 | 亚洲va欧美va | www.久久久久| 午夜久操 | 精品久久福利 | 亚洲精品高清在线 | 亚洲区另类春色综合小说 | 99re国产| 在线播放亚洲 | 在线中文字幕视频 | 国产精品人成电影在线观看 | 国产九九九精品视频 | 色婷婷国产精品一区在线观看 | 欧美日韩精品在线观看视频 | 九九综合九九综合 | 色噜噜色噜噜 | 日韩精品一区二区三区免费观看 | 日韩在线播放av | 亚洲黄色免费在线看 | 国产精品久久久久免费观看 | 在线观看中文字幕视频 | 手机在线永久免费观看av片 | 久久在线视频在线 | 99精品国产一区二区三区不卡 | 天天草综合| 国产精品久久久久久久久久久久午夜 | 精品国产欧美一区二区三区不卡 | 午夜色场 | 免费一级片在线观看 | 国产视频97| 午夜神马福利 | 精品国产欧美一区二区 | 日本黄色大片免费看 | 在线观看免费高清视频大全追剧 | www视频在线播放 | 五月天伊人网 | 人人插人人看 | 综合网欧美 | 午夜国产福利在线 | 亚洲欧美日韩一二三区 | 日韩理论在线观看 | 91视频在线免费 | 久久视频国产 | 97色婷婷成人综合在线观看 | 狠狠色伊人亚洲综合网站色 | 夜夜爽www | 丝袜足交在线 | 欧美黑人性爽 | 992tv在线观看 | 精品久久久久_ | 美国三级黄色大片 | 国产精品手机视频 | 婷婷色中文字幕 | 国产高清第一页 | 亚洲精品午夜视频 | 久久99久久精品 | 亚洲黄网站 | 在线观看日本韩国电影 | 国内外成人在线视频 | 97人人模人人爽人人喊网 | 国产精品久久久777 成人手机在线视频 | a在线观看视频 | 婷婷激情五月综合 | 正在播放国产一区二区 | 婷婷在线免费视频 | 三日本三级少妇三级99 | 亚洲无在线 | 国产精品午夜在线 | 免费看一级片 | 麻豆国产网站入口 | 成人国产精品久久久春色 | 99视频在线免费看 | 99久久婷婷| 五月天久久久久 | 中文字幕色在线视频 | 中文字幕在线色 | 91视频免费国产 | 日韩欧美一区二区三区视频 | 成人av高清在线观看 | 91久久精品一区 | 99精品国产一区二区三区麻豆 | 亚洲成a人片在线www | 在线欧美最极品的av | 激情丁香在线 | 婷婷激情久久 | 中文字幕在线看视频国产中文版 | 久久看片| 欧美日韩国产综合一区二区 | 男女视频久久久 | 四虎成人精品 | 亚洲精品在线网站 | 黄网站色成年免费观看 | 久久国产亚洲 | 最新免费av在线 | 91成人观看 | 成人一级黄色片 | 中文字幕在线观看免费 | 午夜av大片 | 婷婷激情在线观看 | 久久婷婷激情 | 激情丁香5月 | 岛国大片免费视频 | 99999精品 | 激情av在线播放 | 日日爱影视 | 亚洲夜夜综合 | 一区二区亚洲精品 | 99 精品 在线 | 最近中文字幕完整高清 | 日本在线中文在线 | 亚洲精品一区中文字幕乱码 | www五月| 久久国产精品久久精品 | 国产成人精品av久久 | 国产精品正在播放 | 青青射 | 欧美久久久久久久久久久 | 色中色资源站 | 韩国三级一区 | 999男人的天堂 | 免费福利视频导航 | 婷婷六月综合亚洲 | 中文字幕专区高清在线观看 | 在线观看中文 | 国产高清亚洲 | 欧美激情综合色 | 天天干天天拍天天操 | 日韩精品久久久久 | 成人黄色小视频 | 在线视频 亚洲 | 高清精品视频 | 久草在线视频资源 | 日韩特黄一级欧美毛片特黄 | 欧美极度另类性三渗透 | 成人aⅴ视频 | 超碰97人人干 | 丁香午夜 | 色噜噜日韩精品一区二区三区视频 | 日韩av电影一区 | 亚洲成av人影院 | 91成人在线视频 | 国产99久久精品 | 韩国一区二区av | 免费在线色 | 在线免费观看的av网站 | 狠狠色噜噜狠狠 | 国产高清精 | 99视频精品全部免费 在线 | 亚洲第一香蕉视频 | 欧美一区视频 | 国产尤物视频在线 | 日本在线观看视频一区 | 黄色一级片视频 | 日韩av伦理片 | 国产免费久久久久 | 天天操天天射天天爽 | av福利免费| 亚洲免费高清视频 | 91精品国产综合久久久久久久 | 国产精品一区二区av | 久久精品欧美一区 | 欧美xxxxx在线视频 | 久久久影院官网 | 国产精品久久精品国产 | 国产伦精品一区二区三区四区视频 | 国产很黄很色的视频 | 天天干夜夜擦 | 亚洲精品一区二区精华 | 国产精品va在线播放 | 国产青草视频在线观看 | 国产麻豆果冻传媒在线观看 | 国产麻豆电影 | 日韩欧美69 | 四虎精品成人免费网站 | 久草在线高清 | 四虎影视成人永久免费观看亚洲欧美 | 美女黄色网在线播放 | av片中文 | 天天躁日日躁狠狠躁av麻豆 | 精品久久亚洲 | 久久99最新地址 | 精品一区二区久久久久久久网站 | 免费看一级特黄a大片 | 免费观看一级视频 | 色婷婷免费视频 | 丁香综合网 | 人人爽人人爽人人片av免 | 国产精品尤物视频 | 免费av黄色| 国产在线视频在线观看 | 国产精品99久久免费观看 | 免费看国产精品 | 午夜视频欧美 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 午夜视频在线观看一区二区三区 | 麻豆高清免费国产一区 | 免费看成人 | 一区二区三区中文字幕在线观看 | 91精品国自产在线偷拍蜜桃 | 99精品免费久久久久久久久日本 | av视屏在线| 婷婷色视频| av在线电影网站 | 久久综合色8888 | 日韩二区三区 | 天天草网站 | 日韩精品中字 | 亚洲天堂网在线视频观看 | 91九色蝌蚪视频在线 | 丁香婷婷综合五月 | 一个色综合网站 | 久久手机免费视频 | 草久久久久 | 精品不卡视频 | 久久精品久久久久电影 | 麻豆一区在线观看 | av成人资源 | 一区二区三区在线免费观看视频 | 亚洲人成人在线 | 久久免费高清 | 天天操天天干天天爽 | 麻豆视频免费网站 | 欧美日韩免费在线视频 | av观看网站 | 亚洲精品在线观看网站 | 美女久久久久 | 在线观看亚洲免费视频 | 狠狠色噜噜狠狠狠狠2022 | 欧美日韩一二三四区 | 精品国产1区2区3区 国产欧美精品在线观看 | 久久视频这里只有精品 | 欧美二区在线播放 | 91麻豆精品一区二区三区 | 最新国产在线视频 | 中文字幕韩在线第一页 | 日本激情中文字幕 | 天天躁天天操 | 99久久精品国产一区 | 不卡日韩av| 亚洲精品视频在线看 | 91久久一区二区 | 91免费网址 | 国产又粗又猛又色又黄视频 | 五月天久久综合 | 欧美精品小视频 | 色综合婷婷久久 | 免费特级黄色片 | 91在线免费播放视频 | 亚洲全部视频 | 99久久久久免费精品国产 | 综合网婷婷| 最近日本字幕mv免费观看在线 | 免费视频成人 |