Centos 7 下 Mysql 5.7 Galera Cluster 集群部署


 一、介紹

  傳統架構的使用,一直被人們所詬病,因為MySQL的主從模式,天生的不能完全保證數據一致,很多大公司會花很大人力物力去解決這個問題,而效果卻一般,可以說,只能是通過犧牲性能,來獲得數據一致性,但也只是在降低數據不一致性的可能性而已。所以現在就急需一種新型架構,從根本上解決這樣的問題,天生的擺脫掉主從復制模式這樣的“美中不足”之處了。

  Galera Cluster :集成了Galera插件的MySQL集群,是一種新型的,數據不共享的,高度冗余的高可用方案,多節點都可以作為主節點,節點是對等的,當有客戶端要寫入或者讀取數據時,隨便連接哪個實例都是一樣的,讀到的數據是相同的,寫入某一個節點之后,集群自己會將新數據同步到其它節點上面,這種架構不共享任何數據,是一種高冗余架構。相比傳統架構,Galera Cluster解決的最核心問題是,在三個實例(節點)之間,它們的關系是對等的,multi-master架構的,在多節點同時寫入的時候,能夠保證整個集群數據的一致性,完整性與正確性。

  本博客的部署始於本人openstack中 mysql 多主集群部署的一個小功能。第一次接觸,記錄下自己的心路歷程。排除了很多坑點,記錄下應該注意到的細節。

二、環境介紹

  1、系統:

    CentOS Linux release 7.4.1708 (Core)

  2、節點(3台):

    openstack1:10.6.32.51  

    openstack2:10.6.32.52  

    openstack3:10.6.32.53

  3、關閉 firewall 、selinux

  4、設置時間同步:chrony

  5、部署工具安裝(可選):

    #   yum -y install bash-completion.noarch bash-completion-extras.noarch vim net-tools 

  6、查看和卸載 系統原有的 mariadb、mysql (必須卸載,否則后期會有問題):

    #  rpm -qa | grep maria

    #  rpm -qa | grep mysql

    #  yum remove mariiadb

    #  yum remove mysql

  7、更新  epel 源

    #   yum -y install epel-release

 三、mysql 5.7 Galera Cluster  部署

   1、下載 集成 galera 的mysql rpm包(所有節點)   

cd /usr/local/src wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-5.7-5.7.21-25.14.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-client-5.7-5.7.21-25.14.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-common-5.7-5.7.21-25.14.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-devel-5.7-5.7.21-25.14.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-libs-5.7-5.7.21-25.14.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-libs-compat-5.7-5.7.21-25.14.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-server-5.7-5.7.21-25.14.el7.x86_64.rpm wget http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/mysql-wsrep-test-5.7-5.7.21-25.14.el7.x86_64.rpm

 

   2、安裝mysql、galera(所有節點)

    # yum -y install ./mysql*.rpm

    # yum -y install galera

  3、數據庫啟動 (openstack1上操作)

    #   systemctl start mysqld

    #   systemctl enable mysqld

   4、添加Galera Cluster 數據同步用戶(openstack1上操作)

    a、mysql 5.7 默認有密碼,密碼查看方式:

      #   more /var/log/mysqld.log | grep password

          A temporary password is generated for root@localhost:kqi6>roGB.lF 默認隨機密碼

        

    b、修改mysql root 密碼及添加 數據同步用戶galera:

      #  mysql -uroot -p kqi6>roGB.lF

      #  SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

       # GRANT ALL ON  *.* TO 'galera'@'localhost' IDENTIFIED BY 'youpasswd';   (添加用戶:galera,后期集群配置文件用到 )

    c、停止數據庫,開始配置同步集群文件。

      systemctl stop mysqld

 

   5、配合集群文件(所有節點上操作)

     # vim /etc/my.cnf      

# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html  [mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid log_timestamps = SYSTEM #設置數據庫日志時間為系統時間
server
-id=101 #集群節點ID,集群內唯一ID。 wsrep_cluster_name=openstack_cluster wsrep-provider=/usr/lib64/galera/libgalera_smm.so #查看實際安裝路徑 wsrep_node_name = openstack_db01    #集群節點名稱 wsrep_cluster_address=gcomm://10.6.32.51,10.6.32.52,10.6.32.53 wsrep_node_address=10.6.32.51 wsrep_provider_options =gmcast.listen_addr=tcp://10.6.32.51:4567 wsrep_sst_donor=openstack_db01,openstack_db02,openstack_db03 wsrep_sst_method=xtrabackup-v2 #集群數據同步方式( xtrabackup-v2或rsync 都需要安裝所匹配的插件) wsrep_sst_auth=galera:youpasswd # 之前添加的數據同步用戶 slow_query_log=on max_allowed_packet = 1M table_open_cache = 4 sort_buffer_size = 64K read_buffer_size = 256K net_buffer_length = 2K read_buffer_size = 256K net_buffer_length = 2K thread_stack = 256K max_connections = 2000    #數據庫最大連接數

 

    #openstack2 不同之處:

      # vim /etc/mycnf        

server-id=102
wsrep_node_name = openstack_db02
wsrep_node_address=10.6.32.52
wsrep_provider_options =gmcast.listen_addr=tcp://10.6.32.52:4567

 

    #openstack3 不同之處:

      # vim /etc/mycnf  

server-id=103
wsrep_node_name = openstack_db03
wsrep_node_address=10.6.32.53
wsrep_provider_options =gmcast.listen_addr=tcp://10.6.32.53:4567

 

  6、安裝數據同步插件,本博客使用的是:  xtrabackup-v2(注意:xtrabackup 2.3的版本不支持,mysql 5.7 需要安裝 xtrabackup 2.4)(所有節點上操作)

    #  yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

    #  yum search xtrabackup

      

    #  yum -y install percona-xtrabackup-24.x86_64      mysql 5.7 一定要安裝 percona-xtrabackup-24.x86_64,否則后續的報錯會讓你懷疑人生。

  7、集群啟動

    a、當集群中還沒有節點啟動時,確認所有節點上沒有mysql進程,如果有請關閉。(所有節點操作)

      # ps -aux | grep mysql

      # kill -9 mysql-id

    b、啟動集群中第一個節點。(openstack1 上操作)  

      #  /usr/sbin/mysqld --wsrep-new-cluster --user=root &     (當且僅當 集群中沒有任何節點開啟,啟動第一個節點時使用)

    c、啟動其他節點,逐台啟動,然后查看集群狀態

      systemctl start mysqld    (集群中有節點后就可以正常啟動。openstack2 和openstack3 上依次啟動,啟動一台查看依次集群狀態)

      集群狀態查看,數據庫中查看:

        mysql> show status like 'wsrep_%';

      

      我們可以關注幾個關鍵的參數:

        wsrep_connected = on鏈接已開啟

        wsrep_local_index = 1在集群中的索引值

        wsrep_cluster_size =3集群中節點的數量 (每啟動一台,如果加入到集群中,size 會+1)

        wsrep_incoming_addresses =10.6.32.51:3306,10.6.32.53:3306,10.6.32.52:3306集群中節點的訪問地址

     d、重新啟動第一個節點的數據庫(opoenstsck1上操作)

      # kill -i mysq-id    (因為第一次為非正常啟動,需要使用kill 殺掉進程來關閉mysql)

      systemctl restart mysqld

        (如果重啟失敗,請查看/var/lib/mysql/mysql.sock.lock 是否存在,如果存在,刪除后重新啟動。)

     e、在各節點使用 數據同步用戶galera登錄,如果可以正常啟動並登錄成功。到此,Galera Cluster 已經成功部署

 

四、測試

   1、在openstck1 節點上創建測試數據庫test,其他節點查看是否可以看到測試庫。

    mysql> create database test;

     

  2、其他節點查看:

         

    數據庫實時自動同步,再次證明 Galera Cluster 集群部署成功。

 

   3、附加,查看數據庫最大連接數

      mysql> show variables like '%max_connections%';

     

    如期,已經修改為2000,數據庫最大連接太小,后期openstack 會報錯:數據庫連接數太小。

 

 謝謝~~~


免責聲明!

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



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