目錄
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集群啟動是有順序的,遵循一個原則:最后宕機的最先啟動,因為集群認為這個節點的數據是最新的。