部署拓撲與軟體版本
| 節點 | IP | 主機名 |
| db01 | 192.168.50.10 | db01.mysql.com |
| db02 | 192.168.50.20 | db02.mysql.com |
| db03 | 192.168.50.30 | db03.mysql.com |
- MariaDB Galera 10.0.20
- Galera wsrep provider 3-25.3.10 (
libgalera_smm.so)
- Percona XtraBackup 2.2.8 (SST 同步)
- Socat 2.0.0 (Socket 傳輸)
一、系統層面強化
# 1. 移除 postfix、關閉防火牆/SELinux、配置 yum 源、更新系統
yum remove postfix
chkconfig iptables off; service iptables stop
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 配置阿里雲源並 yum update
# 2. /etc/hosts 互解
cat > /etc/hosts <<EOF
192.168.50.10 db01 db01.mysql.com
192.168.50.20 db02 db02.mysql.com
192.168.50.30 db03 db03.mysql.com
EOF
# 3. 安裝 lrzsz 便於檔案傳輸
yum install -y lrzsz
二、MariaDB Galera 編譯安裝
# 1. 安裝編譯依賴
yum -y install cmake gcc gcc-c++ autoconf automake zlib* libxml* \
ncurses ncurses-devel libtool libtool-ltdl-devel* make bison bison-devel \
openssl-devel libevent-devel libaio libaio-devel pam-devel boost boost-devel \
valgrind-devel libnl-devel popt-devel popt-static bzr
# 2. 建立使用者與資源限制
groupadd mysql; useradd -s /sbin/nologin -g mysql -M mysql
echo "mysql soft nproc 2047
mysql hard nproc 16384
mysql soft nofile 1024
mysql hard nofile 65536" >> /etc/security/limits.conf
# 3. 編譯參數(關鍵:-DWITH_WSREP=1)
tar xf mariadb-galera-10.0.20.tar.gz
cd mariadb-10.0.20
cmake \
-DCMAKE_INSTALL_PREFIX=/data/mysql \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_WSREP=1 \
-DWITH_INNODB_DISALLOW_WRITES=1 \
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_DATADIR=/data/mysql/data -DMYSQL_TCP_PORT=33306
make -j4 && make install
三、資料目錄初始化與基礎配置
mkdir -p /data/mysql/{innodb_data,data,tmp,mysql_logs/{binary_log,innodb_log,query_log,slow_query_log,error_log}}
chown -R mysql:mysql /data/mysql
# my.cnf 核心配置
cat > /data/mysql/my.cnf <<EOF
[mysqld]
basedir=/data/mysql
datadir=/data/mysql/data
socket=/data/mysql/mysql.sock
port=33306
user=mysql
server-id=1 # 每節點唯一
log-bin=mysql-bin
binlog_format=ROW
default-storage-engine=InnoDB
innodb_data_home_dir=/data/mysql/innodb_data
innodb_log_group_home_dir=/data/mysql/mysql_logs/innodb_log
tmpdir=/data/mysql/tmp
EOF
ln -sf /data/mysql/my.cnf /etc/my.cnf
# 初始化
cd /data/mysql/scripts
./mysql_install_db --defaults-file=/etc/my.cnf --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data
# 啟動並設定 root 密碼、遠程權限
/data/mysql/bin/mysqld_safe --datadir=/data/mysql/data &
mysql -uroot -e "SET PASSWORD = PASSWORD('pass01'); FLUSH PRIVILEGES;"
mysql -uroot -ppass01 -e "GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'pass01' WITH GRANT OPTION; FLUSH PRIVILEGES;"
# 環境變數
echo 'PATH=/data/mysql/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
ln -sf /data/mysql/bin/* /usr/bin/
四、Galera 專屬配置 (wsrep.cnf)
mkdir /etc/my.cnf.d
cp /soft/mariadb-10.0.20/support-files/wsrep.cnf /etc/my.cnf.d/
# 三節點分別修改以下參數:
# Node1 (db01)
wsrep_node_address=192.168.50.10
wsrep_node_name=db01
# Node2 (db02)
wsrep_node_address=192.168.50.20
wsrep_node_name=db02
# Node3 (db03)
wsrep_node_address=192.168.50.30
wsrep_node_name=db03
# 共同關鍵參數
wsrep_on=ON
wsrep_provider=/data/mysql/lib/plugin/libgalera_smm.so
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://192.168.50.10,192.168.50.20,192.168.50.30"
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=root:pass01
wsrep_slave_threads=4
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=2
query_cache_size=0; query_cache_type=0
innodb_locks_unsafe_for_binlog=1
echo '!includedir /etc/my.cnf.d/' >> /etc/my.cnf
五、SST 依賴工具安裝
# Socat
tar xf socat-2.0.0-b8.tar.gz; cd socat-2.0.0-b8; ./configure; make -j4; make install
ln -sf /usr/local/bin/socat /usr/sbin/
# XtraBackup (RPM 套件安裝最省事)
tar xf Percona-XtraBackup-2.2.11-r7956d1d-el6-x86_64-bundle.tar
yum localinstall -y percona-*.rpm
# 加入 PATH
echo 'PATH=/data/mysql/bin:/usr/local/bin/socat:$PATH' >> /etc/profile
source /etc/profile
六、叢集啟動與驗證
# 1. Node1 引導啟動(首次建立叢集)
/data/mysql/bin/mysqld_safe --datadir=/data/mysql/data --wsrep-cluster-address="gcomm://" &
# 2. Node2、Node3 正常啟動
/data/mysql/bin/mysqld_safe --datadir=/data/mysql/data &
# 3. 驗證叢集狀態
mysql -uroot -ppass01 -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
# 期望輸出 3
mysql -uroot -ppass01 -e "SHOW STATUS LIKE 'wsrep%';"
# 關鍵指標:wsrep_connected=ON, wsrep_ready=ON, wsrep_local_state_comment=Synced
七、常見問題排查
- 防火牆/安全組:需開放 3306 (SQL)、4567 (Galera 叢集)、4568 (IST)、4444 (SST)、9200 (SST 進度)。
- SELinux:必須關閉或配置正確策略。
- 時間同步:三節點 NTP 必須同步,否則 Galera 通訊異常。
- SST 失敗:檢查
/data/mysql/data/innobackup.backup.log、XtraBackup/Socat 版本相容性、wsrep_sst_auth 權限。