構建Gelera集羣

構建Gelera集羣

搭建 galera 集羣環境 ############################

前提條件: ==================================

建議 搭建 管理跳板機, 接下來的 操作,能夠 利用 批量 管理腳本 來執行

集羣中的節點, 必須相互能解析 彼此 的主機名 (/etc/hosts 文件一致,相互解析)
集羣中的所有節點,時鐘必須一致。

阿里雲同步時間:ntpdate ntp1.aliyun.com
在此使用了自動化運維管理

1、 畫好架構圖,確定參數的主機數量
gelera架構圖
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-  自動拷貝 全量 備份 ,並 自動 建立  同步關係 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章