[ 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 高可用之 測試html

 

 簡介及特色

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

 

 工做流程圖

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

 

  Galera集羣的搭建

如下操做在三個節點都要執行:sql

# 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

啓動數據庫bootstrap

# /etc/init.d/mysql start

加固數據庫vim

# 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集羣啓動是有順序的,遵循一個原則:最後宕機的最早啓動,由於集羣認爲這個節點的數據是最新的。

相關文章
相關標籤/搜索