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

英文別人github的配置流程

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

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

MySQL的slave 能直接轉換把PXC,不用導數據。

  • 詳細的方法是參考英文原文PXC-install-getting-started
  • 簡單說過程就是:

    1. stop mysqld
    2. yum remove mysql-server與client,還是shard庫。注意,remove時會把my.cnf備份。
    3. 安裝官方的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. 在添加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. 第一個節點啓動時,無需拖拉數據,直接start slave, 能從原來的master拉binlog繼續執行,本身它還是slave角色。
# 授權一個叫sst用戶,用於節點2加入時同步數據。
# 建議直接授權爲all,否則第二個加入時好易權限問題,反正只是對localhost的授權,
# 因此,wsrep_sst_auth直接配置爲root用戶也可以。
GRANT ALL ON *.* TO 'sst'@'localhost' IDENTIFIED BY '!admin8888';
  1. 第二個節點啓動時,注意看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. 我們數據量比較大,800多G,千兆網卡,要2~3小時 才能傳輸完,啓動第二個節點。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章