pxc /Galera Cluster詳解


 

 

解決主要得問題:

  無論是一主多從,還是多主架構,數據同步都是基於二進制日志完成,如果某子一節點掛了,都需要及時的,手動的去提升一個子節點為主節點。

Galera Cluster介紹:

它是一個集成了galera插件的mysql集群(采用了多主集群架構)。更是是一種新型的,數據不共享的,高度冗余的高可用方案(數據一致性,完整性,性能無法與單台單台機器相比)。目前galera cluster有兩個版本。一個是Percona Xtradb Cluster以及Mariadb Cluster。

Galera Cluster優缺點:

  優點:

    多主結構:數據在任何時候讀寫都是最新的(比如:數據的更新操作,當一個節點收到請求后都需要與其他節點進行校驗,校驗之后在更新本地數據,最后在同步)

    故障切換:在數據庫出現故障時,因為支持多點寫入,切換容易

    熱插拔:在服務期間,如果數據庫掛了,只需要停止該節點的數據庫服務,不影整個集群(其他節點)。而且如果該節點修復后,只需啟動數據庫服務即可自動加入集群環境(原集群配置環境還存在)

    同步復制:在集群種的不同節點之間數據同步,沒有延遲,而且單個節點數據庫掛了之后,數據不會丟失

    並發復制:支持並行執行,提升性能

    自動節點克隆:在新增節點時,增量數據(即在基礎數據上發送變化的數據)或基礎數據無需手動備份提供,因為新增節點上mysql服務一旦開啟,它將自動拉取在線節點數據。

  缺點:

    新節點加入需要全量拷貝數據,有時會導致數據同步的提供者無法提供讀寫,只有等待整個拷貝完成。

    只支持innodb存儲引擎

    而且集群的性能取決於集群中性能最差的節點的性能(全局校驗過程)

Galera Cluster工作流程(不一定准確,自己的理解):

  

 

 Galera Cluster包括兩個組件

1. Galera replication library (galera-3)

2.WSREP:MySQL extended with the Write Set Replication

 

提示:PXC(Percona XtraDB Cluster)是Percona對Galera的實現。

     MariaDB Galera Cluster是mariadb對Galera的實現。

  兩者都需要至少三個節點(至多8個節點),且不能安裝mysql-server或mairadb-server

RPM包

PXC:

  https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch

 

MariaDB Galera Cluster:

  https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.X/yum/centos7-amd64/

 

先介紹PXC(Percona XtraDB Cluster) 

1.使用到的端口:(4個)

  3306:數據庫對外服務的端口

  444:請求SST(State Snapshot Transfer,全量數據傳送)的端口號

  4567:組成員之間進行溝通的端口號

  4568:用於傳輸IST(Incremental State Transfer,增量數據傳送)的端口號

2.節點狀態的變化階段

OPEN:節點啟動成功,嘗試連接到集群時的狀態
PRIMARY:節點已處於集群中,在新節點加入並選取donor進行數據同步時的狀態
JOINER:節點處於等待接收同步文件時的狀態
JOINERD:節點完成數據同步工作,嘗試保持和集群進度一致時的狀態
SYNCED:節點正常提供服務時的狀態,表示已經同步完成並和集群進度保持一致
DONOR(數據的提供者):節點處於為新加入的節點提供全量數據時的狀態

 

3.GCache模塊:

  在PXC中一個特別重要的模塊,它的核心功能就是為每個節點緩存當前最新的寫集。

如果有新節點加入進來,就可以把新數據的增量傳遞給新節點,而不需要再使用SST傳輸方式,這

樣可以讓節點更快地加入集群中。建議優化的參數如下:

  gcache size:緩存寫集增量信息的大小,它的默認大小是128MB,通過wsrep_provider_options

參數設置,建議調整為2GB~4GB范圍,足夠的空間便於緩存更多的增量信息

  gcache.mem_size:GCache中內存緩存的大小,適度調大可以提高整個集群的性能 

  gcache.page_size:如果內存不夠用(GCache不足),就直接將寫集寫入磁盤文件中

 

