背景
背景
- 最近在進行
的MySQL
PXC
叢集搭建使用和研究
前期已完成了一篇記錄文章 : 【CentOS7 下 MySQL 之 PXC 叢集部署【Docker+多機多節點】】
但是,畢竟不是所有人都熟悉
docker
而作為開發人員,還是習慣于原生狀态的安裝流程
是以,在此整理官方指導的
PXC 叢集
配置步驟
歡迎指摘 …
—— 業界主流的
【注】:Percona XtraDB Cluster(簡稱 PXC 叢集)
叢集方案
MySQL
- 環境
CentOS 版本: CentOS Linux release 7.9.2009 (Core)
PXC 版本: Percona XtraDB Cluster 5.7
官網指導 —— 【在 CentOS上 配置 Percona XtraDB 叢集】
前期準備
前期準備
【注】:
叢集部署,會自行安裝
PXC
服務,建議操作前解除安裝原來的
MySQL
MySQL
1). 三台 Vmware
虛拟機
Vmware
-
叢集節點越多,資料同步的速度就越慢(建議不要太多!)PXC
在此,我以三台建立運作的 CentOS7
作為主控端,進行配置操作示範
虛拟機 ip | 端口 | 角色 |
---|---|---|
192.168.80.221 | 3306 | 節點 |
192.168.80.222 | 3306 | 節點 |
192.168.80.223 | 3306 | 節點 |
-
注意各節點硬體配置盡量相同
因為短闆效應,
叢集資料同步的速度取決配置最低的節點PXC
叢集隻支援
PXC
引擎
InnoDB
2). 解除安裝 mariadb-libs
mariadb-libs
因為預設捆綁安裝了
CentOS7
,為了不影響
mariadb-libs
的使用,需要先解除安裝!
PXC
yum -y remove mari*
3). 開啟四個 PXC
環境所涉及的端口
PXC
3306: # mysql 執行個體端口
4567: # PXC cluster 互相通訊的端口
4444: # 用于 SST(State Snapshot Transfer): 全量傳輸
4568: # 用于 IST(Incremental state Transfer): 增量傳輸傳送
- 以鄙人使用寶塔面闆操作為例,注意以上端口的開啟:
4). 部署前建議關閉 SELINUX
、将 MySQL
資料庫服務停止
SELINUX
MySQL
安全增強型 Linux(Security-Enhanced Linux)SELinux
主要由美國國家安全局開發
- 把
屬性值設定成"SELINUX"
,然後disabled
重新開機reboot
vi /etc/selinux/config
5). 配置 ntp 服務,確定時間同步
- 這一步,多數經驗沒有提及,我是操作 docker 時發現需要配置的哦!
[[email protected] ~]# yum -y install ntp ntpdate
[[email protected] ~]# ntpdate 0.asia.pool.ntp.org
[[email protected] ~]# hwclock --systohc
[[email protected] ~]# date
2021年 01月 08日 星期五 09:54:23 CST
搭建 PXC 叢集
搭建 PXC 叢集
官方指導 —— 【在 Red Hat Enterprise Linux 和 CentOS 上安裝 Percona XtraDB 叢集】
1). 下載下傳解壓縮工具 qpress
、 PXC
安裝包
qpress
PXC
- 為友善後期對
叢集操作的使用,需要下載下傳PXC
>>> 下載下傳位址"qpress"
- 然後就是
PXC
安裝包的下載下傳了
一般指導都是支援線上安裝的,但我發現,虛拟機裡無法安裝
本身下載下傳速度慢,而且最新版本資源比較大
此處,我以下載下傳
為例【Percona XtraDB 群集 5.7】
- 此時我進行安裝發現,依賴關系提示:
是以,繼續下載下傳了 【Percona-XtraBackup-2.4】"需要:percona-xtrabackup-24 >= 2.4.21"
【提示】
1
本人發現:不論在官網使用浏覽器下載下傳,還是使用 wget 指令下載下傳都提示檔案缺失,解壓異常,最後選擇迅雷下載下傳
2 有需要這些資源的,在此提供【百度雲連結,提取碼:fd0g 】
3 如果是寶塔系統,已安裝了
會有沖突,是以要卸掉原來的
mysql
資料庫
mysql
- 将解壓得到的所有
檔案,上傳到".rpm"
系統,此處我選擇的是Linux
"/www/server/download"
2). 執行安裝 PXC
指令
PXC
在三個虛拟機上分别安裝 PXC
程式
- 在上一步存放
檔案的目錄中,執行指令:".rpm"
yum localinstall *.rpm
注意,如果提示還有其他需要使用的依賴包,進行下載下傳後再操作一遍指令 !
3). 修改 "mysqld.cnf"
檔案
"mysqld.cnf"
-
上一步指令執行完畢後,如果成功
可以注意到
檔案中出現如下資訊"etc/my.cnf"
其實,我們操作的配置檔案,隻是 "/etc/percona-xtradb-cluster.conf.d/"
目錄中的三個!
mysql 的常用配置資訊都在 "mysqld.cnf" 檔案, pxc 叢集的配置資訊都在 "wsrep.cnf" 檔案
- 在
"mysqld.cnf"
中配置資訊對比參考如下(注意,我添加了三個參數)
并且,對參數
,指派唯一的ID (三台伺服器都要配置)"server-id"
# Template my.cnf for PXC
# Edit to your requirements.
[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
#PXC叢集中MySQL執行個體的唯一ID,不能重複,必須是數字
server-id=1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log-bin
log_slave_updates
expire_logs_days=7
#資料庫字元集
character_set_server = utf8
#運作遠端通路的IP位址
bind-address = 0.0.0.0
#跳過DNS解析
skip-name-resolve
#skip-grant-tables
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
4). 建立傳送使用者
- 首先,檢視預設的
登入密碼mysql
以下面的列印資訊為例,預設賬号cat /var/log/mysqld.log | grep "A temporary password"
,密碼為:root
BJuk-xlad8XS
[[email protected] download]# cat /var/log/mysqld.log | grep "A temporary password"
2021-01-25T08:33:57.335210Z 1 [Note] A temporary password is generated for [email protected]: BJuk-xlad8XS
初始化,建議參考 【附錄 - 如何重置 root 密碼】
,感覺出錯少,更加友善
- 賬号
及密碼[adminPXC]
[201107070]
自定義即可
用于
PXC
叢集中的資料傳輸
依次執行下面三條
語句:SQL
CREATE USER 'adminPXC'@'localhost' IDENTIFIED BY '201107070';
GRANT all privileges ON *.* TO 'adminPXC'@'localhost';
FLUSH PRIVILEGES;
使用者名密碼,要與配置檔案
【提示一】
中的
"wsrep.cnf"
對應
wsrep_sst_auth="adminPXC:201107070"
三台伺服器都要配置,
【提示二】
的重新開機指令:
mysql
systemctl restart mysql.service
在 節點啟動前,最好 關閉
【提示三】
服務:
mysql
systemctl stop mysql.service
5). 第一個節點【PXC1】
本次示範,我選擇 [192.168.80.221]
,作為第一個節點主機
▶ 修改 "wsrep.cnf"
的 PXC
配置資訊
"wsrep.cnf"
PXC
-
基本重要的配置參數,都做了解釋
下面展示一下第一個節點的配置資訊:
[mysqld]
# Path to Galera library
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# Cluster connection URL contains IPs of nodes
#If no IP is found, this implies that a new cluster needs to be created,
#in order to do that you need to bootstrap this node
#PXC叢集節點的IP
wsrep_cluster_address=gcomm://192.168.80.221,192.168.80.222,192.168.80.223
# In order for Galera to work correctly binlog format should be ROW
#基于ROW複制(安全可靠)
binlog_format=ROW
# MyISAM storage engine has only experimental support 預設引擎
default_storage_engine=InnoDB
# Slave thread to use
wsrep_slave_threads= 8
wsrep_log_conflicts
# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
#主鍵自增長不鎖表
innodb_autoinc_lock_mode=2
# Node IP address
#目前節點的IP位址
#wsrep_node_address=192.168.80.221
# Cluster name PXC 叢集的名稱
wsrep_cluster_name=pxc-moTzxx
#If wsrep_node_name is not specified, then system hostname will be used
#目前節點的名稱
wsrep_node_name=pxc1
#pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER
#同步嚴厲模式
pxc_strict_mode=ENFORCING
# SST method 同步方法
wsrep_sst_method=xtrabackup-v2
#Authentication for SST method 同步使用的賬戶
wsrep_sst_auth="adminPXC:201107070"
每個主機的和
server-id
、
wsrep_node_addres
保持不同即可
wsrep_node_name
▶ 第一個節點啟動
- 第一個節點啟動的指令為:
systemctl start [email protected]
- 檢視狀态,可以通過指令
systemctl status [email protected]
此處,附上對第一個節點的操作指令
systemctl start [email protected]ap.service
systemctl stop [email protected]
systemctl restart [email protected]
systemctl status [email protected]
- 為了操作友善,建議可以使用
"Navicat"
等工具進行連接配接
執行
語句:SQL
顯示效果如下:show status like 'wsrep_cluster%';
【提示】:
一定要等第一個節點啟動,可以連接配接後,再考慮第二個、第三個節點的啟動!
6). 第二個節點【PXC2】
本次示範,我選擇 [192.168.80.222]
,作為第二個節點主機
-
非主節點的管理指令(非第一個啟動的 PXC 節點)注意:
service mysql start
service mysql stop
service mysql restart
service mysql status
- 為了對比參考,此處展示第二個節點的配置資訊(其他的就沒必要了)
[mysqld]
# Path to Galera library
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
# Cluster connection URL contains IPs of nodes
#If no IP is found, this implies that a new cluster needs to be created,
#in order to do that you need to bootstrap this node
#PXC叢集節點的IP
wsrep_cluster_address=gcomm://192.168.80.221,192.168.80.222,192.168.80.223
# In order for Galera to work correctly binlog format should be ROW
#基于ROW複制(安全可靠)
binlog_format=ROW
# MyISAM storage engine has only experimental support 預設引擎
default_storage_engine=InnoDB
# Slave thread to use
wsrep_slave_threads= 8
wsrep_log_conflicts
# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
#主鍵自增長不鎖表
innodb_autoinc_lock_mode=2
# Node IP address
#目前節點的IP位址
#wsrep_node_address=192.168.80.222
# Cluster name PXC 叢集的名稱
wsrep_cluster_name=pxc-moTzxx
#If wsrep_node_name is not specified, then system hostname will be used
#目前節點的名稱
wsrep_node_name=pxc2
#pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER
#同步嚴厲模式
pxc_strict_mode=ENFORCING
# SST method 同步方法
wsrep_sst_method=xtrabackup-v2
#Authentication for SST method 同步使用的賬戶
wsrep_sst_auth="adminPXC:201107070"
- 啟動後,列印資訊如下:
第三個節點 【PXC3】
基本操作一樣,隻是配置檔案的參數稍有不同
7). 測試 PXC 叢集部署效果
在此,我将三個成功啟動的服務,通過
mysql
連接配接
"Navicat"
- 在第一個節點上,建立一個資料庫
進而, 建立了一個資料表"test_pxc"
然後,随意,在資料表中添加了幾條記錄"pxc_users"
-
打開第二個節點、第三個節點
重新整理,會發現也會有同樣的資料庫,資料表
-
繼而修改任意一個節點的資料,
會發現,其他節點也會同步更新
PXC 節點重新開機問題
PXC 節點重新開機問題
不同于
【官方 - 重新啟動叢集節點】
叢集的重新開機操作,
Replication
叢集需要分好幾種情況
PXC
▶ 強行關機之後,PXC 叢集無法啟動
這種情況常見于測試練習時,虛拟機關機的情況
-
以我的操作經曆為例:
昨天直接關閉所有的虛拟機,
今天想着繼續
PXC
叢集的測試
發現,都無法啟動了
提示資訊如下:
-
部分網上經驗,是:
檢視一下各個虛拟機中的
"/var/lib/mysql/grastate.dat"
檔案
然後,将
"safe_to_bootstrap: 1"
的主機作為第一個節點進行啟動
但是,我發現所有的主機參數都為
"0"
-
此時我的解決方案為:
選中其中一個主機,将
參數手動改為"safe_to_bootstrap"
然後将其作為第一個節點啟動"1"
vim /var/lib/mysql/grastate.dat
systemctl start [email protected]
- 其他節點,依次啟動即可,指令:
service mysql start
測試同步狀況,我這裡是完全沒有問題的 …
▶ 最後關閉的 PXC 節點是安全退出時
這種情況,一般就是停服檢測、資料維護才會全部退出 …
- 此時,可以檢視
檔案(預設會在"grastate.dat"
"/var/lib/mysql/"
目錄中)
其中
safe_to_bootstrap: 1
,
再次啟動叢集時,則先啟動該節點
cat /var/lib/mysql/grastate.dat
systemctl start [email protected]
▶ 節點正常退出後,重新加入進群
這種情況,多發生在資料庫冷備份時,選取其中一台主機,正常退出 service mysql stop
-
此處,不用厘清目前主機是第幾個節點
畢竟在兩個節點以後,就沒有主從之分了
等其他操作完成後
直接以非第一個節點操作啟動即可
service mysql start
這種情況的前提 —— 存在正常工作狀态中的
注意:
節點
PXC
PXC 叢集實際應用探讨
PXC 叢集實際應用探讨
☞ ThinkPHP5
上的使用
ThinkPHP5
以鄙人常用的 ThinkPHP5
架構使用為例
- 那麼,在
中的配置參考如下:"config/database.php"
//------------- PXC 叢集配置參考---------------------------------- 'hostname' => ['192.168.80.221','192.168.80.222','192.168.80.223'], 'database' => 'test_pxc', 'username' => 'root', 'password' => 'mT123456', 'hostport' => '3306', 'deploy' => 1, //-------------------------------------------------------------
☞ MyCat
部署讀寫分離
MyCat
【提示】:
-
在成熟的項目配置中,應該是考慮其他中間件來進行資料庫分布式部署操作的
比如,阿裡開源的
MyCat
感興趣的可以閱讀下整理的文章
——
【CentOS7 下使用 MyCat 實作 MySQL 讀寫分離/主從切換】
- 我在
主機上安裝了【192.168.80.221】
mycat
服務
在此,附一張配置截圖以作參考:
-
如此一來
上面項目配置中,就隻會顯示
連接配接資訊(減少負載均衡配置中的代碼備援)mycat
//------------- MyCat 主從分離配置參考---------------------------------- 'hostname' => '192.168.80.221', 'database' => 'mycat_tp5_pro', 'username' => 'root_mycat', 'password' => 'mycat_007', 'prefix' => 'tp5_',//字首而已,不要太在意 'hostport' => '8066', //-------------------------------------------------------------
☞ 對比 “Replication”
叢集部署
“Replication”
通常來講,對于資料庫叢集部署,都會拿來與
"PXC"
進行對比!
"Replication"
【
Replication
部署方案】:
【
PXC
部署方案】:
注意,兩種方案不是對立的,一個大型項目中,完全可以根據自己的業務 : 結合使用、取長補短
!
可對比參考文章 —— 【CentOS7 下 MySQL5.7.32 主從複制+同步配置操作 (一主多從+多主多從)】
附錄
附錄
☞ 關閉 mysql
的開啟自啟動
mysql
- 很多系統,預設了
mysql
會開啟自啟動,感覺很友善
但是,對于部署了
叢集的資料庫,會因為節點啟動方式的不同有影響PXC
建議關閉開機啟動
☞ 提示:寶塔 mysql
版本與依賴包安裝沖突
mysql
- 提示資訊如下:
file /usr/include/mysql/mysql/plugin.h from install of Percona-XtraDB-Cluster-devel-57-5.7.32-31.47.1.el7.x86_64 conflicts with file from package bt-mysql57-5.7.32-1.el7.x86_64
- 此時,我參考網友的建議:直接解除安裝掉原來的
mysql
yum -y remove bt-mysql57-5.7.32-1.el7.x86_64
☞ 如何重置 root 密碼
- 首先,在
"mysqld.cnf"
檔案中
配置參數 :
skip-grant-tables
- 然後,重新開機
服務mysql
systemctl restart mysql.service
-
此時,進入 mysql
使用指令:
,回車後無需密碼mysql -uroot -p
- 然後, 執行
語句:SQL
flush privileges; #重新整理權限
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼'; #重置新密碼
exit; #修改完畢,退出 mysql
- 接下來,将第一步開啟的參數關閉,重新開機
服務即可mysql
systemctl restart mysql.service
☞ 推薦文章
-
【PXC 原理分析】