Percona Xtradb Cluster

来源:http://www.cnblogs.com/wangxiaoqiangs/archive/2016/08/04/5736134.html
-Advertisement-
Play Games

簡介: Percona Server 由領先的 MySQL 咨詢公司 Percona 發佈。Percona Server 是一款獨立的資料庫產品,其完全與 MySQL 相容,可以在不更改代碼的情況下將存儲引擎更換為 XtraDB 。 Percona 資料庫中使用的存儲引擎為 XtraDB,它是 My ...



簡介:

Percona Server 由領先的 MySQL 咨詢公司 Percona 發佈。Percona Server 是一款獨立的資料庫產品,其完全與 MySQL 相容,可以在不更改代碼的情況下將存儲引擎更換為 XtraDB 。

Percona 資料庫中使用的存儲引擎為 XtraDB,它是 MySQL 資料庫中 InnoDB 存儲引擎的增強版,被設計用來更好的更新電腦硬體系統的新能,同時還包含一些在高性能環境下的新特性。

XtraDB 在 InnoDB 的堅實基礎上構建,使用 XtraDB 具有更多的特性,更好調用,更多的參數指標和更多的擴展。

Percona XtraDB Cluster ( PXC ) 集群是開源、免費的 MySQL 高可用性軟體,可以多主同時對外提供資料庫讀、寫服務,分擔資料庫壓力且不浪費資源。

特性:

1、同步複製,事務在所有節點提交或不提交。
2、多主複製,可以在任意節點上進行讀、寫操作。
3、在從伺服器並行應用事件,真正意義上的並行複製。
4、節點自動配置,數據一致性,不再是非同步複製。
5、當前版本 5.6 僅支持 InnoDB 存儲引擎 ( MyISAM 存儲引擎為實驗階段 )。
6、集群推薦至少三個節點;每個節點都是普通的 Percona 伺服器;可以將現有的資料庫伺服器組成集群,也可以將集群拆分成單獨的伺服器;每個節點都包含完整的數據副本。

更多特性及限制請參考官方地址:https://www.percona.com/doc/percona-xtradb-cluster/LATEST/index.html 介紹一欄。

# 伺服器:192.168.12.128、129、130

一、採用 YUM 安裝 PXC

shell > yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm  # 安裝 YUM 源

shell > yum -y install Percona-XtraDB-Cluster-56 # 安裝 PXC

二、配置 PXC

shell > vim /etc/my.cnf
[mysqld]

user = mysql
socket = /var/lib/mysql/mysql.sock
datadir = /var/lib/mysql

log-bin = mysql-bin
binlog_format = ROW

default_storage_engine = InnoDB
innodb_autoinc_lock_mode = 2

wsrep_provider = /usr/lib64/libgalera_smm.so
wsrep_cluster_address = gcomm://192.168.12.128,192.168.12.129,192.168.12.130

wsrep_cluster_name = PXC
wsrep_node_address = 192.168.12.128
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = "sstuser:s3cret"

[mysqld_safe]
log-error = /var/log/mysqld_error.log
pid-file = /var/run/mysqld/mysqld.pid

# 參數說明:

1、innodb_autoinc_lock_mode

自增欄位鎖策略,有三個值:0 全部使用表鎖;1 可預判行數時使用新方式( 預留行數的值,分配的 ID 不連續 ),不可預判時使用表鎖;2 不使用表鎖 ( 不適用於 replication )

2、wsrep_slave_threads

複製事務的線程數,預設為 1。可以根據實際吞吐量增加該線程數,實現多線程並行複製 ( show variables like 'wsrep_slave_threads'; )。

3、wsrep_causal_reads

當被查詢結果還沒有同步到 slave 中時,通過該參數可以使查詢動作等待結果同步,最終返回查到的結果 ( 這種短暫延遲可以通過增加併發線程數量、提升伺服器硬體性能、優化網路環境來解決 )。

4、wsrep_sst_method

當集群中有新節點加入時,傳輸快照( 數據 )使用的方法:Xtrabackup 、mysqldump 、rsync 。

