생계/MySQL2017. 11. 24. 15:45

MariaDB galera cluster 설치 centos


MariaDB 로 Replication 을 구축하는 것은 그다지 어렵지않다. 

쉽고 무로료 Active-standby 구조의 아키텍쳐를 사용할수 있는 것은 큰 장점이다. 

그렇지만, 완전 무중단일 수 없고, 부하 분산의 효과가 그닥 크지 않은 것은 

단점이다. 

MariaDB 는 galera package 를 통해서 cluster 를 구축할수 있다. 

이것은 Actvie-Active 구조의 아키텍쳐이며 (mysql 식으로 말하자면 Master-Master)

역시 무료이다. 


오라클의 RAC 와 비슷한 개념이지만 차이가 있다면, 오라클은 shared storage 이지만 mariadb cluster 는 서버가 각자 storage 를 가진다. 

복제가 모든 노드에서 가능하다고 생각하면 된다. 


MaraiDB 홈페이지에 가면 galera cluster 설치에 대한 내용이 있다.

하지만 내용이 상세하지 않아 내가 원하는 요건과 맞지 않으면 설치에 어려움이 있을수 있다.

 

이번 포스팅은 비교적 간단한 방식인 root 로 yum 으로 설치하는 방법이다.



CentOS, RedHat, Fedora 에서는 yum install 을 추천


1. MariaDB YUM repository ( 3개 노드 동일)

    vi /etc/yum.repos.d/MariaDB.repo


[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.1/centos7-amd64

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1


## 만약, 특정 버전의 mariadb 를 설치하고자 한다면 MariaDB.repo 를 

원하는 버전으로 수정하자. MariaDB-5.5.39 버전을 설치한다면 아래처럼.


[mariadb]

name = MariaDB-5.5.39

baseurl=https://downloads.mariadb.com/files/MariaDB/mariadb-5.5.39/yum/rhel6-amd64/

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1



2. Installing MariaDB with YUM ( 3개 노드 동일)


yum 으로 인스톨하는 것은 간단하다.

yum install MariaDB-server MariaDB-client


** mariadb 10.1 버전 부터는 Galera Cluster 가 MariaDB packages 에 기본 포함되어있다. 

configuration 을 했을때 기능이 활성화되고 그러기 전까지는 비활성화된 상태임. 

만약 MariaDB 10.0,  MariaDB 5.5. 버전이라면 위에 처럼 하지말고 아래처럼 하면 된다. 

yum install MariaDB-Galera-server MariaDB-client galera


내용 출처 : https://mariadb.com/kb/en/library/yum/


3. 데이터베이스 설치 ( 3개 노드 동일)


service mariadb start

mysql_secure_installation




4. Galera configuration


vi /etc/hosts

10.10.10.11 node1

10.10.10.12 node2

10.10.10.13 node3



[galera]

# Mandatory settings


wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address = "gcomm://"

binlog_format = row

default_storage_engine = InnoDB

innodb_autoinc_lock_mode = 2


** 공식 홈페이지에서는 초기 기동시 wsrep_cluster_address ="gcomm://"

이 아닌 wsrep_new_cluster 를 쓰라고 나와있다. 

그러나 내가 테스트 했을 때는 wsrep_new_cluster 로 올리면

cluster_size 가 0 이 되고 나머지 노드들이 클러스터링이 잘 안된다. 

 

#optional

wsrep_cluster_name='galera'

wsrep_node_address = 10.10.10.11

wsrep_node_name = 'node1'

wsrep_sst_method = rsync

# wsrep_sst_auth='galera:galera'

bind-address=0.0.0.0


** wsrep_sst_method=rsync 로 세팅된 경우는 wsrep_sst_auth 를 사용하지 않는다. 


** Mandatory 에서는 초기에 node1 의 wsrep_cluster_address 를 비우고 

나머지 node2,3 은 

wsrep_cluster_address = "gcomm://10.10.10.11,10.10.10.12,10.10.10.13"

모두 적어준다. 

** optional 은 각 node 에 맞게 수정한다. 

ex) 

[node2]

wsrep_node_address=x.x.x.12

wsrep_node_name='node2'

[node3]

wsrep_node_address=x.x.x.13

wsrep_node_name='node3'



5. Bootstrap


- node1,2,3 공통


service mysql stop

Stopping mysql (via systemctl):                            [  OK  ]


- node1 로 처음 boot 할때만 아래처럼 올린다. 

  나머지 node2,3 은 service start 로 올린다. 


[root@localhost ~]# /etc/init.d/mysql start --wsrep-new-cluster


Starting mysql (via systemctl):                            [  OK  ]


[root@localhost ~]# mysql -u root -p -e "show status like 'wsrep%'"



** 나의 경우 node 1 은 정상적으로 올라오고, node2 가 start 과정중에 failed 되었다

이거 해결하느라 고생좀 했다. 이런것들이 오픈소스의 단점이 아닐까 싶다.

무료이지만 상용으로 쓰려면 맨땅에 헤딩을 많이 해야된다.....


부팅 중에 error 나면 systemctl stats 나 journalctl 로 메세지를 확인할수 있다. 

나의 경우엔 원인이 뭔질 모르겠으나 wsrep_sst_method=skip 으로 변경해서

정상적으로 open 시킬수 있었다. 






반응형
Posted by 돌고래트레이너