PXC部署,配置,操作原理


      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操作
 
安裝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 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_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.username=root
jdbc.password=123456
 
mysql分布式的jdbc連接
另外兩個節點也需要設置遠程訪問的權限,然后把密碼改掉試試
 
目前的操作是將三個數據庫節點的root 密碼都改為123456, 且都允許遠程可讀可寫權限
spring中jdbc的配置:
jdbc.driver=com.mysql.jdbc.Driver
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源
    <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;
                 
    
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM