[ Openstack ] Openstack-Mitaka 高可用之 Mariadb-Galera集群部署


 目錄

    Openstack-Mitaka 高可用之 概述
    Openstack-Mitaka 高可用之 環境初始化
    Openstack-Mitaka 高可用之 Mariadb-Galera集群部署
    Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署
    Openstack-Mitaka 高可用之 memcache
    Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群
    Openstack-Mitaka 高可用之 認證服務(keystone)
    OpenStack-Mitaka 高可用之 鏡像服務(glance)
    Openstack-Mitaka 高可用之 計算服務(Nova)
    Openstack-Mitaka 高可用之 網絡服務(Neutron)
    Openstack-Mitaka 高可用之 Dashboard
    Openstack-Mitaka 高可用之 啟動一個實例
    Openstack-Mitaka 高可用之 測試

 

 簡介及特點

MariaDB Galera Cluster主要功能:
    (1)多個節點數據同步復制
    (2)每個節點都是主節點,每個節點都有全部的數據
    (3)每個節點都可以提供讀寫操作
    (4)失效節點自動剔除,新節點加入自動同步(慎重,新節點加入會造成鎖表)
    
優點:
    (1)多主的結構,不存在同步延遲的問題。(master-slave是異步同步數據,Galera是同步同步數據)
    (2)不存在事務丟失的情況(有待驗證)
    (3)節點都可以進行讀寫,客戶端可以任意連接到其中節點,增強負載能力
    
缺點:
    (1)加入新節點時,同步數據會造成鎖表
    (2)對於寫入操作會發生到每個節點上
    (3)多少個節點就有多少份數據
    (4)網絡不穩,會出現腦裂情況,服務將不可用,不適用與重要數據的生產環境
    (5)僅支持InnoDB/XtraDB存儲引擎

 

 工作流程圖

當客戶端發送一個commit命令,在事務被提交之前,所有對數據的更改都會被write-set收集起來,並且將write-set記錄的內容發送給其他節點。
write-set將在每個節點上使用搜索到的主鍵進行確認性測試,測試結果決定着節點是否應用write-set更改數據。如果認證測試失敗,節點將丟棄write-set;如果測試成功,則事務提交。工作如下:

 

  Galera集群的搭建

以下操作在三個節點都要執行:

# yum install MariaDB-Galera-server MariaDB-client galera -y

安裝完后的配置文件:

# ll /etc/my.cnf.d/
total 16
-rw-r--r-- 1 root root  295 Oct 27 08:23 client.cnf
-rw-r--r-- 1 root root  232 Oct 27 08:23 mysql-clients.cnf
-rw-r--r-- 1 root root 1007 Aug 16 18:24 server.cnf
-rw-r--r-- 1 root root  285 Aug 16 18:24 tokudb.cnf

啟動數據庫

# /etc/init.d/mysql start

加固數據庫

# mysql_secure_installation

我這里密碼是123456,不必一致

授權認證用戶:

# mysql -p123456

添加集群認證用戶:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'galera'@'%' IDENTIFIED BY 'galera' WITH GRANT OPTION;
MariaDB [(none)]> flush privileges;

停止所有節點mysql服務

# /etc/init.d/mysql stop

在 [mariadb] 模塊中添加如下:

Controller1 :


[mariadb]
query_cache_size=0                                     # 關閉查詢緩存
binlog_format=ROW                                      # binlog文件格式:行
default_storage_engine=innodb                             # Mariadb 存儲引擎
innodb_autoinc_lock_mode=2                              #主鍵自增模式修改為交叉模式
wsrep_provider=/usr/lib64/galera/libgalera_smm.so              #galera 庫文件
wsrep_cluster_address=gcomm://192.168.0.12,192.168.0.13        # galera集群url
wsrep_cluster_name='openstack'                       # galera集群名稱
wsrep_node_address='192.168.0.11'                    # 該節點的地址
wsrep_node_name='controller1'                      # 該節點的主機名
wsrep_sst_method=rsync                          # 拷貝模式
wsrep_sst_auth=galera:galera                      # galera集群認證用戶:密碼

 

 Controller2:

[mariadb]
query_cache_size=0
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.0.11,192.168.0.13
wsrep_cluster_name='openstack'
wsrep_node_address='192.168.0.12'
wsrep_node_name='controller2'
wsrep_sst_method=rsync
wsrep_sst_auth=galera:galera

 

Controller3:

[mariadb]
query_cache_size=0
binlog_format=ROW
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.0.11,192.168.0.12
wsrep_cluster_name='openstack'
wsrep_node_address='192.168.0.13'
wsrep_node_name='controller3'
wsrep_sst_method=rsync
wsrep_sst_auth=galera:galera

 

這里,啟動第一個集群節點有點特殊:

Controller1:
/etc/init.d/mysql bootstrap

Controller2:
/etc/init.d/mysql start

Controller3:
/etc/init.d/mysql start

登錄任意節點進行驗證:

# mysql -p123456
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';


MariaDB [(none)]> show global status like 'ws%';

注釋:
wsrep_cluster_status為Primary,表示節點為主節點,正常讀寫。
wsrep_ready為ON,表示集群正常運行。
wsrep_cluster_size為3,表示集群有三個節點。

 

創建數據庫進行測試:

 MariaDB [(none)]> create database abcd;

然后,登錄其他節點數據庫查看是否存在。

MariaDB [(none)]> show databases;

 

 

Mariadb-Galera集群搭建完畢。

 

在集群搭建完畢后在寫其他的配置文件:

# vim server.cnf
[mariadb-10.0]
port            = 3306
bind_address    = 192.168.0.11
tmpdir          = /tmp
skip-external-locking
skip-name-resolve
max_connections=3600
innodb_flush_log_at_trx_commit=2
innodb_log_file_size=100m
innodb_log_files_in_group=5
thread_concurrency=24
innodb_thread_concurrency=24
innodb_commit_concurrency=24
character-set-server = utf8
collation-server = utf8_general_ci
event_scheduler = ON
max_allowed_packet = 20M

三個controller節點都需要監聽各自的管理地址。

 

 注意:

當所有節點都宕機的情況下,再次啟動節點,Mariadb-Galera集群會出現無法啟動的現象
Mariadb-Galera集群啟動是有順序的,遵循一個原則:最后宕機的最先啟動,因為集群認為這個節點的數據是最新的。


免責聲明!

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



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