推薦使用 Xtrabackup-v2 ( Xtrabackup 的第二版 ),mysqldump 最慢、並且跟 rsync 一樣需要全局鎖,影響效率、導致用戶無法寫入數據。

5、wsrep_sst_auth

使用 Xtrabackup 、mysqldump 傳輸快照時需要的認證用戶( 需要資料庫中建立用戶,my.cnf 也要指明 ),rsync 不需要設置。

三、啟動 PXC

shell > setenforce 0 # 關閉 SELinux ,建議編輯 /etc/selinux/config 永久關閉

shell > iptables -I INPUT -p tcp --dport 4444 -j ACCEPT
shell > iptables -I INPUT -p tcp --dport 4567 -j ACCEPT
shell > iptables -I INPUT -p tcp --dport 4568 -j ACCEPT

# 需要開放的埠

1、TCP 3306

資料庫對外服務埠,一般只對公司內部或指定 IP 開放。

2、TCP 4444

SST 數據全量傳輸埠,可以只對節點伺服器開放。新節點加入時需要同步數據使用 ( 預設 )。

2016-08-04 01:52:32 13167 [Note] WSREP: SST received: 4f33cb6b-598a-11e6-8738-8b3354956db1:7 # 通過 SST 全量傳輸 ( error.log )

3、TCP 4567

節點與節點通信埠。例如:不開放該埠,其餘節點伺服器無法接入到集群 ( 無法啟動 )。

4、TCP 4568

IST 數據增量傳輸埠。節點下線再上線時傳輸數據使用 ( 當 gcache.size 里完全存放著節點伺服器下線到上線之間的數據時,才會使用增量傳輸 )。

gcache.size 可以在 my.cnf 中通過參數 wsrep_provider_options = "gcache.size=512M" 設置,預設 128M。可以根據生成的 binlog 大小設置。建議大於生成的 binlog 大小。

2016-08-04 02:01:53 13961 [Note] WSREP: Receiving IST: 3 writesets, seqnos 7-10
2016-08-04 02:01:53 13961 [Note] WSREP: IST received: 4f33cb6b-598a-11e6-8738-8b3354956db1:10 # 通過 IST 增量傳輸 ( error.log )
shell > service mysql bootstrap-pxc # 啟動 PXC 集群,申明這是第一個節點不需要數據同步 ( 僅第一次 )

shell > mysql

mysql > update mysql.user set password=password('123456') where user='root'; # 設置 root 密碼 ( 安全 )

mysql > flush privileges;

mysql > grant reload, lock tables, replication client on *.* to sstuser@localhost identified by 's3cret'; # 建立同步用戶

四、測試 PXC

1、其餘兩台伺服器按照上面的步驟分別配置。

2、其中 my.cnf 中 wsrep_node_address 參數的值改為自身 IP 即可。

3、最後的授權用戶 sstuser 無需創建,會自動同步第一個節點的數據。

4、可以在任意節點創建資料庫,查看是否同步到其餘節點。

5、關閉任意節點,之後其餘節點寫入數據,啟動關閉的節點查看是否數據完整。

6、將節點全部關閉,重新啟動,測試集群是否正常。( 這種情況為一個新的集群,要保證第一個啟動的是數據最新的節點。)

# 一個小報錯:

測試中將所有節點關閉後,又重新啟動。數據最新的節點啟動成功 ( bootstrap-pxc ),並且狀態正常。

但是啟動其餘節點時,報錯如下 ( error.log ):

2016-08-04 01:05:09 12517 [ERROR] WSREP: gcs/src/gcs_group.cpp:group_post_state_exchange():321: Reversing history: 10 -> 7, 
this member has applied 3 more events than the primary component.Data loss is possible. Aborting.

且第一個節點的狀態也變成了 wsrep_cluster_status 為 Non-Primary ,wsrep_local_state_comment 為 Initialized ,wsrep_ready 為 OFF 。

最終查資料發現需要刪除 /var/lib/mysql/grastate.dat 文件 ( 啟動不了的節點上 ),然後啟動即可。( 原因未知 )

# 實際環境中,至少保證一個節點線上。例如升級硬體時輪流升級,我想大多也會這麼做吧。

