https://www.linuxidc.com/Linux/2018-11/155499.htm centos7.2 pxc5.7.21
centos 虛擬機拷貝
查看centos版本:
命令:$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
在host文件中設置了節點:centos1 10.3.13.213 node1, centos2 10.3.13.197 node2, centos3 10.3.13.194 node3
linux的yum,rpm操作
安裝數據庫 percona server
https://blog.csdn.net/qq_33466466/article/details/84670368
安裝yum源 yum install
http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm 這個0.1-6已經是目前最新的yum源了
yum list | grep percona 查看當前安裝的percona軟件
檢查是否安裝有MySQL Server: 在安裝percona之前需要將mysql以及mariadb刪除
rpm -qa | grep mysql
rpm -qa | grep mariadb
刪除方法:
rpm -e mysql #普通刪除模式
rpm -e --nodeps mysql #強行刪除模式,如果使用上面命令刪除時,提示有依賴的其它文件,則用該命令可以對其強行刪除。
yum remove mariadb-libs-5.5.41-2.el7_0.x86_64
要注意的是mariadb也是不能存在的,有的話就要刪除調,刪除的時候有依賴關系,直接yum卸載
percona 提示密鑰不匹配
https://www.bbsmax.com/A/MyJxLBjVJn/
清除yum緩存
yum clean all
yum --enablerepo=base clean metadata
yum --enablerepo=updates cleanmetadata
yum makecache fast
yum相關的配置文件:
1.etc/yum.conf配置文件
2.etc/yum.repos.d/目錄下的眾多.repo文件
yum install Percona-Server-server-57 --nogpgcheck 這樣可以不用檢查公鑰
關閉防火牆
開放系統的3306端口 如果設置了防火牆的話,我們搭建的系統把防火牆已經關了
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
mysql操作:
啟動 service mysql start 查看運行狀態service mysql status 關閉service mysql stop 重啟service mysql restart
修改root賬戶的默認密碼
cat /var/log/mysqld.log | grep "A temporary password" 獲取原始密碼(系統生成的)
mysql_secure_installation 修改原始密碼
刪除percona
rpm -qa|grep -i percona 找到包
yum remove percona-release-0.1-4.noarch 刪除安裝及其依賴
rm -rf /var/lib/mysql/ /etc/my.cnf
注:這里將刪除所有的數據文件(databases, tables, logs, etc.),
可能你環境中的datafile的位置並不是默認的/var/lib/mysql,而是其他的目錄,卸載的時候根據實際情況刪除文件
搭建percona cluster 集群環境
1 設置 vim /etc/selinux/config SELINUX=disabled 參考:
https://blog.csdn.net/chenhualeguan/article/details/54889571
在線安裝
安裝Persona倉庫
yum install
http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum install Percona-XtraDB-Cluster-57 --nogpgcheck
在線安裝太慢選擇離線下載
離線安裝:
tar -vxf Percona-XtraDB-Cluster-5.7.25-rel28-31.35.1.Linux.x86_64.ssl101.tar.gz
在官網下載,這里選擇101 針對的是centos7 這個免安裝的不知道怎么啟動換了一個
tar -xvf Percona-XtraDB-Cluster-5.7.23-31.31-r438-el7-x86_64-bundle.tar
yum install *.rpm
發現安裝有問題需要依賴包:
yum install perl-IO-Socket-SSL.noarch
yum install perl-DBD-MySQL.x86_64
yum install perl-Time-HiRes
yum install openssl
yum install openssl-devel
yum install socat
安裝 yum源用最新
yum install percona-xtrabackup-24.x86_64
將這些需要的依賴的軟件包安裝后,再運行yum install *.rpm 這樣終於將集群服務安裝好了。
目前所有安裝的內容:
$ rpm -qa|grep -i percona
Percona-XtraDB-Cluster-devel-57-5.7.23-31.31.2.el7.x86_64
percona-xtrabackup-24-2.4.13-1.el7.x86_64
Percona-XtraDB-Cluster-shared-57-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-57-debuginfo-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-57-5.7.23-31.31.2.el7.x86_64
percona-release-0.1-6.noarch
Percona-XtraDB-Cluster-shared-compat-57-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-test-57-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-garbd-57-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-server-57-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-client-57-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-full-57-5.7.23-31.31.2.el7.x86_64
配置pxc集群
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
user=mysql
server-id=1 # PXC集群中MySQL實例的唯一ID,不能重復,必須是數字
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster #PXC集群的名稱
wsrep_cluster_address=
gcomm://10.3.13.213,10.3.13.197,10.3.13.194
wsrep_node_name=node1 #當前節點的名稱
wsrep_node_address=10.3.13.213 #當前節點的IP
wsrep_sst_method=xtrabackup-v2 #同步方法(mysqldump、rsync、xtrabackup
wsrep_sst_auth= sstuser:Abc_123456 #同步使用的帳戶
pxc_strict_mode=ENFORCING #同步嚴厲模式
binlog_format=ROW #基於ROW復制(安全可靠)
default_storage_engine=InnoDB #默認引擎
innodb_autoinc_lock_mode=2 #主鍵自增長不鎖表
主節點操作:
在啟動前現需要運行下:停止MySQL服務 service mysql stop 否則下面的運行不能啟動
主節點的啟動命令與從節點是有區別的。
systemctl start
mysql@bootstrap.service
systemctl stop
mysql@bootstrap.service
systemctl restart
mysql@bootstrap.service
進入mysql進行操作:
#查看 root 密碼
cat /var/log/mysqld.log | grep "A temporary password"
#修改 root 密碼,建議先創建快照,以便恢復.
mysql_secure_installation
設置的新密碼:Yl*1990929
進入數據庫
mysql -uroot -p
在數據庫庫中查看當前狀態:mysql> show status like 'wsrep%';
在結果中注意
| wsrep_incoming_addresses | 10.3.13.213:3306 | 目前集群中只有一個ip
| wsrep_cluster_size | 1 | 目前node2和node3還沒有加進來
登錄數據庫
mysql -uroot -p
創建、授權、同步賬號
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'Abc_123456';
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
mysql> FLUSH PRIVILEGES;
從節點啟動:
systemctl start mysqld
這里在啟動從節點的時候一直報錯,通過查找/var/lib/mysql下的錯誤日志和查看主節點的innobackup.backup.log
發現是同步賬戶sstuser的權限問題,按照下面這篇文章的步驟可以解決。
問題:
mysql 轉移到percona 運行sql語句報錯
新節點加入到集群中,配置文件怎么整
舊節點重新加入
pxc配置文件my.cnf
wsrep_provider: 指定Galera庫的路徑
wsrep_cluster_name: Galera集群的名稱
wsrep_cluster_address:Galera集群中各節點地址。地址使用組通信協議gcomm://(group communication)
wsrep_node_name:本節點在Galera集群中的名稱
wsrep_node_address:本節點在Galera集群中的通信地址
wsrep_sst_method:state_snapshot_transfer(SST)使用的傳輸方法,可用方法有mysqldump、rsync和xtrabackup,前兩者在傳輸時都需要對Donor加全局只讀鎖(FLUSH TABLES WITH READ LOCK),xtrabackup則不需要(它使用percona自己提供的backup lock)。強烈建議采用xtrabackup
wsrep_sst_auth:在SST傳輸時需要用到的認證憑據,格式為:"用戶:密碼"
pxc_strict_mode:是否限制PXC啟用正在試用階段的功能,ENFORCING是默認值,表示不啟用
binlog_format:二進制日志的格式。Galera只支持row格式的二進制日志
default_storage_engine:指定默認存儲引擎。Galera的復制功能只支持InnoDB
innodb_autoinc_lock_mode:只能設置為2,設置為0或1時會無法正確處理死鎖問題
基於Galera協議的高可用方案:PXC
Galera是Codership提供的多主數據同步復制機制,可以實現多個節點間的數據同步復制以及讀寫,並且可保障數據庫的服務高可用及數據一致性。
pxc優點:
1,服務高可用 多個節點的數據是相同的,只要最后一個節點可用,就還能運行。
1.同步復制,事務要么在所有節點提交或不提交。
2.多主復制,可以在任意節點進行寫操作。
3.在從服務器上並行應用事件,真正意義上的並行復制。
4.節點自動配置。
5.數據一致性,不再是異步復制。
pxc缺點:
1,對InnoDB的事物控制是支持的,其他的不支持,5.7版本
mysql> show engines; 可以查看事物的支持。
加入新節點,開銷大。需要復制完整的數據。
不能有效的解決寫縮放問題,所有的寫操作都將發生在所有節點上。
有多少個節點就有多少重復的數據。
PXC會使用大概是4個端口號
3306:數據庫對外服務的端口號
4444:請求SST SST: 指數據一個鏡象傳輸 xtrabackup , rsync ,mysqldump 在新節點加入時起作用
4567: 組成員之間進行溝通的一個端口號
4568: 傳輸IST用的。相對於SST來說的一個增量 ,節點下線,重啟加入時起作用
名詞:
WS:write set 寫數據集
IST: Incremental State Transfer 增量同步
SST:State Snapshot Transfer 全量同步
節點接收sql 請求后,對於ddl 操作,在commit之前,由wsrep API 調用galera 庫進行集群內廣播,
所有其他節點驗證成功后事務在集群所有節點進行提交,反之roll back。pxc 保證整個集群所有數據的強一致性,滿足CAP理論中滿足:Consistency 和 Availability
對搭建的三個節點的數據庫進行測試:
mysql -uroot -p
在節點node3上 mysql> create database yl123_db;
在節點node2上 mysql> show databases; 會發現數據已經同步過去了
數據庫設置權限:
mysql> set global validate_password_policy=0 設置安全級別,0 是最低的
mysql> set global validate_password_length=4; 設置最小的密碼長度
mysql> set PASSWORD=PASSWORD('123456'); 重新設置密碼
賦予遠程訪問的權限:
mysql> grant all privileges on *.* to root@'%' identified by "123456"; 設置遠程訪問的權限
mysql> flush privileges;
jdbc:mysql:loadbalance 連接mysql集群
ProxySQL是一個可以實現MySQL讀寫分離的輕量級工具
首先測試了下單個連接沒有問題
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:
mysql://10.3.13.213:3306/portalyl
jdbc.username=root
jdbc.password=123456
mysql分布式的jdbc連接
另外兩個節點也需要設置遠程訪問的權限,然后把密碼改掉試試
目前的操作是將三個數據庫節點的root 密碼都改為123456, 且都允許遠程可讀可寫權限
spring中jdbc的配置:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:
loadbalance://10.3.13.213:3306,10.3.13.197:3306,10.3.13.194:3306/portalyl?loadBalanceAutoCommitStatementThreshold=5
jdbc.username=root
jdbc.password=123456
能連接上數據庫,且數據時同步的。
測試:
關閉node2 發現數據庫集群還是可以正常使用
重啟node2后,剛才更改的數據已經同步到node2中去了
新節點加入到集群中:
新節點加入集群時,需要從當前集群中選擇一個Donor節點來同步數據,也就是所謂的state_snapshot_tranfer(SST)過程。
SST同步數據的方式由選項wsrep_sst_method決定,一般選擇的是xtrabackup。
wsrep_sst_method:state_snapshot_transfer(SST)使用的傳輸方法,可用方法有mysqldump、rsync和xtrabackup,前兩者在傳輸時都需要對Donor加全局只讀鎖(FLUSH TABLES WITH READ LOCK),xtrabackup則不需要(它使用percona自己提供的backup lock)。強烈建議采用xtrabackup
必須注意,新節點加入Galera時,會刪除新節點上所有已有數據,再通過xtrabackup(假設使用的是該方式)從Donor處完整備份
所有數據進行恢復。所以,如果數據量很大,新節點加入過程會很慢。而且,在一個新節點成為Synced狀態之前,不要同時加入其它新
節點,否則很容易將集群壓垮。如果是這種情況,可以考慮使用wsrep_sst_method=rsync來做增量同步,既然是增量同步,最好保證
新節點上已經有一部分數據基礎,否則和全量同步沒什么區別,且這樣會對Donor節點加上全局read only鎖
如果是集群是新搭建的,或者說直接使用SST的方式加入新節點,那么新節點的配置就直接按照前面的主節點配置來就可以了,只是把wsrep_node_address改成
對應節點的IP即可,而對於已經運行了一段事件的集群,新加入節點使用SST傳送全量數據的方式同步的代價比較高,所以下面討論一個IST方式加入新節點同步數據的方式
舊節點加入到集群中:
如果舊節點加入Galera集群,說明這個節點在之前已經在Galera集群中呆過,有一部分數據基礎,缺少的只是它離開集群時的數據。
這時加入集群時,會采用IST(incremental snapshot transfer)傳輸機制,即使用增量傳輸。但注意,這部分增量傳輸的數據源是Donor
上緩存在GCache文件中的,這個文件有大小限制,如果缺失的數據范圍超過已緩存的內容,則自動轉為SST傳輸。如果舊節點上的數據和Donor
上的數據不匹配(例如這個節點離組后人為修改了一點數據),則自動轉為SST傳輸。關於GCache以及Galera是如何判斷數據狀態的,本文不展開
描述,可參見
Understanding GCache in Galera。
節點在退出集群后, 從新加入的時候, 如果這個故障節點的ip 在自己的配置文件 wsrep_cluster_address 的選項中的第一個ip .
那么這個節點是永遠都無法再加入這個集群了.參考:
http://blog.itpub.net/133735/viewspace-2140548/
PXC集群安裝部署指南
當前的虛擬機版本:
CentOS Linux release 7.5.1804 (Core)
注意:下面的操作需要在每一個節點上進行。
1、開放系統3306,4444,4567,4568端口
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
2、設置 vim /etc/selinux/config
SELINUX=disabled
需要reboot重啟后生效
3、檢查是否安裝有MySQL Server: 在安裝percona之前需要將mysql以及mariadb刪除
rpm -qa | grep mysql
rpm -qa | grep mariadb 查找是否有mysql或mariadb存在
刪除方法:
rpm -e mysql #普通刪除模式
rpm -e --nodeps mysql #強行刪除模式
yum remove mariadb-libs-5.5.41-2.el7_0.x86_64
要注意的是mariadb也是不能存在的,有的話就要刪除,刪除的時候有依賴關系,直接yum卸載
4、安裝
目前安裝的版本是5.7
在線安裝
<1>安裝yum源
yum install
http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm
<2>安裝依賴包以及備份所需的包
yum install perl-IO-Socket-SSL.noarch
yum install perl-DBD-MySQL.x86_64
yum install perl-Time-HiRes
yum install openssl
yum install openssl-devel
yum install socat
yum install percona-xtrabackup-24.x86_64 (備份用到的軟件)
yum install Percona-XtraDB-Cluster-57
離線安裝
下載安裝 perl-IO-Socket-SSL.noarch、 perl-DBD-MySQL.x86_64、 perl-Time-HiRes
openssl、 openssl-devel、socat、percona-xtrabackup-24.x86_64 rpm安裝包
在官網下載
http://www.percona.com/
tar -xvf Percona-XtraDB-Cluster-5.7.23-31.31-r438-el7-x86_64-bundle.tar
yum install *.rpm
5、配置文件 my.cnf
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
user=mysql
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so 指定Galera庫的路徑
wsrep_cluster_name=pxc-cluster #PXC集群的名稱
wsrep_cluster_address=
gcomm://10.3.13.213,10.3.13.197,10.3.13.194
集群中各節點地址。地址使用組通信協議gcomm://(group communication)
wsrep_node_name=node1 #當前節點的名稱
wsrep_node_address=10.3.13.213 #當前節點的IP(這里也可以填寫host文件中ip對應的名稱)
wsrep_sst_method=xtrabackup-v2 #同步方法(mysqldump、rsync、xtrabackup)
wsrep_sst_auth= sstuser:Abc_123456 #同步使用的帳戶,格式為:"用戶:密碼"
pxc_strict_mode=ENFORCING #同步嚴厲模式
binlog_format=ROW #基於ROW復制(安全可靠)
default_storage_engine=InnoDB #默認引擎
innodb_autoinc_lock_mode=2 #主鍵自增長不鎖表
注:
wsrep_cluster_address配置節點的ip,注意在配置當前節點的值時,不要將當前節點的ip放在第一個
6、啟動主節點
systemctl start
mysql@bootstrap.service
注:第一個節點的啟動命令與后面節點的啟動命令是不一樣的
7、在主節點進入mysql進行操作(更改密碼,授予權限)
#查看 root 密碼
cat /var/log/mysqld.log | grep "A temporary password"
#修改 root 密碼,建議先創建快照,以便恢復.
mysql_secure_installation
進入數據庫
mysql -uroot -p
設置root密碼訪問權限
mysql> set global validate_password_policy=0 設置安全級別,0 是最低的
mysql> set global validate_password_length=4; 設置最小的密碼長度
mysql> set PASSWORD=PASSWORD('123456'); 重新設置密碼
賦予遠程訪問的權限:
mysql> grant all privileges on *.* to root@'%' identified by "123456"; 設置遠程訪問的權限
mysql> flush privileges;
創建、授權、同步賬號
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'Abc_123456';
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
mysql> FLUSH PRIVILEGES;
8、從節點啟動
systemctl start mysqld
9、查看數據庫狀態
查看本機的mysql狀態
systemctl status mysqld
在數據庫庫中查看當前狀態:mysql> show status like 'wsrep%';
| wsrep_incoming_addresses | 10.3.13.213:3306 當前在集群中的節點ip
| wsrep_cluster_size | 1 集群中節點個數
基於Galera協議的高可用方案:PXC
優點:
1、服務高可用 多個節點的數據是相同的,只要最后一個節點可用,就還能運行。
無需集中管理。可以在任何時間點失去任何節點,但是集群將照常工作,不受影響。
2、同步復制,事務要么在所有節點提交或不提交。各節點間無延遲且節點宕機不會導致數據丟失。
3、多主復制,可以在任意節點進行寫操作。
4、在從服務器上並行應用事件,真正意義上的並行復制。
5、節點自動配置。無需手工備份當前數據庫並拷貝至新節點。
6、數據一致性,不再是異步復制。
7、PXC最大的優勢:強一致性、無同步延遲
8、應用程序的兼容性:無需更改應用程序
缺點:
1、對InnoDB的事物控制是支持的,其他的不支持,5.7版本
2、加入新節點,開銷大。需要復制完整的數據。新加入節點采用SST時代價高;
3、不能有效的解決寫縮放問題,所有的寫操作都將發生在所有節點上。
4、有多少個節點就有多少重復的數據。
5、寫入效率取決於節點中最弱的一台,因為PXC集群采用的是強一致性原則,一個更改操作在所有節點都成功才算執行成功。
集群吞吐量/性能取決於短板;
6、所有表都要有主鍵;
7、鎖沖突、死鎖問題相對更多
8、不支持LOCK TABLE等顯式鎖操作;
9、不支持XA;