演示percona XtraDB Cluster(pxc5.7)

  環境准備:

    以三台主機為例(centos7),各自的ip地址分別為:10.0.0.113,10.0.0.114,10.0.0.115

    如果主機安裝了mysql或mariadb必須先卸載。

    關閉防火牆和selinux,時間要同步:

      關閉防火牆方法:

        查看狀態:systemctl status firewalld

        臨時關閉:systemctl stop firewalld

        永久關閉:systemctl disable  firewalld

      禁用selinux方法:

        查看狀態:getenforce

        臨時禁用:setenforce 0

        永久關閉:將/etc/sysconfig/selinux中SELINUX改為disabled,必須重啟才能有效。

    為了演示方便區分主機(節點),這里將其主機名分別改為pxe1,pxe2,pxe3

        方法如下:

           臨時修改:hostname pxe1

           永久關閉:hostnamectl set-hostname pxe1

  此處使用清華大學的yum源為例,安裝pxc5.7。

     [root@pxe1 ~]# vi /etc/yum.repos.d/pxe.repo

        [percona]
        name=percona_repo
        baseurl=https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
        enabled=1
        gpgcheck=0

  然后將其傳送到10.0.0.114,10.0.0.115主機上,並且安裝Percona-XtraDB-Cluster-57(這里可以用任何方式【如:scp命令,ansible工具等】)

     [root@pxe1 ~]#scp /etc/yum.repos.d/pxe.repo  10.0.0.114:/etc/yum.repos.d/pxe.repo

     [root@pxe1 ~]#scp /etc/yum.repos.d/pxe.repo  10.0.0.115:/etc/yum.repos.d/pxe.repo

 

     [root@pxc1 ~]#yum install Percona-XtraDB-Cluster-57 -y

     [root@pxc2 ~]#yum install Percona-XtraDB-Cluster-57 -y

     [root@pxc3 ~]#yum install Percona-XtraDB-Cluster-57 -y

     

     #此命令可以查看安裝后生成的所有文件 

     [root@pxc1 ~]#rpm -ql rpm -ql Percona-XtraDB-Cluster-server-57

 

  在各個節點上分別配置mysql及集群配置文件:

    /etc/my.cnf:主配置文件

    也包括其他三個配置文件:mysqld.cnf,mysqld_safe.cnf,wsrep.cnf 

    修改的文件:

      1. mysqld.cnf(可選),為例保證其server_id與各個節點不同,以及log_bin二進制日志功能

      2./etc/percona-xtradb-cluster.conf.d/wsrep.cnf。必需改       

        [root@pxe1 ~]# grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
          [mysqld]
          wsrep_provider=/usr/lib64/galera3/libgalera_smm.so                 #指定Galera庫的路徑
          wsrep_cluster_address=gcomm://10.0.0.113,10.0.0.114,10.0.0.115          #Galera集群中各節點地址。gcomm:// [地址使用組通信協議]
          binlog_format=ROW                                #二進制日志的格式。目前只支持row格式
          default_storage_engine=InnoDB      #指定默認引擎,但目前只支持innoDB
          wsrep_slave_threads= 8
          wsrep_log_conflicts
          innodb_autoinc_lock_mode=2      #只能設置為2,設置為0或1時無法正確處理思索問題
          wsrep_cluster_name=pxc-cluster      #集群名稱,可自定義,但各個節點需與之保持一致

          wsrep_node_address=10.0.0.113      #本節點在Galera集群中的通信地址,也是本機ip地址
          wsrep_node_name=pxc-cluster-node-1      #本節點在Galera集群中的通信名稱,可自定義
          pxc_strict_mode=ENFORCING        #是否限制PXC啟用正在試用階段的功能,ENFORCING是默認值,表示不啟用

          wsrep_sst_method=xtrabackup-v2      #state_snapshot_transfer(SST)使用的傳輸方法
          wsrep_sst_auth="sstuser:s3cretPass"      在SST傳輸時需要用到的認證憑據,格式為:"用戶:密碼",可自定義,但各個節點需與之保持一致.而且此賬號還不存在,需要創建並授權

       

         [root@pxe2 ~]# grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf        

            [mysqld]
            wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
            wsrep_cluster_address=gcomm://10.0.0.113,10.0.0.114,10.0.0.115
            binlog_format=ROW
            default_storage_engine=InnoDB
            wsrep_slave_threads= 8
            wsrep_log_conflicts
            innodb_autoinc_lock_mode=2
            wsrep_node_address=10.0.0.114
            wsrep_cluster_name=pxc-cluster
            wsrep_node_name=pxc-cluster-node-2
            pxc_strict_mode=ENFORCING
            wsrep_sst_method=xtrabackup-v2
            wsrep_sst_auth="sstuser:s3cretPass"

          [root@pxe3 ~]# grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf        

            [mysqld]
            wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
            wsrep_cluster_address=gcomm://10.0.0.113,10.0.0.114,10.0.0.115
            binlog_format=ROW
            default_storage_engine=InnoDB
            wsrep_slave_threads= 8
            wsrep_log_conflicts
            innodb_autoinc_lock_mode=2
            wsrep_node_address=10.0.0.115
            wsrep_cluster_name=pxc-cluster
            wsrep_node_name=pxc-cluster-node-3
            pxc_strict_mode=ENFORCING
            wsrep_sst_method=xtrabackup-v2
            wsrep_sst_auth="sstuser:s3cretPass"

 

     啟動第一個節點(在三個主機選任何一個主機都可以,這里選擇10.0.0.113)。注意:第一個節點的啟動方法與后面的節點啟動方法不一樣

        [root@pxc1 ~]#systemctl start mysql@bootstrap.service

        #查看端口是否開啟3306,4567

        [root@pxc1 ~]#ss -tnl

       登錄mysql數據庫,創建/etc/percona-xtradb-cluster.conf.d/wsrep.cnf文件中的“sstuser:s3cretPass”賬戶和密碼並授權。

        注意,第一次登錄的賬戶默認為root@'localhost',密碼隨機的,需要查看/var/log/mysqld.log獲取。

          [root@px1~]# grep '\<password\>' /var/log/mysqld.log           

          #登錄mysql數據庫

 

          [root@px1~]# mysql -uroot -p')+yf3W;qBe8Y'

          #修改密碼

           mysql> ALTER USER root@'loclahost' IDENTIFIED BY '123456';

          #創建sstuser用戶並授權

           mysql> CREATE USER ssuser@'locallhost'  IDENTIFIED BY 's3cretPass';

           mysql> GRANT RELOAD,LOCK TABLES,PROCESS,REPLICATION CLIENT ON *.* TO  ssuser@'locallhost';

          #查看相關變量,重點關注wsrep_local_state,wsrep_cluster_size(集群中節點數量),wsrep_cluster_status等

            mysql> SHOW VAROABLES LIKE 'wsrep%'\G;

            #查看單個變量的值

              mysql>  SHOW VAROABLES LIKE '變量名';

 

    啟動集群中的其他節點(10.0.0.114,10.0.0.115).而且啟動之后數據會自動與10.0.0.113主機同步(故其他機器上登錄數據庫的賬戶都可以使用root@'loaclhost'  123456),啟動方法如下:

 

 

 

       [root@pxc2 ~]#systemctl start mysql

       [root@pxc3 ~]#systemctl start mysql

       [root@pxc2 ~]#ss -tnl     #查看端口3306,4567端口

 

    驗證集群狀態,即驗證搭建是否成功。

      在任何節點查看集群狀態,如果wsrep_cluster_size變量顯示為3,說明成功

      [root@pxc3 ~]#mysql -uroot -p123456

        mysql> SHOW VARIABLES LIKE 'wsrep_cluster_size';

 

  驗證數據是否同步:

    1. 在任何主機上創建一個數據庫,然后再其他主機上查詢。

      mysql> CREATE DATABASE DB1;

      mysql> SHOW DATABASES;

    2.利用xshell軟件,同時再三個節點數據庫創建一個數據庫,查看執行結果。(只有一個執行成功,其他提示數據庫已存在)

       mysql> CREATE DATABASE DB2;

 

