7 Temmuz 2015 Salı

MariaDB Galera Cluster Kurulumu


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

  • gerekli paketleri indirilmeli ve kurulmak. Önceden belirtilmiş.
        
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
  • Her üç node'da IP'leri ayarlamalı sonra ping ile test edilmeli. vi /etc/hosts'da:
           127.0.0.1 localhost ...
           ::1 localhost ….

            ip1 hostname1
            ip2 hostname2

  • Setenforce 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

  • Ubuntu olmayan makinelerede repositoy oluşturma işlemi: 
     vi /etc/yum.repos.d/mariadb.repo


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'


  • Sonrasında tüm cluster node'larda Mariadb ve galera yazılım paketlerini tüm node'larda yüklenir.
     
    yum install MariaDB-Galera-server MariaDB-client rsync galera

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_secure_installation ile mysql root passport'u ayarla.
  • Veritabanına giriniz ve bir kullanıcı ayarlayınız. Bu kullanıcı tüm node'lar ile iletişime izinli kullanıcı olacak.


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


  • mysql -u cluster_user -p ile giriş yap. show database ile veritabanına bağlantıyı test et.
  • 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
  • /etc/mysql/conf.d/mariadb.cnf dosyasında gerekli değişiklikleri yapınız.
[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. 

  • Tüm node'larda Servisleri durdurun. sudo service mysql stop
  • cluster'ın ilk node'u çalıştırın. sudo service mysql start --wsrep-new-cluster … Sonra diğer cluster node'larında da çalıştır service mysql start ile.
  • Sonra cluster yapısını kontrol edecez. Mysql girişi yap
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ğ

Hiç yorum yok:

Yorum Gönder