Chuyển tới nội dung

Mariadb Galera Cluster

1. Install Mariadb

Install dependency
apt-get install -y build-essential libgcrypt11-dev zlib1g-dev libxml2-dev libssl-dev  libncurses-dev git wget cmake gcc make tar libgd-dev libpcre3-dev bison scons libboost-dev libboost-program-options-dev openssl dh-autoreconf libssl-dev

Download mariadb
https://vn-mirrors.vhost.vn/mariadb/mariadb-11.8.2/source/mariadb-11.8.2.tar.gz

Build Mariadb

tar xzvf mariadb-11.8.2.tar.gz
cd mariadb-11.8.2/BUILD

cmake .. \
-DCMAKE_BUILD_TYPE=Release   \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_ARIA_STORAGE_ENGINE=1 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATEDX_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_EMBEDDED_SERVER=ON \
-DTOKUDB_OK=0 \
-DCMAKE_INSTALL_PREFIX=/opt/mariadb \
-DMYSQL_DATADIR=/opt/mariadb/data \
-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock  

make -j 8
make install
groupadd -o -r mysql
useradd -M -g mysql -o -r -d /opt/mariadb/data -s /bin/false -c “MariaDB” -u mysql

cd /opt/mariadb
ln -s lib lib64

cd /opt/mariadb/support-files
cp my-huge.cnf /opt/mariadb/my.cnf

cd /opt/mariadb/
scripts/mysql_install_db --basedir=/opt/mariadb --datadir=/opt/mariadb/data --defaults-file=/opt/mariadb/my.cnf --user=mysql

cp /opt/mariadb/support-files/mysql.server /etc/init.d/mysqld
echo /opt/mariadb/lib > /etc/ld.so.conf.d/mysql.conf
update-rc.d mysqld defaults
update-rc.d mysqld enable
update-rc.d -f mysqld  remove

#Restart MySQL 
/etc/init.d/mysqld restart
mysqladmin -u root password 'abc@123'
/opt/mariadb/bin/mysql_secure_installation

2. Install galera

wget https://archive.mariadb.org//mariadb-11.8.2/galera-26.4.22/src/galera-26.4.22.tar.gz
tar xvfz galera-26.4.22.tar.gz
apt-get install check cmake libasio-dev libboost-dev libboost-program-options-dev libssl-dev
cd galera-26.4.22
cmake .
make

cp libgalera_smm.so /usr/lib64/galera

3. Install scons

wget http://prdownloads.sourceforge.net/scons/scons-2.5.0.tar.gz
tar xvfz scons-2.5.0.tar.gz
cd scons-2.5.0/
python setup.py install --prefix=/opt/scons

4. Cấu hình galera

Thêm cấu hình vào file my.cnf trên cả 3 node

Node 01

[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://10.10.1.9,10.10.1.10,10.10.1.11'
wsrep_cluster_name='galera'
wsrep_node_address='10.10.1.9'
wsrep_node_name='galera1'
wsrep_sst_method=rsync

binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

Node 02

[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://10.10.1.9,10.10.1.10,10.10.1.11'
wsrep_cluster_name='galera'
wsrep_node_address='10.10.1.10'
wsrep_node_name='galera2'
wsrep_sst_method=rsync

binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

Node 03

[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://10.10.1.9,10.10.1.10,10.10.1.11'
wsrep_cluster_name='galera'
wsrep_node_address='10.10.1.11'
wsrep_node_name='galera2'
wsrep_sst_method=rsync

binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

Start the Cluster
sudo service mysql start --wsrep-new-cluster

Check Cluster
mysql -u root -p -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'
+--------------+
| cluster size |
+--------------+
| 3            |
+--------------+

Note
Cần phải có ít nhất 3 node để đảm bảo cho Cluster chạy được. (Với các cụm cluster >=50 node die thì Cluster sẽ die)

Khi join 1 node mơi vào Cluster thì dữ liệu sẽ đưọc tự động sync. Có nhiều cơ chế sync khác nhau như rsync, mysqldump, xtrabackup, xtrabackup-v2

5. Cài đặt và cấu hình haproxy, keepalived
Cấu hình haproxy.cnf

frontend haproxy1 # change on 2nd HAProxy
bind *:3306
   mode tcp
   default_backend galera-cluster

backend galera-cluster
   balance roundrobin
   server nodeA 10.10.1.49:3306 maxconn 151 check
   server nodeB 10.10.1.50:3306 maxconn 151 check
   server nodeC 10.10.1.51:3306 maxconn 151 check

Cấu hình keepalived.conf

global_defs 
{  
    notification_email {    
       [email protected]    
       root@localhost  
    }# Change email from on lb2:  
    notification_email_from lb1@haproxy1  
    router_id HAPROXY
}
vrrp_script chk_haproxy 
{  
     script   "killall -0 haproxy"  
     interval 2  
     weight   2
}
vrrp_instance GALERA_VIP {
     interface eth0 #Interface gan IP virtualna
     virtual_router_id 42
     #Higher priority on other node
     priority 101 #(đặt 101 cho cấu hình trên haproxy-01, đặt 102 cho cấu hình trên máy haproxy-02)
     advert_int 1
     # notify "/usr/local/bin/VRRP-notification.sh" 
     virtual_ipaddress { 
        10.10.1.60/32 dev eth0 #Virtual IP address 
    } 
    track_script { 
    chk_haproxy 
} 
authentication { 
   auth_type PASS
   auth_pass secret 
}
} 

Cấu hình kernel
echo net.ipv4.ip_nolocal_bind=1 >> /etc/sysctl.conf

Start haproxy and keepalived
systemctl start haproxy.service
systemctl start keepalived.service