至此基於pxc的集群環境已搭建成功並且已驗證完成。其中有些命令是手打上去的;有些東西也是按自己理解寫的;如果有錯,歡迎評論,謝謝!

 后期如何將一個節點加到該集群中:比如pxc4 (ip:10.0.0.116),簡單過程如下:

  1.拷貝/etc/yum.repos.d/pxc.repo到新主機上

  2.安裝 Percona-XtraDB-Cluster-57 程序

  3.修改/etc/percona-xtradb-cluster.conf.d/wsrep.cnf中某些字段。如下

       [root@pxc3 ~]#vi  /etc/percona-xtradb-cluster.conf.d/wsrep.cnf

            [mysqld]
            wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
            wsrep_cluster_address=gcomm://10.0.0.113,10.0.0.114,10.0.0.115,10.0.0.116    #修改此處
            binlog_format=ROW
            default_storage_engine=InnoDB
            wsrep_slave_threads= 8
            wsrep_log_conflicts
            innodb_autoinc_lock_mode=2
            wsrep_node_address=10.0.0.116             #修改此處
            wsrep_cluster_name=pxc-cluster
            wsrep_node_name=pxc-cluster-node-4      #修改此處   
            pxc_strict_mode=ENFORCING
            wsrep_sst_method=xtrabackup-v2
            wsrep_sst_auth="sstuser:s3cretPass"

  4.啟動mysql服務

  5.查看及驗證

 

