Galera cluster是一個多主同步數據庫集羣,基於同步複製技術和 Oracle 的 MYSQL/InnoDB。使用Galera Cluster時,您可以直接任意節點讀取和寫入。並且在丟失任何單個節點時可以不中斷操作且無需處理複雜故障轉移過程。
下面介紹如何爲openstack環境配置mariadb galera高可用集羣。
系統環境
主機配置
配置三個節點,使用openstack的控制節點 192.168.100.161 controller01 192.168.100.162 controller02 192.168.100.163 controller03
Haproxy配置
haproxy 添加以下配置
frontend vip-db bind 192.168.100.160:3306 timeout client 90m default_backend db-galera backend db-galera option httpchk option tcpka stick-table type ip size 1000 stick on dst timeout server 90m server controller01 192.168.100.161:3306 check inter 1s port 9200 backup on-marked-down shutdown-sessions server controller02 192.168.100.162:3306 check inter 1s port 9200 backup on-marked-down shutdown-sessions server controller03 192.168.100.163:3306 check inter 1s port 9200 backup on-marked-down shutdown-sessions
其中 192.168.100.160 是 vip 地址
數據庫集羣的安裝
安裝和配置組件(所有節點)
- 安裝軟件包 # yum install -y mariadb mariadb-galera-server mariadb-galera-common galera rsync xinetd
- 創建 /etc/my.cnf.d/openstack.cnf 文件,加入以下內容 # vim /etc/my.cnf.d/openstack.cnf [mysqld] bind-address = 192.168.100.161 #本機管理ip default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8
- 修改 mariadb 最大連接數
- 修改 /usr/lib/systemd/system/mariadb.service 文件加入以下內容 # vim /usr/lib/systemd/system/mariadb.service [Service] LimitNOFILE=10000 LimitNPROC=10000
- 重新加載服務 # systemctl --system daemon-reload
配置galera cluster(所有節點)
編輯 /etc/my.cnf.d/galera.cnf 文件,修改如下內容
# cat > /etc/my.cnf.d/galera.cnf << EOF [mysqld] skip-name-resolve=1 binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=192.168.100.161 wsrep_on=1 wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_provider_options="pc.recovery=TRUE;gcache.size=300M" wsrep_cluster_name="openstack_cluster" wsrep_cluster_address="gcomm://controller01,controller02,controller03" wsrep_node_name="controller01" #主機名 wsrep_node_address="192.168.100.161" #ip地址 wsrep_slave_threads=1 wsrep_certify_nonPK=1 wsrep_max_ws_rows=131072 wsrep_max_ws_size=1073741824 wsrep_debug=0 wsrep_convert_LOCK_to_trx=0 wsrep_retry_autocommit=1 wsrep_auto_increment_control=1 wsrep_drupal_282555_workaround=0 wsrep_causal_reads=0 wsrep_notify_cmd= wsrep_sst_method=rsync wsrep_sst_auth=root: EOF
配置 haproxy 健康檢查(所有節點)
- 安裝 xinted 服務 # yum install xinetd -y
- 登錄數據庫,創建 clustercheck 用戶,並設置其本地訪問數據庫的權限 # systemctl start mariadb.service # mysql -e "CREATE USER 'clustercheck'@'localhost' IDENTIFIED BY 'root1234';" # systemctl stop mariadb.service
- 爲 clustercheck 用戶創建配置文件 /etc/sysconfig/clustercheck # cat > /etc/sysconfig/clustercheck << EOF MYSQL_USERNAME="clustercheck" MYSQL_PASSWORD="root1234" MYSQL_HOST="localhost" MYSQL_PORT="3306" EOF
- 創建個配置 HAProxy 監控服務 /etc/xinetd.d/galera-monitor # cat > /etc/xinetd.d/galera-monitor << EOF service galera-monitor { port = 9200 disable = no socket_type = stream protocol = tcp wait = no user = root group = root groups = yes server = /usr/bin/clustercheck type = UNLISTED per_source = UNLIMITED log_on_success = log_on_failure = HOST flags = REUSE } EOF
- 啓動 xineted 並設置開機自啓 # systemctl daemon-reload # systemctl enable xinetd # systemctl start xinetd
完成安裝
創建數據庫集羣
# pcs resource create galera-cluster ocf:heartbeat:galera enable_creation=true wsrep_cluster_address="gcomm://controller01,controller02,controller03" additional_parameters='--open-files-limit=16384' enable_creation=true meta master-max=3 ordered=true op promote timeout=300s on-fail=block --master
設置資源依賴
# pcs constraint order start haproxy-clone then galera-cluster-master
驗證 mariadb-galera 集羣
查看 pacemaker 資源
# pcs resource …… Master/Slave Set: galera-cluster-master [galera-cluster] Masters: [ controller01 controller02 controller03 ]
查看集羣狀態
MariaDB [(none)]> SHOW STATUS like 'wsrep_cluster_%'; +--------------------------+--------------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------------+ | wsrep_cluster_conf_id | 3 | | wsrep_cluster_size | 3 | | wsrep_cluster_state_uuid | 83d58f96-e6e3-11e8-82ab-87f7bf579cc6 | | wsrep_cluster_status | Primary | +--------------------------+--------------------------------------+
wsrep_cluster_size 爲 3 集羣成功創建。