DBA yolunda ilerlerken karşıma yeni bir görev geldi. MariaDB cluster kurulumu! Bunun içi Galera Cluster kurulumu yapmam gerekti. Peki nedir Galera Cluster?
MariaDB Galera Cluster; MariaDB için senkronizasyon olarak çalışan birden fazla node yapılı bir cluster tasarımıdır. Sadece Linux sistemlerinde çalışmaktadır. XtraDB ve InnoDB depolama sistemlerini desteklemektedir. Myisam için; wsrep_replicate_myisam özelliğini araştırınız.
Özellikleri;
- Senkron çoğaltma
- Active-active çok yapılı topoloji
- Herhangi bir cluster node'una okuma ve yazma
- Otomatik olarak cluster üyeliğine eklenim ve iptal olan node'lar otomatik olarak cluster yapısından çıkartılır. node ekleneceği zaman kolayca otomatik olarak cluster sisteme eklenebilir.
- satır seviyesinde paralel replikasyon
- Direct client connections, doğal MySQL görünüm
Yararları;
- Lag bağımı yok
- Transaction kaybı yok
- Read & write aynı anda olabilme özelliği
- Küçük seviyede istemci gecikmeleri
Galera
Cluster için Gerekli Sistem Özellikleri
Swap
Alanı: Galera cluster ile normal bir MariaDb Server için gerekli hafızadan az harcar.
Node
eklemek için;
$ mysqld --wsrep_cluster_address=gcomm://192.168.0.1 # DNS names work as well
192.168.0.1
birinci node'un adresi. Burada ikinci node'a yazarak ilk node'a
bağlanıyoruz.
Cluster
yeniden başlatmak için;
gcomm://<node1
address>,<node2 address>,...?pc.wait_prim=no
gcomm
default olarak kullanılmaktadır. Bir ayrı özellik ise; dummy. Bu
boş-test cluster için kullanılmaktadır..
MariaDB
Galera Cluster kurulumu
|
sudo apt-get install python-software-properties
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
|
Tüm
node'larda Mysql
server var ise silinmelidir.
yum
erase mysql-server mysql mysql-devel
sudo
apt-get remove --purge mysql-server mysql-client mysql-common
rm
-rf /var/lib/mysql
127.0.0.1
localhost ...
::1
localhost ….
ip1
hostname1
ip2
hostname2
S
etenforce
0 ile Selinux deactivite ediniz. Iptables kapat firewall kapatınız.
Ubuntu'da
firewall kapatma
You
can save existing firewall rules as follows:
$
sudo iptables-save > firewall.rules
Finally,
type the following commands to stop firewall:
$
sudo iptables -X
$ sudo iptables -t nat -F
$ sudo iptables -t
nat -X
$ sudo iptables -t mangle -F
$ sudo iptables -t mangle
-X
$ sudo iptables -P INPUT ACCEPT
$ sudo iptables -P FORWARD
ACCEPT
$ sudo iptables -P OUTPUT ACCEPT
ufw
kapat
$
sudo ufw disable
64
bit'te
[mariadb]
name
= MariaDB
gpgcheck=1
32
bit'te
[mariadb]
name
= MariaDB
gpgcheck=1
UBUNTU
İÇİN BU İŞLEM YERİNE
sudo add-apt-repository 'deb http://mirror3.layerjet.com/mariadb/repo/5.5/ubuntu trusty main'
UBUNTU
İÇİN BU İŞLEM YERİNE
|
sudo apt-get update && sudo apt-get install -y rsync galera mariadb-galera-server
|
Ubuntu'da eğer Galera Cluster version
10.0.20 kurulcaksa galera yazılan yerler galera-3 olmalı. Ve repository'de 5.5 yazan yer 10.0 olmalıdır.
mysql
-u root -p
DELETE
FROM mysql.user WHERE user='';
GRANT
ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'dbpass';
dbpass:db parolanız
GRANT
USAGE ON *.* to cluster_user@'%' IDENTIFIED BY 'securepass';
securepass:şifreniz
GRANT
ALL PRIVILEGES ON *.* TO cluster_user@'%';
FLUSH
PRIVILEGES;
quit
Ubuntu olan sistemler için
UBUNTU
İÇİN BU İŞLEM YERİNE
kısmına bakınız. Ubuntu olmayan sistemlerde;
tüm cluster'da
vi
/etc/my.cnf.d/server.cnf
da [mariadb-10.0] dizininin alt kısmına bu bilgileri gir.
wsrep_node_addres=
node sisteminin IP adresi ve
wsrep_cluster_address=”gcomm://node1IPsi,node2IPsi,node3IPsi”
olmalı.
wsrep_node_name=nodeadı olmalıdır.
[mariadb-10.0]
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=100M
innodb_file_per_table
innodb_flush_log_at_trx_commit=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=”gcomm://node1IPsi,node2IPsi,node3IPsi”
wsrep_cluster_name='node'
wsrep_node_adress='nodeadress'
#wsrep_sst_method=xtrabackup
wsrep_sst_method=rsync
wsrept_sst_auth=cluster_user:securepass
tüm
cluster'lara aynı şekilde uygulayınız.
UBUNTU
İÇİN BU İŞLEM YERİNE
[mysqld]
#mysql settings
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0
#galera settings
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="koha_wsrep_cluster"
wsrep_cluster_address="gcomm://node1IPsi,node2IPsi"
wsrep_sst_method=rsync
Bu işlemi her cluster node'una uygulayınız.
mysql
-u root -p
mariadb> show status like 'wsrep%'”
mariadb> 'SELECT VARIABLE_VALUE as "cluster size"
1> FROM INFORMATION_SCHEMA.GLOBAL_STATUS
2> WHERE VARIABLE_NAME="wsrep_cluster_size"'
mariadb> show variables like 'wsrep%'\G dedikten sonra wsrep_cluster_name ve wsrep_cluster_address değerlerini kontrol edebilirsiniz.
İkinci
node'u bağlamak için;
node2# service mysql start
[ ok ] Starting MariaDB database server: mysqld . . . . . . . . . ..
[info] Checking for corrupt, not cleanly closed and upgrade needing tables..
node1:/home/debian# ERROR 1045 (28000):
Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)
Bu hata es geçilebilir.
Sonraki node'ları bağladıktan sonra show status like 'wsrep%' ile wsrep_cluster_size'a
bakılmalıdır. Değeri kaç node varsa o sayı olmalıdır. Böylece 2-3 veya daha
fazla node'un bağlandığı görülür.
Şimdi
bir veritabanı oluşturup test yapalım.
Show
databases
ile hangi veritabanları var onları kontrol ediniz.
Birinci
node'da
create
database testdatabase;
dedikten sonra
show
database
ile
veritabanlarına bakınız. Ikinci node'da da show database ile veritabanlarına bakınız. Aynı şekilde varsa üçüncü node'da
da bakınız. Veritabanı diğer node'larda da oluşmuş ise doğru bağlantı!
create
table emp(number int, name varchar2(10));
ile bir node'da tablo oluşturulur. Sonra bu tablo diğer node'larda bu tablo oluştu mu kontrol ediniz.
Herhangi
bir node'da
drop
database testdatabase
dediğinde diğer node'Larda da o database yok olacaktır.
Yazı bitti. Saygılar sevgiler...
Ahmet Melih Başbuğ