Galera集群部署


MariaDB Galera Cluster 介紹

Galera介紹

MariaDB集群是MariaDB同步多主機集群。它僅支持XtraDB/InnoDB存儲引擎,經測試可以創建myisam引擎表,但是插入數據后,不能同步。
技術:
    Galera集群的復制功能基於Galeralibrary實現,為了讓MySQL與Galera library通訊,特別針對MySQL開發了wsrep API。Galera插件保證集群同步數據,保持數據的一致性,靠的就是可認證的復制當客戶端發出一個commit的指令,在事務被提交之前,所有對數據庫的更改都會被write-set收集起來,並且將 write-set 紀錄的內容發送給其他節點。write-set 將在每個節點進行認證測試,測試結果決定着節點是否應用write-set更改數據。如果認證測試失敗,節點將丟棄 write-set ;如果認證測試成功,則事務提交。
 
mariadb參數
https://mariadb.com/kb/en/mariadb/

主要功能

1.同步復制
2.真正的multi-master,即所有節點可以同時讀寫數據庫
3.自動的節點成員控制,失效節點自動被清除
4.新節點加入數據自動復制
5.真正的並行復制,行級
6.用戶可以直接連接集群,使用感受上與MySQL完全一致

優勢

1.因為是多主,所以不存在Slavelag(延遲)
2.不存在丟失事務的情況
3.同時具有讀和寫的擴展能力
4.更小的客戶端延遲
5.節點間數據是同步的,而Master/Slave模式是異步的,不同slave上的binlog可能是不同的

方案總覽

1.nginx作為MariaDB Galera Cluster的前端
2.2台nginx用keepalived避免單點故障
3.Galera的SST采用Percona提供的XtraBackup(防止鎖表,非阻塞)

集群部署

節點准備

安裝集群至少需要3個節點,以防止腦裂,安裝前清除以前所有mysql相關包

    172.20.100.119 db01  
    172.20.100.109 db02
    172.20.100.120 db03

各節點配置yum源 三台主機操作

[root@172-19-11-192 yum.repos.d]# cat mariadb.repo
[mariadb-main]
name = MariaDB Server
baseurl = https://downloads.mariadb.com/MariaDB/mariadb-10.2/yum/rhel/$releasever/$basearch
#gpgkey = file:///etc/pki/rpm-gpg/MariaDB-Server-GPG-KEY
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 0
enabled = 1

安裝mariadb 三台主機操作

yum -y install mariadb-server galera xtrabackup socat perl-Time-HiRes perl-DBD-MySQL MariaDB-backup 

創建數據目錄並授權 三台主機操作

 mkdir /data/3306
 chown mysql.mysql /data/3306

修改啟動文件中數據存儲目錄三台主機操作

cat /etc/init.d/mysql
basedir=
datadir=/data/3306

配置文件 db01初始化使用,其他機器使用時需配置[galera]

