1. 程式人生 > >PXC 配置筆記-從MySQL直接轉成PXC叢集

PXC 配置筆記-從MySQL直接轉成PXC叢集

PXC 能提供高可用,高讀,多寫支援

    最重要的優點就是高可能,在3個及以上節點時,其中一個掛了,完全不影響業務。     最大的缺點是多寫問題,最短板效能上限問題。     在我們硬體水平是256G記憶體,32核CPU,SSD硬體,單行資料大概1K,單表1千萬,512表。 QPS在2.5k寫+5K讀時,就會有節點同步阻塞問題。當時我們臨時切成只讀(不執行寫SQL)10分鐘後,才緩解過來。寫queue配置引數在下面。     基本第3點,我們的應用場景是:低寫QPS的DB,使用PXC叢集,以防硬體故障,達到高可用。

MySQL的slave 能直接轉換把PXC,不用導資料。

    詳細的方法是參考英文原文PXC-install-getting-started

    簡單說過程就是:         stop mysqld         yum remove mysql-server與client,還是shard庫。注意,remove時會把my.cnf備份。

        安裝官方的yum源倉庫,直接yum 安裝 PXC。

            yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm             sudo yum list | grep XtraDB-Cluster|grep 5.7             Percona-XtraDB-Cluster-57.x86_64             Percona-XtraDB-Cluster-57-debuginfo.x86_64             Percona-XtraDB-Cluster-client-57.x86_64             Percona-XtraDB-Cluster-devel-57.x86_64             Percona-XtraDB-Cluster-full-57.x86_64             Percona-XtraDB-Cluster-garbd-57.x86_64             Percona-XtraDB-Cluster-server-57.x86_64             Percona-XtraDB-Cluster-shared-57.x86_64             Percona-XtraDB-Cluster-test-57.x86_64

        4.修改原來my.cnf配置檔案,新增PXC配置如下,加到[mysqld]下,原來的不用動。

binlog_format=ROW log_slave_updates=1 ################################# #Percona xtradb cluster config # # galary庫路徑 wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

# wsrep_cluster_address為節點地址(不需要埠),第一個節點啟動時配置為: gcomm:// # 第二個節點啟動時配置為: gcomm://{節點1 IP},{節點2 IP} wsrep_cluster_address=gcomm:// # 並行複製執行緒數 4*cpu, 當24個CPU使用 wsrep_slave_threads=94 # 叢集名字 wsrep_cluster_name=roaming1

# gcache.size      是硬碟快取值大小。 # gcache.page_size 硬碟快取頁大小。 # gcs.fc_limit     允許多少條寫sql未同步執行, 超過這個值 ,就會阻塞寫入請求,直接佇列少於 #                  gcs.fc_factor*gcs.fc_limit的值。 # gcs.fc_factor    當阻塞發生時,允許寫請求繼續執行的百分比因子:阻塞的寫佇列長度百分比。 #    while (get_write_queue() >= fc_limit ){ #       block_all_sql() #       while( get_write_queue() <= fc_limit*fc_factor){ #         allow_all_sql() #     } wsrep_provider_options = "gcache.size=32G; gcache.page_size=4G; gcs.fc_limit = 256; gcs.fc_factor = 0.8;" # 節點名: wsrep_node_name  = node240 wsrep_sst_method = xtrabackup-v2 # 需要建一個專門的使用者用做sst/ist。要先授權,授權在localhost執行。 wsrep_sst_auth="sst:!admin8888" # 不允許讀延遲資料,會影響讀效能, ON/OFF wsrep_causal_reads = OFF innodb_autoinc_lock_mode = 2 innodb_locks_unsafe_for_binlog  = 1

    1     2     3     4     5     6     7     8     9     10     11     12     13     14     15     16     17     18     19     20     21     22     23     24     25     26     27     28     29     30     31     32     33     34     35     36

    在新增my.cnf配置是,唯一 要注意的是wsrep_cluster_address的值:

第一個節點啟動時配置為: gcomm:// 第二個節點啟動時配置為: gcomm://{節點1 IP},{節點2 IP} 第三個節點啟動時類推,至少配置一個已有資料的節點IP,最後配置一個自己的IP 如:wsrep_cluster_address=gcomm://172.16.8.239,172.16.8.240

    1     2     3     4

    第一個節點啟動時,無需拖拉資料,直接start slave, 能從原來的master拉binlog繼續執行,本身它還是slave角色。

# 授權一個叫sst使用者,用於節點2加入時同步資料。 # 建議直接授權為all,否則第二個加入時好易許可權問題,反正只是對localhost的授權, # 因此,wsrep_sst_auth直接配置為root使用者也可以。 GRANT ALL ON *.* TO 'sst'@'localhost' IDENTIFIED BY '!admin8888';

    1     2     3     4

    第二個節點啟動時,注意看error-log,正常的話,會清空datadir,並且從 node1 拉資料,主要通過 sst,所以node1要配置一個sst使用者,這時可能出來一個bug,sst類似xtrabckup通過網路傳輸資料過來到datadir/.sst目錄下,此目錄中的檔案歸屬有可能全是root,此時要全改成mysql使用者,才能正確啟動每二個節點。而方法是取巧:使用watch

使用watch命令,把sst copy過來的檔案全改成mysql使用者的。必需這樣做,mysql正確啟動。 watch -n 1 'chown mysql:mysql datadir/.sst -R'

    1     2