MySQL를 사용하는 시스템에서 이번에 MariaDB로 변경하는 프로젝트가 진행되려고 하고 준비중입니다. 기왕 준비하는 것이라면 기존에 MySQL이 이중화 되어 있지 않던 것도 같이 해서 이중화 및 MariaDB로 변경하는 것으로 프로젝트를 진행함에 따라 MariaDB 테스트를 진행합니다.
1. 먼저 SELINUX를 permissive mode 로 변경 처리 해야 합니다.
(위와 같이 했을 경우 재부팅 시에 적용이 풀리는 단점이 있어 아래와 같이 설정도 추가합니다.)
# vi /etc/sysconfig/selinux
SELINUX=enforcing 부분을 SELINUX=Permissive 변경 |
2. MariaDB를 yum으로 설치할 수 있도록 MariaDB repository 설정합니다.
# vi /etc/yum.repos.d/MariaDB.repo |
아래의 문구를 삽입 후 저장합니다.
MariaDB가 개발이 계속적으로 발생하기 때문에 버전업이 빠릅니다. 아래의 사이트를 통해서 리포지토리 정보를 받으실 수 있습니다.
3. MariaDB Galera Cluster 10.0 설치
# sudo yum install MariaDB-Galera-server MariaDB-client rsync galera |
참고! 저는 설치 과정 중에 Requires: socat 메시지로 설치가 오류가 나왔습니다.
socat rpm을 추가적으로 설치를 먼저 하시고 설치 하여 주시면 됩니다.
4. MariaDB Galera Cluster 10.0 구성
클러스터 구성이기 때문에 양쪽으로 서버에 모두 설치가 완료되었다면 이제 통합 구성을 해야 합니다. 아래의 구성은 양쪽다 동일하게 하시기 바랍니다.
# sudo service mysql start # sudo /usr/bin/mysql_secure_installation |
# mysql -u root -p MariaDB> DELETE FROM mysql.user WHERE user=''; MariaDB> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'mariadb'; MariaDB> GRANT USAGE ON *.* to sst_user@'%' IDENTIFIED BY 'dbpass'; MariaDB> GRANT ALL PRIVILEGES on *.* to sst_user@'%'; MariaDB> FLUSH PRIVILEGES; MariaDB> quit |
위에 패스워드 부분은 편의상 쉽게 했습니다. 상용 서버에서 사용하실 것이라면 좀더 복잡하게 하시면 좋을 것 같습니다. 추가적으로 sst_user를 통해서 양쪽 클러스터를 동기화 시킵니다. 위에 동기화 계정을 % 로 한것도 사용상 편의를 위한 것으로 상용 서버에서는 양쪽 서버의 IP로 설정하시는 것이 보안상 좋습니다.
# sudo service mysql stop |
5. Node1(DB서버 중에 한개)에서 아래의 설정을 진행합니다.
# vi /etc/my.cnf.d/server.cnf |
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://Node1IP,Node2IP"
wsrep_cluster_name='galera_cluster'
wsrep_node_address='Node1IP'
wsrep_node_name='db1'
wsrep_sst_method=rsync
wsrep_sst_auth=sst_user:dbpass |
위의 붉은 글씨에 대한 부분을 설정합니다.
Node2 에서는 Node1에서 설정과 동일하게 하되 아래의 부분만 Node2에 맟춰서 설정합니다.
wsrep_node_address='Node2IP' wsrep_node_name='db2' |
6. 클러스터 최초 실행
Node1에서 아래의 명령어로 DB1을 구동합니다.
# sudo /etc/init.d/mysql start --wsrep-new-cluster |
(위의 명령어는 클러스터를 최초 실행할 경우에만 사용하는 명령어입니다.)
6-1. 클러스터 상태 확인
# mysql -u root -p -e "show status like 'wsrep%'" |
아래와 같이 확인이 되는지 확인합니다.
wsrep_local_state_comment | Synced <-- cluster is synced
wsrep_incoming_addresses | 10.0.0.9:3306 <-- node db1 is a provider
wsrep_cluster_size | 1 <-- cluster consists of 1 node
wsrep_ready | ON <-- good :) |
wsrep_cluster_size 값은 현재 구동중인 Node가 몇개이냐의 의미입니다. 지금은 단독 실행이기 때문에 1로 표기되어야 맞습니다.
7. 추가 클러스터를 구동합니다.
Node2에서 구동합니다.
# sudo service mysql start |
7-1 클러스터 상태 확인
# mysql -u root -p -e "show status like 'wsrep%'" |
wsrep_cluster_size 값이 2로 되어 있다면 정상입니다.
TIP
MariaDB 개발사에서는 MariaDB Galera Cluster에 대해 3대 이상의 Node를 권장하고 있습니다. 2대의 Node로도 충분히 구성은 가능합니다만, 개발사의 권장사항은 3대 이상의 Node입니다.