注意binlog配置時需要創建對應的目錄,否則會報錯
[root@172-20-100-119 my.cnf.d]# egrep -v "^$|^#" server.cnf
[client]
user            = root
port            = 3306
[server]
[mysqld]
character-set-server=utf8mb4
log_warnings = 0
log-error=/var/log/mariadb/mariadb.err          #error 日志位置
socket=/var/lib/mysql/mysql.sock
basedir=/usr
datadir=/data/3306
user    = mysql
port    = 3306
max_connections=2000                            #最大連接(用戶)數。每個連接MySQL的用戶均算作一個連接
max_connect_errors=1000                         #最大失敗連接限制
interactive_timeout=600                         #服務器關閉交互式連接前等待活動的秒數
wait_timeout=28800                               #服務器關閉非交互連接之前等待活動的秒數
net_read_timeout=60                             #連接繁忙階段(query)起作用
net_write_timeout=3600                          #連接繁忙階段(query)起作用
max_allowed_packet = 1024M                      #通信緩沖大小
skip-external-locking                           #跳過外部鎖定
back_log=3000                                   #暫存的連接數量
skip-name-resolve                               #關閉mysql的dns反查功能
query_cache_type=1                              #查詢緩存  (0 = off、1 = on、2 = demand)
query_cache_limit = 1M                          #指定單個查詢能夠使用的緩沖區大小,缺省為1M。
query_cache_size = 64M                          #查詢使用緩存空間
table_open_cache = 1024                         #table高速緩存的數量
thread_cache_size = 120                         #重新利用保存在緩存中線程的數量
key_buffer_size = 8M                           #設置索引塊緩存大小
sort_buffer_size = 2M                          #每個connection(session)第一次需要使用這個buffer的時候,一次性分配設置的內存
read_buffer_size = 1M                           #順序讀取數據緩沖區使用內存
read_rnd_buffer_size = 2M                      #隨機讀取數據緩沖區使用內存
join_buffer_size = 4M                           #Join操作使用內存
bulk_insert_buffer_size = 4M                   #批量插入數據緩存大小
wsrep_sync_wait = 1
innodb_lock_wait_timeout=10
innodb_flush_method=O_DIRECT                    #innodb會使用O_SYNC方式打開和刷寫redo log,使用fsync()刷寫數據文件
innodb_file_per_table=1
innodb_fast_shutdown=0
innodb_buffer_pool_instances = 4
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_rollback_on_timeout = on
innodb_thread_concurrency=0
innodb_io_capacity=800
innodb_purge_threads=1
innodb_open_files=102400
innodb_read_io_threads = 8
innodb_write_io_threads = 12
innodb_stats_on_metadata = 0
thread_handling=pool-of-threads
thread_pool_oversubscribe=30
thread_pool_size=64
thread_pool_idle_timeout=7200
thread_pool_max_threads=2000
performance_schema=0                            #收集數據庫服務器性能參數
lower_case_table_names = 1                      #將在創建與查找時將所有的表名自動轉換為小寫字符
max_heap_table_size = 512M                      #這個變量定義了用戶可以創建的內存表(memory table)的大小.這個值用來計算內存表的最大行數值。
transaction-isolation=READ-COMMITTED
slow_query_log                                  #慢查詢記錄日志
long_query_time = 5                             #慢查詢記錄時間  2秒
slow_query_log_file=/var/log/mariadb/slow_query.log             #慢查詢日志路徑
log_bin=/data/3306/binlog/mysql-bin
log-bin-index = /data/3306/binlog/mysql-bin.index
expire_logs_days = 5
[embedded]
[mariadb]
[mariadb-10.1]
[mysqldump]
quick
max_allowed_packet = 1024M

初始化數據庫 db01機器操作

 mysql_install_db --user=mysql --datadir=/data/3306/

啟動數據庫 db01機器操作

 systemctl start mysql

安全配置、創建root密碼,刪除test庫等: 一台機器操作

mysql_secure_installation

如果失敗,請登錄mysql手動刪除 配置

創建集群連接用戶的密碼 一台機器操作

grant all on *.* to dbcluster@'%' identified by 'mysql123';

關閉數據庫

systemctl stop mysql

修改配置文件 開啟galera db01(首台)配置

[galera]
wsrep_on=ON                                     #鏈接已開啟
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://"
wsrep_node_name=172.20.100.119
wsrep_node_address=172.20.100.119
binlog_format=row                               ##binlog 格式 分別為 row=行格式 丶 mixed=混合格式 丶 STATEMENT=SQL語句復制模式
wsrep_slave_threads=10
wsrep_sst_method=mariabackup
wsrep_sst_auth=dbcluster:mysql123
innodb_flush_log_at_trx_commit=2
innodb_buffer_pool_size=2G                      ##專用mysql服務器設置的大小: 操作系統內存的70%-80%最佳。
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

啟動節點 db01操作

/etc/init.d/mysql start --wsrep-new-cluster

登陸檢查 db01操作

MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 0     |
+--------------------+-------+
1 row in set (0.01 sec)

配置其他節點基本信息(db02 、db03)

1、修改啟動文件的數據目錄
vim /etc/init.d/mysql
basedir=
datadir=/data/3306
2、創建對應的數據目錄、並授權
mkdir /data/3306 
mkdir /data/binlog 
chown mysql.mysql /data/3306  /data/binlog  

修改配置文件 (db02 、db03)

[galera]
wsrep_on=ON                                     #鏈接已開啟
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://172.20.100.119,172.20.100.109,172.20.100.120"
wsrep_node_name=172-20-100-120
wsrep_node_address=172.20.100.120
binlog_format=row                               ##binlog 格式 分別為 row=行格式 丶 mixed=混合格式 丶 STATEMENT=SQL語句復制模式
wsrep_slave_threads=10
wsrep_sst_method=mariabackup
wsrep_sst_auth=dbcluster:mysql123
innodb_flush_log_at_trx_commit=2
innodb_buffer_pool_size=2G                      ##專用mysql服務器設置的大小: 操作系統內存的70%-80%最佳。
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

啟動數據庫 (db02 、db03)

systemctl start mysql

檢查 (db02 、db03)

SHOW STATUS LIKE 'wsrep_cluster_size';
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+
1 row in set (0.01 sec)

至此galera集群安裝完成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM