Centos 7 - MariaDB with Galera Cluster
環境說明:
Host | Interface(enp0s3) |
galera1 | 192.168.100.6 |
galera2 | 192.168.100.7 |
galera3 | 192.168.100.8 |
首先,先修改三台host的hostname分別為galera1、galera2、galera3
$ sudo vim /etc/hostname
galera1
|
接著修改三台的hosts,把三台host都新增至hosts裡
$ sudo vim /etc/hosts
192.168.100.6 galera1
192.168.100.7 galera2
192.168.100.8 galera3
|
修改selinux,修改以下項目,將 enforcing 修改成 permissive
$ sudo vim /etc/selinux/config
SELinux=permissive |
更新repository,並重新啟動
$ sudo yum update -y && reboot
|
安裝mariadb跟galera,我們這邊是安裝mariadb 10的版本,所以須先加入repository
$ sudo vim /etc/yum.repos.d/MariaDB.repo
# 新增以下內容:
[mariadb]
name=MariaDB
baseurl=http://yum.mariadb.org/10.0/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
$ sudo yum install MariaDB-Galera-server MariaDB-client galera
|
啟動mysql service,並設定使用者權限
$ sudo systemctl start mysql.service
$ mysql_secure_installation $ sudo mysql_secure_installation Enter current password for root (enter for none): #第一次設定沒有密碼,所以直接按 Enter 即可 Set root password? [Y/n] y #是否設定新的 root 密碼? Remove anonymous users? [Y/n] y #是否移除匿名使用者的資料? Disallow root login remotely? [Y/n] y #設定是否讓 root 只能從本機登入? Remove test database and access to it? [Y/n] y #是否移除測試資料庫? Reload privilege tables now? [Y/n] y #是否要重新載入tables的權限資訊? # 建立一個cluster的使用者並設定權限 $ mysql -u root -ppassword -e "GRANT ALL PRIVILEGES ON *.* TO 'cluster'@'localhost' IDENTIFIED BY 'password';" $ mysql -u root -ppassword -e "GRANT ALL PRIVILEGES ON *.* TO 'cluster'@'%' IDENTIFIED BY 'password';" |
在iptables上設定galera所需要port
# MySQL 客戶端連線使用 3306 port
$ sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent # Galera cluster node之間資料複製使用 4567 port
$ sudo firewall-cmd --zone=public --add-port=4567/tcp --permanent
# 同步增量資料使用 4568 port
$ sudo firewall-cmd --zone=public --add-port=4568/tcp --permanent
# 第一次加入 Galera cluster 後完整同步資料使用 4444 port
$ sudo firewall-cmd --zone=public --add-port=4444/tcp --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-all
public (default, active)
interfaces: enp0s3
sources:
services: dhcpv6-client ssh
ports: 3306/tcp 4567/tcp 4568/tcp 4444/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
===============================分隔線=========================== sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent sudo firewall-cmd --zone=public --add-port=4567/tcp --permanent sudo firewall-cmd --zone=public --add-port=4568/tcp --permanent sudo firewall-cmd --zone=public --add-port=4444/tcp --permanent sudo firewall-cmd --reload |
設定mariadb與galera
$ sudo systemctl stop mysql.service
$ sudo mkdir -p /var/log/mysql $ vim /etc/my.cnf.d/galera.cnf [mysqld] # 因為 Galera 使用 RBR format 建立 writesets, # 因此必須設定為 row-level binlog_format=ROW # Galera cluster 僅能使用 InnoDB default-storage-engine=innodb # auto-increment 必須設定為 interleaved lock mode(2), # 設定其他 mode(0 or 1) 可能會在 insert 資料的時候造成 deadlock innodb_autoinc_lock_mode=2 innodb_locks_unsafe_for_binlog=1 # 關閉 query cache 功能 query_cache_size=0 query_cache_type=0 bind-address=0.0.0.0 datadir=/var/lib/mysql # 每個 log file 所儲存的 size 大小,最大儲存 size 不超過 100MB innodb_log_file_size=100MB innodb_file_per_table=1 innodb_flush_log_at_trx_commit=2 # 預設為 128MB,保留 5% 給 Galera cluster 使用(若設定太大, # 會導致 mysql 服務無法法啟動) innodb_buffer_pool_size=122MB # 為資料庫最大連線數量,可依最大連線數量調整 max_connections=10000 innodb_buffer_pool_instances=8 innodb_log_buffer_size=8MB # 為有多少的 thread 數可以被同時執行,可依 CPU 核心數量設定 thread_pool_size=24 # 為能允許最多的 thread 數量,當 thread 超過這個數量, # 就不會產生新的 thread thread_pool_max_threads=65536 # 可以被重複使用的 thread server cache 數量。 # 如果數值還沒達到上限,當一個 client 結束連線, # 這個 thread 會被放入 cache,之後同樣的 thread 就可以被重複使用 thread_cache_size=4096 thread_handling=pool-of-threads wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_name='galera_cluster' # 請輸入galera1-3的ip # ex:gcomm://192.168.100.6,192.168.100.7,192.168.100.8 wsrep_cluster_address='gcomm://galera1_ip,galera2_ip,galera3_ip' # 分別輸入每一台的ip wsrep_node_address='galera1_ip' # 分別輸入每一台的hostname wsrep_node_name='galera1' wsrep_sst_method=rsync # 輸入剛剛所新增的cluster使用者以及密碼 wsrep_sst_auth=cluster:password log_error=/var/log/mysql/mysql_error.log ===============================分隔線=========================== [mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 innodb_locks_unsafe_for_binlog=1 query_cache_size=0 query_cache_type=0 bind-address=0.0.0.0 datadir=/var/lib/mysql innodb_log_file_size=100MB innodb_file_per_table=1 innodb_flush_log_at_trx_commit=2 innodb_buffer_pool_size=122MB max_connections=10000 innodb_buffer_pool_instances=8 innodb_log_buffer_size=8MB thread_pool_size=24 thread_pool_max_threads=65536 thread_cache_size=4096 thread_handling=pool-of-threads wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_name='galera_cluster' wsrep_cluster_address='gcomm://192.168.100.6,192.168.100.7,192.168.100.8' wsrep_node_address='192.168.100.8' wsrep_node_name='galera3' wsrep_sst_method=rsync wsrep_sst_auth=cluster:password log_error=/var/log/mysql/mysql_error.log |
啟動galera,並驗證是否正常
# 首先,先在galera1啟動,輸入以下cmd
$ sudo /etc/init.d/mysql start --wsrep-new-cluster # 接著在其他兩台輸入 $ sudo systemctl start mysql.service # 檢查 galera1, galera2, galera3 的 Galera 服務是否啟動 $ sudo mysql -uroot -p -e "show status like 'wsrep%'" +------------------------------+----------------------------------------------------------------+ | Variable_name | Value | +------------------------------+----------------------------------------------------------------+ | wsrep_local_state_comment | Synced | | wsrep_incoming_addresses | 192.168.100.6:3306,192.168.100.7:3306,192.168.100.8:3306 | | wsrep_cluster_size | 3 | | wsrep_cluster_status | Primary | | wsrep_connected | ON | | wsrep_ready | ON | | ........... | .............. | +------------------------------+----------------------------------------------------------------+ |
==Note==
如果今天想新增或是刪除galera的機器的話,勢必要到每一台galera機器上修改conf然後重啟。,這會比較耗時,
所以可以直接利用mysql cmd去做設定
# 先顯示目前可連線的機器ip
$ mysql -e "SHOW VARIABLES LIKE 'wsrep_cluster_address';" +-----------------------+-------------------------------------+ | Variable_name | Value | +-----------------------+-------------------------------------+ | wsrep_cluster_address | gcomm://192.168.100.6,192.168.100.7,192.168.100.8| +-----------------------+-------------------------------------+ # 在輸入以下cmd去新增或是刪除可連線的機器 $ mysql -uroot -ppassword -e "SET GLOBAL wsrep_cluster_address='gcomm://192.168.100.6,192.168.100.7';" |
另外需要注意的是,由於每一台galera機器都互相設定可連線的ip,因此如果要關閉全部 galera機器的話,請務必v修改conf將第一台重新設定 gcomm:// 為空值。
參考來源:
Galera Cluster for MySQL Multi-master Replication[Cluster] 在 Ubuntu 上安裝 MariaDB Galera Cluster
留言
張貼留言