演示二:MariaDB Galera Cluster

  環境准備:

    以三台主機為例(centos8),各自的ip地址分別為:10.0.0.115,10.0.0.116,10.0.0.117

    如果主機安裝了mysql或mariadb必須先卸載。

    關閉防火牆和selinux,時間要同步

    為了演示方便區分主機(節點),這里將其主機名分別改為mgc1,mgc2,mgc3

  詳細過程:

    1.三台主機分別安裝mariadb-server-galera.x86_64(AppStream里有,如果沒有需要配置epel源)包。

 

 

      這里有個小技巧,利用xshell遠程三台主機,然后再xshell菜單欄選擇-->工具-->發送鍵輸入到所有會話中。

      [root@mgc1 ~]# yum install mariadb-server-galera.x86_64 -y

    2.修改/etc/my.cnf.d/galera.cnf文件,將三台主機ip加到wsrep_cluster_address字段中。並且該協議為gcomm://(記住一定的改)

 

    3.將修改的文件分別傳輸到其他兩台主機上,並且覆蓋。

      [root@mgc1 ~]# scp /etc/my.cnf.d/galera.cnf 10.0.0.116:/etc/my.cnf.d/galera.cnf

      [root@mgc1 ~]# scp /etc/my.cnf.d/galera.cnf 10.0.0.117:/etc/my.cnf.d/galera.cnf

    4.啟動第一個節點,並且連接數據庫(賬戶默認為root,密碼為空)查看變量wsrep_cluster_size的值。

 

       [root@mgc1 ~]#galera_new_cluster

       [root@mgc1 ~]#mysql

       MariaDB [(none)]>  SHOW STATUS LIKE 'wsrep_cluster_size';

 

    5.在啟動其他主機的mariadb服務,在任何一台主機上查看wsrep_cluster_size的值

      [root@mgc2 ~]#systemctl  start mariadb

      [root@mgc3 ~]#systemctl  start mariadb

    6.驗證(與pxc一樣,1.新增一條數據,查看各節點之間數據是否同步。2.同時執行創建一個數據庫操作,看各個節點之間執行結果 3. 停止某一個節點,查看wsrep_cluster_size是否有變動。4.新增一台主機加入到集群中,看數據是否自動同步...)

 

提示:如果在centos7上搭建MariaDB Galera Cluster(5.5)集群環境,需要配置源。

 參考倉庫:https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.X/yum/centos7-amd64/

后續操作與演示二一致,只是啟動第一個節點時需要有區別:

  首次啟動時,需要初始化集群,在其中一個節點上執行命令:/etc/init.d/mysql start --wsrep-new-cluster

至此基於MariaDB Galera Cluster的集群環境已搭建成功並且已驗證完成。其中有些命令是手打上去的;有些東西也是按自己理解寫的;如果有錯,歡迎評論,謝謝!


免責聲明!

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



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