# 另外這也是官方為何建議至少三個節點做 PXC ,因為當只有兩個節點時,失敗的節點會導致剩下的節點進入 Non-Primary 狀態,導致集群失敗。

五、監控指標

shell > mysql -uroot -p123456

mysql> show global status like 'wsrep_%';
+------------------------------+--------------------------------------+
| Variable_name                | Value                                |
+------------------------------+--------------------------------------+
| wsrep_local_state_uuid       | 505b98ce-54e4-11e6-99d7-d64eb985b5d7 |
| wsrep_protocol_version       | 7                                    |
| wsrep_last_committed         | 3                                    |
| wsrep_replicated             | 0                                    |
| wsrep_replicated_bytes       | 0                                    |
| wsrep_repl_keys              | 0                                    |
| wsrep_repl_keys_bytes        | 0                                    |
| wsrep_repl_data_bytes        | 0                                    |
| wsrep_repl_other_bytes       | 0                                    |
| wsrep_received               | 2                                    |
| wsrep_received_bytes         | 159                                  |
| wsrep_local_commits          | 0                                    |
| wsrep_local_cert_failures    | 0                                    |
| wsrep_local_replays          | 0                                    |
| wsrep_local_send_queue       | 0                                    |
| wsrep_local_send_queue_max   | 1                                    |
| wsrep_local_send_queue_min   | 0                                    |
| wsrep_local_send_queue_avg   | 0.000000                             |
| wsrep_local_recv_queue       | 0                                    |
| wsrep_local_recv_queue_max   | 2                                    |
| wsrep_local_recv_queue_min   | 0                                    |
| wsrep_local_recv_queue_avg   | 0.500000                             |
| wsrep_local_cached_downto    | 0                                    |
| wsrep_flow_control_paused_ns | 0                                    |
| wsrep_flow_control_paused    | 0.000000                             |
| wsrep_flow_control_sent      | 0                                    |
| wsrep_flow_control_recv      | 0                                    |
| wsrep_cert_deps_distance     | 0.000000                             |
| wsrep_apply_oooe             | 0.000000                             |
| wsrep_apply_oool             | 0.000000                             |
| wsrep_apply_window           | 0.000000                             |
| wsrep_commit_oooe            | 0.000000                             |
| wsrep_commit_oool            | 0.000000                             |
| wsrep_commit_window          | 0.000000                             |
| wsrep_local_state            | 4                                    |
| wsrep_local_state_comment    | Synced                               |
| wsrep_cert_index_size        | 0                                    |
| wsrep_cert_bucket_count      | 22                                   |
| wsrep_gcache_pool_size       | 1320                                 |
| wsrep_causal_reads           | 0                                    |
| wsrep_cert_interval          | 0.000000                             |
| wsrep_incoming_addresses     | 192.168.12.128:3306                  |
| wsrep_desync_count           | 0                                    |
| wsrep_evs_delayed            |                                      |
| wsrep_evs_evict_list         |                                      |
| wsrep_evs_repl_latency       | 0/0/0/0/0                            |
| wsrep_evs_state              | OPERATIONAL                          |
| wsrep_gcomm_uuid             | 76fe2163-58dd-11e6-9409-e3323d524fdf |
| wsrep_cluster_conf_id        | 1                                    |
| wsrep_cluster_size           | 1                                    |
| wsrep_cluster_state_uuid     | 505b98ce-54e4-11e6-99d7-d64eb985b5d7 |
| wsrep_cluster_status         | Primary                              |
| wsrep_connected              | ON                                   |
| wsrep_local_bf_aborts        | 0                                    |
| wsrep_local_index            | 0                                    |
| wsrep_provider_name          | Galera                               |
| wsrep_provider_vendor        | Codership Oy <info@codership.com>    |
| wsrep_provider_version       | 3.16(r5c765eb)                       |
| wsrep_ready                  | ON                                   |
+------------------------------+--------------------------------------+
59 rows in set (0.00 sec)

# 集群狀態監控

1、wsrep_cluster_status

監控該值是否為 Primary ,可能的值有 Primary 、Non-Primary 、Disconnected 。非 Primary 為不正常。

