MySQL数据库集群之PXC方案---安装pxc集群
1. 準備工作
1.1 準備虛擬機
因為我們要實現的是三臺mysql節點集群,所以準備3臺虛擬機
192.168.1.173
192.168.1.174
192.168.1.166
1.2 下載pxc資源包
在本文中講的安裝方式是本地安裝,所以提前下載好資源包,下載pxc程序資源包。下載之后解壓壓縮包。pxc捆綁了percona數據庫,所以無需單獨下載percona安裝包
1.3 qpress-11-1.el7.x86_64
下載qpress-11-1.el7.x86_64.prm ,可以去百度或者谷歌下載。
下載完1.2和1.3的資源如下圖,由于pxc官網是國外網站,在此添加某國內云鏈接
2. PXC簡介
PXC全稱是Percona XtraDB Cluster, 是著名的mysql公司Percona出品的免費的數據庫集群產品。
PXC對數據庫集群是基于Galera的面向OLTP的多主同步復制插件。
長期以來mysql都缺少官方原生的集群方案,這也給很多第三方公司提供了機會,所以Galera技術就是眾多mysql集群技術中較為著名的一種,mysql自帶的主從復制模式天生就不能保證數據同步的完整一致,所以很多大公司花了很多人力和物力去解決這個問題,但是收效甚微,幸運的是Galera帶來了多主架構,同步復制,并發復制,故障切換等一系列的功能。這才是真正意義上保證了數據的一致性,正確性和完整性。
PXC主要用于解決MySQL集群中數據同步強一致性的問題。
PXC是MySQL集群方案中公認的優先方案之一
2.1 PXC的特點
同步復制,事務在所有集群節點提交成功,要么不成功。
多主復制,可以在任意一個節點寫入
數據同步的強一致性,所有節點數據保持一致
2.2 盡可能的控制PXC集群的規模
PXC集群節點越多,數據同步的速度就越慢
2.3 所有PXC節點的硬件配置要相同
PXC集群數據同步的速度取決于配置最低的節點。因為PXC是同步復制,一個節點寫入的數據的速度慢,會拖慢整個集群的寫入速度
2.4 PXC集群只支持InnoDB引擎
只有InnoDB的數據才會被同步
3. 安裝PXC
3.1 刪除MariaDB程序包
yum -y remove mari*
3.2 開放防火墻端口
PXC集群要使用4個端口,所以防火墻要開放下邊4個端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --reload
3.3 關閉SELINUX
把配置文件中的SELINUX的值改為disabled
vi /etc/selinux/config
修改之后執行reboot,重啟linux系統
reboot
3.4 將pxc資源包上傳到服務器并安裝
在/usr/local目錄下創建percona文件夾,將資源包上傳到percona目錄中
cd /usr/local
mkdir percona
cd percona
安裝PXC
yum localinstall *.rpm
3.5 修改數據庫配置文件
Percona數據庫配置文件和mysql的配置文件不一樣。
用下邊命令查看Percona數據庫配置文件的位置
cat /etc/my.cnf
進入Percona數據庫配置文件的目錄
mysql的常用信息都寫在了mysqld.cnf文件,wsrep.cnf文件配置的是pxc集群的信息
我們可以簡化一下配置文件,將mysqld.cnf文件和wsrep.cnf文件的內容復制到/etc/my.cnf文件中,把所有配置信息寫到一個文件中,并添加字符集等配置細膩
[client]
socket=/var/lib/mysql/mysql.sock[mysqld]
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=7character_set_server = utf8
bind-address = 0.0.0.0
#跳過DNS解析
skip-name-resolve# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
初始化root賬戶密碼
啟動mysql
systemctl start mysqld
查看默認密碼
cat /var/log/mysqld.log | grep "A temporary password"
修改MySQL密碼
mysql_secure_installation
輸入新密碼,新密碼需要有大小寫字母加數組,我們這里設置Abc_123456
后邊有一些初始化的操作,所有都輸入y
創建遠程管理員賬戶
root賬戶默認不允許遠程連接,所以我們創建一個可以遠程連接的賬戶
進入mysql
mysql -u root -p
創建新用戶賦予遠程連接權限
CREATE USER 'admin'@'%' IDENTIFIED BY 'Abc_123456';GRANT all privileges ON *.* TO 'admin'@'%';FLUSH PRIVILEGES;exit
關閉服務
systemctl stop mysqld
在my.cnf文件中添加pxc集群配置信息
server-id=1 #PXC集群中MySQL實例的唯一ID,不能重復,必須是數字
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster #PXC集群的名稱
wsrep_cluster_address=gcomm://192.168.1.173,192.168.1.174,192.168.1.166
wsrep_node_name=pxc1 #當前節點的名稱
wsrep_node_address=192.168.1.173 #當前節點的IP
wsrep_sst_method=xtrabackup-v2 #同步方法(mysqldump、rsync、xtrabackup)
wsrep_sst_auth= admin:Abc_123456 #同步使用的帳戶
pxc_strict_mode=ENFORCING #同步嚴厲模式
binlog_format=ROW #基于ROW復制(安全可靠)
default_storage_engine=InnoDB #默認引擎
innodb_autoinc_lock_mode=2 #主鍵自增長不鎖表
最終的配置文件my.cnf是這樣的
[client]
socket=/var/lib/mysql/mysql.sock[mysqld]
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=7character_set_server = utf8
bind-address = 0.0.0.0
#跳過DNS解析
skip-name-resolve# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.168.1.173,192.168.1.174,192.168.1.166
wsrep_node_name=pxc1
wsrep_node_address=192.168.1.173
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth= admin:Abc_123456
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
以上步驟在其余兩臺虛擬機重復此步驟,my.cnf的文件中server-id,wsrep_node_name,wsrep_node_address這三個參數是不能重復的值
3.6 啟動命令
3.6.1 主節點的管理命令(第一個啟動的PXC節點)
systemctl start mysql@bootstrap.servicesystemctl stop mysql@bootstrap.servicesystemctl restart mysql@bootstrap.service
3.6.2 非主節點的管理命令(非第一個啟動的PXC節點)
service mysql start
service mysql stop
service mysql restart
3.7 連接測試
使用navicat連接三個數據庫節點,連接成功
3.8 查看PXC集群狀態信息
在任意一個節點執行以下命令
show status like 'wsrep_cluster%';
wsrep_cluster_size參數是說明pxc集群是幾個數據庫節點的集群。說明集群搭建成功。
4. 測試
我們在192.168.1.166的數據庫中創建一個邏輯庫testdb
刷新192.168.1.173和192.168.1.174的節點的數據庫,發現也同步了testdb數據庫
接著在192.168.1.173的testdb的數據庫上創建一張student表
刷新其余兩個節點的數據庫,發現也同步表成功
我們在192.168.1.174節點上新建幾條學生數據
刷新其余兩個節點,發現數據也同步成功
5. PXC節點啟動與關閉
- 如果最后關閉的PXC節點是安全退出的,那么下次啟動要最先啟動這個節點,而且要以主節點啟動
- 如果最后關閉的PXC節點不是安全退出的,那么要先修改
/var/lib/mysql/grastate.dat文件,把其中的safe_to_bootstrap屬性值設置為1,再安照主節點啟動
5.1 PXC節點的安全關閉操作
節點怎么啟動的,就使用對應的命令去關閉。如果用錯了關閉命令,是不能關閉節點的數據服務的
systemctl stop mysql@bootstrap.service
service mysql stop
使用命令關閉主節點
關閉掉主節點之后查看/var/lib/mysql/grastate.dat文件
我們在關閉其他子節點,我們先關閉192.168.1.166節點,再關閉192.168.1.174節點
下一次pxc集群啟動的主節點是192.168.1.174服務器,192.168.1.173和192.168.1.166以子節點啟動
5.2 PXC節點的不安全或意外關閉操作
宕機,掛起,關機,重啟,斷電,斷網都會讓節點意外下線。
意外下線部分節點
安全下線節點不會讓剩下的節點宕機,如果節點意外退出,集群的規模不會縮小,意外退出的節點超過半數,比如三個節點意外退出了2個節點,那么剩下的節點就不能夠讀寫了。其他節點按照普通節點啟動上線即可恢復pxc集群
service mysql start
意外下線全部節點,不同時退出
如果三個節點都意外退出,那么查看/var/lib/mysql/grastate.dat文件,看看哪個文件的safe_to_bootstarp的值是1,那么那個節點是最后意外關閉的,再按照safe_to_bootstarp的值啟動pxc集群
意外下線全部節點,同時退出
如果三個節點同時意外退出,我們需要修改配置文件,挑選一個節點作為主節點,修改safe_to_bootstarp的值設置為1,那么這個節點可以以主節點啟動
總結
以上是生活随笔為你收集整理的MySQL数据库集群之PXC方案---安装pxc集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机组成与结构PLA,计算机组成与结构
- 下一篇: 岚图汽车宣布进入荷兰市场,MPV 车型梦