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
如下操做在三個節點都要執行: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集羣啓動是有順序的,遵循一個原則:最後宕機的最早啓動,由於集羣認爲這個節點的數據是最新的。