2、wsrep_connected 、wsrep_ready

監控參數值是否為 ON ,非 ON 為不正常。

3、wsrep_local_cert_failures 、wsrep_local_bf_aborts

複製衝突導致失敗的次數,為 0 最理想。

4、wsrep_flow_control_sent 、wsrep_flow_control_recv

流量控制信息,發送、接收。

5、wsrep_local_recv_queue

當前接收的隊列長度。

# 需要收集的數據

1、wsrep_local_recv_queue 、wsrep_local_send_queue # 隊列大小

2、wsrep_flow_control_sent 、wsrep_flow_control_recv # 進出流量

3、wsrep_replicated 、wsrep_received # 進出事務數量

4、wsrep_replicated_bytes 、wsrep_received_bytes # 進出事務位元組

5、wsrep_local_cert_failures 、wsrep_local_bf_aborts # 複製衝突

# 有了這些指標,可以通過 Zabbix 監控腳本來收集數據、報警、繪圖等。

五、附加

1、wsrep_cluster_state_uuid

集群 UUID ,所有節點該值必須一致,否則某節點沒有加入到集群中。

2、wsrep_cluster_conf_id

集群變化次數,所有節點都應一致,否則某節點已經被隔離了。

3、wsrep_cluster_size

該值顯示當前集群中有多少節點。

4、wsrep_cluster_status

正常情況所有節點值為 Primary ,表示集群正常。如為 Non-Primary 或 Disconnected 則當前節點不能被操作。

5、wsrep_ready

該值為 ON 表示節點正常,可以接受 SQL Query ;否則幾乎所有的 Query 都會報錯 'ERROR 1047 (08S01) Unknown Command'。

6、wsrep_connected

該值為 ON 表示正常,證明該節點已經連接到集群組。

7、wsrep_local_state_comment

通常情況下返回 Synced 表示節點處於工作狀態,如返回 Initialized 則表明節點已經不在正常工作狀態。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ForXmlPath簡單應用 一:ForXmlPath介紹 forXmlPath 是SQL中的forXml語法的一部分,本文主要講Path模式 SQL中FOR XML子句的四種模式用法 1、AUTO模式:返回數據表為起表名的元素,每一列的值返回為屬性; SELECT * FROM tb_test f ...
  • 介紹 主要為了測試percona的線程池的性能,這裡就簡單介紹一下percona5.7的安裝,在percona官方手冊上面介紹的很簡單按照上面的方法安裝不會成功。 db:percona5.7.13 os:centos6.7 安裝準備 1.創建用戶 groupadd mysql useradd -r ...
  • 1、部署基本信息說明: 1.1、主機信息 操作系統:選擇CentOS6.7 x86-64版本 MEM:64GB,CPU: E5-2630 v3 @ 2.40GHz, DISK:2TB*4(數據節點存儲,操作系統除外) 主機信息: 主機名 IP dcnn1 10.20.20.1 dcnn2 10.20 ...
  • 當你第一眼看到explain和hint的時候,第一個反應就是mysql中所謂的這兩個關鍵詞,確實可以看出,這個就是在mysql中借鑒過來的,既然是借鑒 過來的,我想大家都知道這兩個關鍵字的用處,話不多說,速速觀看~~~ 一:explain演示 1. 構建數據 為了方便演示,我需要create ten ...
  • db.getCollection('WorkflowInstance').find({'CurrentApproverList':{$ne:null}}) ...
  • 原因:由於clob類型欄位不能使用group by函數,而union中需要使用group by過濾掉重覆紀錄; 解決方法:union可以改為union all。 ...
  • 無法解決 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之間 2011-03-11 15:26:57 分類: 資料庫開發技術 2011年03月10日 CCE3.03的伺服器採用英文的2003R2 資料庫排序規則為拉... ...
  • 一.數據控制語句 (DML) 部分 1.INSERT (往數據表裡插入記錄的語句) INSERT INTO 表名(欄位名1, 欄位名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(欄位名1, 欄位名2, ……) SELECT (欄位名1, 欄位名2, ……) ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...