構建Gelera集羣
搭建 galera 集羣環境 ############################
前提條件: ==================================
建議 搭建 管理跳板機, 接下來的 操作,能夠 利用 批量 管理腳本 來執行
集羣中的節點, 必須相互能解析 彼此 的主機名 (/etc/hosts 文件一致,相互解析)
集羣中的所有節點,時鐘必須一致。
阿里雲同步時間:ntpdate ntp1.aliyun.com
在此使用了自動化運維管理
1、 畫好架構圖,確定參數的主機數量
2、 停止所有的 監控腳本,停止 所有主機上的 編譯版本 的 mysql 的服務, 確定 21上擁有原始數據備份。
其餘的 25 26 , 刪除他們的所有數據,確保 他們是空庫。
此時: 21 上有數據, 25 26 都是空庫狀態。
3、確認所有節點的 編譯版的mysql 不會 在 開機 自啓動。 rc.local 檢查一下。
4、所有 主機 統一執行
## 庫文件, 都是 rpm安裝的話,這個庫會衝突。
[root@mysql-21 ~/gelera]# yum remove mariadb-libs
5、 安裝rpm包,使用本地源即可 ============
將 gelera 相關的 rpm 包,發送 至所有主機, 這裏 我們存放在 /root/gelera 目錄下
[root@mysql-21 ~/gelera]#yum install rsync
[root@mysql-21 ~/gelera]#rpm -ivh /root/gelera/mysql-wsrep-common-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-21 ~/gelera]#rpm -ivh /root/gelera/mysql-wsrep-libs-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-21 ~/gelera]#rpm -ivh /root/gelera/mysql-wsrep-client-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-21 ~/gelera]#yum install -y /root/gelera/mysql-wsrep-server-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-21 ~/gelera]# yum -y install /root/gelera/galera-3-25.3.23-2.el7.x86_64.rpm
6、 修改 配置文件 =======================
原先編譯版的 配置文件, 被替換掉,重新命名爲 /etc/my.cnf.rpmsave
還原回來
[root@mysql-21 ~/gelera]# mv /etc/my.cnf.rpmsave /etc/my.cnf
使用之前的 配置文件,做出以下修改################
192.168.217.21
============================================================
[root@mysql-21 ~/gelera]# cat /etc/my.cnf
[client]
port=3306
socket=/tmp/mysql.sock
password=123123
[mysqld]
default_password_lifetime=30
character-set-server=utf8
collation-server=utf8_general_ci
default_storage_engine=InnoDB
max_connections=2000
#max_connect_errors=100
innodb_buffer_pool_size=800M
innodb_flush_log_at_trx_commit=2
innodb_file_per_table=ON
innodb_data_home_dir="/data/mysql"
innodb_data_file_path=ibdata1:12M:autoextend
innodb_log_buffer_size=16M
innodb_log_file_size=52428800
innodb_log_files_in_group=2
#innodb_log_group_home_dir="./"
transaction-isolation=REPEATABLE-READ
general_log=OFF
log_output=file
general_log_file=/data/mysql/general.log
slow_query_log=ON
slow_query_log_file=/data/mysql/slow.log
long_query_time=2.000000
log-bin=/bin-log/mysql-bin
**server-id=21** #主機名
max_binlog_size=1073741824
expire_logs_days=0
binlog_format=row
binlog_rows_query_log_events=OFF
#binlog-do-db=class
#relay-log=/bin-log/relay-log ##註釋掉所有中繼日誌內容
#relay-log-index=/bin-log/relay-log.index
#slave_net_timeout=10
#connect_timeout=20
#relay_log_info_repository=Table
#master_info_repository=Table
#relay_log_recovery=ON
#read_only=OFF
#sync_relay_log=10000
#sync_binlog=1
#relay_log_purge=0
#plugin-load=rpl_semi_sync_master=semisync_master.so ## 關閉 半同步複製機制,現在已經是完全同步複製。
#rpl_semi_sync_master_enabled=1
gtid-mode=on
enforce-gtid-consistency=ON
wsrep_on=on ## 新加入以下配置
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so ##寫集複製模塊
wsrep_cluster_name='cluster1' ##新建集羣的名稱,可以自行命名
wsrep_cluster_address=**'gcomm://'** ## 進入集羣時的,參考對象,如果是集羣發起人,這裏應該爲空。
wsrep_node_name=**'mysql-21'** ##本機主機名
wsrep_node_address='**192.168.10.21**' ## 本機IP地址
wsrep_sst_auth=uplooking:123123 ## 統一的數據庫 訪問的 賬號密碼
wsrep_sst_method=rsync ## 用於新加入的 節點,同步數據時,使用的工具。
skip-name-resolve
#skip-grant-tables
user=mysql
port=3306
#basedir=/usr/local/mysql57 ##註釋掉
datadir=/data/mysql
tmpdir=/tmp
socket=/tmp/mysql.sock
query_cache_size=128M
query_cache_type=OFF
query_cache_wlock_invalidate=OFF
log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
============================================================
7、在192.168.217.21 ( 集羣發起人 )上 啓動服務 =================
啓動數據庫:
systemctl start mysqld
### PXC/Galera Cluster集羣端口
如果能正常啓動,查看一下端口
[root@mysql-80 ~/gelera]# netstat -ntl
3306 數據庫對外提供服務的端口
4567 集羣節點間相互通信 (相互監聽健康狀況) 的端口
------------------------------------------------------------------------------------------------
4444 鏡像數據傳輸SST,集羣數據同步端口,全量同步,新節點加入時起作用
4568 增量數據同步IST,節點下線、重啓後使用該端口,增量同步數據。
8、登錄mysql,查看寫集複製的狀態
mysql> show status like “%wsrep%”;
看到以下信息,表明集羣已經開始運行,此時集羣只有一個節點。
查看顯示有以下這些參數則滿足
==========================================
| wsrep_local_state_comment | Synced
| wsrep_incoming_addresses | 192.168.217.21:3306,
| wsrep_connected | ON
| wsrep_ready
==========================================
至此,gelera 集羣的 第一臺 主機,(發起人)已經架構好了
給集羣加入新的節點 =======================
將192.168.217.25 加入當前集羣,確認該主機數據庫目錄是空庫。
等會會由集羣中的主機,自動執行 全量 備份 過來。
1、 安裝相關組件 ====================
將 gelera 相關的 rpm 包,發送 至所有主機, 這裏 我們存放在 /root/gelera 目錄下
[root@mysql-25 ~/gelera]#yum install rsync
[root@mysql-25 ~/gelera]#rpm -ivh /root/gelera/mysql-wsrep-common-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-25 ~/gelera]#rpm -ivh /root/gelera/mysql-wsrep-libs-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-25 ~/gelera]#rpm -ivh /root/gelera/mysql-wsrep-client-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-25 ~/gelera]#yum install -y /root/gelera/mysql-wsrep-server-5.7-5.7.21-25.14.el7.x86_64.rpm
[root@mysql-25 ~/gelera]# yum install /root/gelera/galera-3-25.3.23-2.el7.x86_64.rpm
2、 恢復 並修改 它的配置文件 ======================
192.168.217.25 :標記出 與 21 不同之處
============================================================
[root@mysql-25 ~/gelera]# cat /etc/my.cnf
[client]
port=3306
socket=/tmp/mysql.sock
password=123123
[mysqld]
default_password_lifetime=30
character-set-server=utf8
collation-server=utf8_general_ci
default_storage_engine=InnoDB
max_connections=2000
#max_connect_errors=100
innodb_buffer_pool_size=800M
innodb_flush_log_at_trx_commit=2
innodb_file_per_table=ON
innodb_data_home_dir="/data/mysql"
innodb_data_file_path=ibdata1:12M:autoextend
innodb_log_buffer_size=16M
innodb_log_file_size=52428800
innodb_log_files_in_group=2
#innodb_log_group_home_dir="./"
transaction-isolation=REPEATABLE-READ
general_log=OFF
log_output=file
general_log_file=/data/mysql/general.log
slow_query_log=ON
slow_query_log_file=/data/mysql/slow.log
long_query_time=2.000000
log-bin=/bin-log/mysql-bin
server-id=25
max_binlog_size=1073741824
expire_logs_days=0
binlog_format=row
binlog_rows_query_log_events=OFF
#binlog-do-db=class
#relay-log=/bin-log/relay-log ##註釋掉所有中繼日誌內容
#relay-log-index=/bin-log/relay-log.index
#slave_net_timeout=10
#connect_timeout=20
#relay_log_info_repository=Table
#master_info_repository=Table
#relay_log_recovery=ON
#read_only=OFF
#sync_relay_log=10000
#sync_binlog=1
#relay_log_purge=0
#plugin-load=rpl_semi_sync_master=semisync_master.so ## 關閉 半同步複製機制,現在已經是完全同步複製。
#rpl_semi_sync_master_enabled=1
gtid-mode=on
enforce-gtid-consistency=ON
wsrep_on=on
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
wsrep_cluster_name='cluster1'
wsrep_cluster_address='gcomm://192.168.217.21'
wsrep_node_name='mysql-25'
wsrep_node_address='192.168.217.25'
wsrep_sst_auth=uplooking:123123
wsrep_sst_method=rsync
skip-name-resolve
#skip-grant-tables
user=mysql
port=3306
#basedir=/usr/local/mysql57 ##註釋掉
datadir=/data/mysql
tmpdir=/tmp
socket=/tmp/mysql.sock
query_cache_size=128M
query_cache_type=OFF
query_cache_wlock_invalidate=OFF
log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
============================================================
保存,退出
3、 修改好配置後,開始啓動數據庫 ======================
啓動服務,
[root@mysql-25 /data/mysql]# systemctl start mysqld
成功後,觀察
1、3306 4567 端口
2、觀察 /data/mysql 下, 全量 數據是否已經拷貝
3、登錄mysql,查詢 學生表 數據是否同步
4、再次查看 mysql> show status like “%wsrep%”; 觀察集羣新成員是否加入。
如果沒有問題,則集羣已經 擴展 2 個節點 。
Galera 集羣搭建完成,進行一系列測試 :================================
由於galera同步複製在每個寫事務提交時都增加了 replicate trx 和 certification test 的開銷,因此性能遠遠低於 異步 MySQL實例
1、多點寫入功能: 分別向兩個節點執行 建庫,建表, 插入數據操作,驗證多點寫入,觀察數據是否同步。
2、下線其中一個節點 不能是發起人 節點 比如 192.168.217.25 下線,停止服務
當前數據 插入20條數據 插入10條數據
2286 2306 2316
剩餘節點繼續添加數據, 拉開距離。
此時離線數據庫重啓服務,重新上線 , 啓動服務即可, 觀察 是否能追上 其他人的數據。
3、 故意 讓 發起人節點 離線。 剩餘服務器繼續插入數據,拉開距離
如要讓 發起人 重新上線。
修改 發起人配置文件中的 wsrep_cluster_address='gcomm://192.168.217.25' ##再回來時,必須有一個以上的參考節點,用於 同步增量數據。
明確指示重新加入時,向誰同步數據,原先發起集羣時,該主機 此處 爲 “空 ”
4、擴展集羣,再次 加入一個全新的節點, 2個變 3 個。 步驟參見 上述第二個 流程
1-安裝各個組件 mysql-wsrep-* galera組件 rsync perconna xtrabackup
2-修改配置文件 特別注意 gcomm:// 填寫在線的某個節點,或者 某幾個節點。
3-依據配置文件的 路徑(數據庫的 還有 二進制 日誌 ),配相關權限
4- 不需要初始化 數據庫 , 直接啓動服務
5- 自動拷貝 全量 備份 ,並 自動 建立 同步關係