본문 바로가기
Lecture/Maria DB

[CentOS] MariaDB 설치 및 Galera Cluster 구성

by cusmaker 2016. 5. 23.
반응형

CentOS 6.5에 Maria DB 10.1.9 설치 및 Galera Cluster 구성


*cent os 장비 초기설정시 필수 참고

 - ulimit 확인 (계정 단위별 파일쓰기 제한 확인 후 충분히 설정)
 - 메모리 충분히 확보


1. Cent OS 설치 및 최초 구성

 - /etc/resolv.conf 수정(yum안될경우)

nameserver 8.8.8.8

nameserver 8.8.4.4

 - yum 업그레이드 

#yum -y upgrade

- Group과 User 추가, 만료 해제

#useradd -U mysql

#chage -E -1 -I 0 -m 0 -M 99999 mysql


2. 필요 패키지 설치

yum install perl-Time-HiRes

yum install perl-DBI

yum install nc

yum install nmap

- MariaDB 설치

1) #vi /etc/yum.repos.d/MariaDB.repo

[mariadb]

name=MariaDB

baseurl=http://yum.mariadb.org/10.1.9/centos6-amd64/

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

gpgcheck=1

2) #yum update

3) #yum -y install MariaDB-client MariaDB-server MariaDB-devel  

- 삭제시 : # yum remove mysql mysql-server

- 디렉토리 삭제 : # rm /var/lib/mysql -rf

4) xtrabackup 설치(galera 복제 방식 및 백업시 사용)

#yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

#yum install percona-xtrabackup-22

5) dependency 설치

#yum install wget (없으면 설치)

#wget http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el6/en/x86_64/rpmforge/RPMS/socat-1.7.2.4-1.el6.rf.x86_64.rpm

#yum install socat*

#yum install openssh-clients (파일복사)

6) 설정파일 셋팅(huge, 4G이상)

// 환경파일 백업

# cp /etc/my.cnf /etc/my.cnf.org

// 환경파일 대체 --- X

# cp /usr/share/mysql/my-innodb-heavy-4G.cnf /etc/my.cnf

 - 추가 설정 및 튜닝(대용량)

default-character-set = utf8

max_connections = 1000

max_connect_errors = 1000

max_heap_table_size = 1024M

read_buffer_size =20M

read_rnd_buffer_size = 64M

thread_concurrency =16

query_cache_size = 256M

default-storage-engine = InnoDB

tmp_table_size = 256M

innodb_buffer_pool_size = 10G

innodb_log_file_size = 1G

max_allowed_packet = 64M

3. MariaDB Galera 설정

 1) 서비스 등록(부팅시 시작) 및 서비스 시작

- #chkconfig --add mysql

- #chkconfig --levels 235 mysql on

- #service mysql start

- #/etc/init.d/mysql start (service mysql start 동일)

 2) root 패스워드 생성 (모든 노드)

- #/usr/bin/mysqladmin -u root password 'password'

- #mysql -uroot -p'password'

 3) 계정 생성(모든 노드)

- #grant all privileges on *.* to 'root'@'%.%.%.%' identified by 'password';

- * 만약에 grant 권한이 부여가 안될경우 >>  GRANT USAGE ON *.* TO 'root'@'%.%.%.%' WITH GRANT OPTION;

 4) mysql 종료

- #/etc/init.d/mysql stop

 5) 모든 노드 방화벽 닫기(클러스터시 3개 포트 사용)
- #/etc/init.d/iptables stop ( service iptables stop )
- #setenforce 0
#vi /etc/sysconfig/selinux 

SELINUX=disabled
- 사용포트 개방
yum install policycoreutils-python

4567 - used by Galera for inter-node communication
4444 - used for SST
4568 - used for IST

# semanage port -a -t mysqld_port_t -p tcp 4567
# semanage port -a -t mysqld_port_t -p tcp 4568
# semanage port -a -t mysqld_port_t -p tcp 4444

# semanage port -a -t mysqld_port_t -p udp 4567

# semanage permissive -a mysqld_t
- 다른 방식으로 포트열기
iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 4567 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 4568 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 4444 -j ACCEPT

iptables -I OUTPUT 1 -p tcp --dport 3306 -j ACCEPT
iptables -I OUTPUT 1 -p tcp --dport 4567 -j ACCEPT
iptables -I OUTPUT 1 -p tcp --dport 4568 -j ACCEPT
iptables -I OUTPUT 1 -p tcp --dport 4444 -j ACCEPT


직접 수정시
vi /etc/sysconfig/iptables

-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4567 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4568 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4444 -j ACCEPT

-A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 4567 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 4568 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 4444 -j ACCEPT

//확인
# iptables -nL
# service iptables save
# service iptables restart



 6) node1 설정
- # vi /etc/my.cnf.d/server.cnf

[mysqld]
server-id=1
log-bin=galera
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_doublewrite=1
query_cache_size=0
log-error=/var/log/mysql.log


[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://
wsrep_cluster_name=galeraCluster
wsrep_node_address=192.168.0.1
wsrep_node_name=node1
wsrep_sst_receive_address=192.168.0.1
wsrep_sst_auth=root:password
#wsrep_sst_method=mysqldump
wsrep_sst_method=rsync
#wsrep_sst_method=xtrabackup

#
bind-address=0.0.0.0
#
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0

 7) node2 설정
- # vi /etc/my.cnf.d/server.cnf

[mysqld]
server-id=2
log-bin=galera
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_doublewrite=1
query_cache_size=0
log-error=/var/log/mysql.log


[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.0.1
wsrep_cluster_name=galeraCluster
wsrep_node_address=192.168.0.2
wsrep_node_name=node2
wsrep_sst_receive_address=192.168.0.2
wsrep_sst_auth=root:password
#wsrep_sst_method=mysqldump
wsrep_sst_method=rsync
#wsrep_sst_method=xtrabackup

#
bind-address=192.168.0.2
#
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0



 

4. MariaDB Galera 기동

1) 기동순서 : 1번 Node (Donor)
-# /etc/init.d/mysql start --wsrep-new-cluster

- 최초 기동시에만 옵션(붉은색) 입력, Donor Node 1번이 아닐때 실행될경우 데이터 삭제 위험

- DB시작후 내용 확인

- *초기화 > SET GLOBAL wsrep_cluster_address = @@wsrep_cluster_address;

- mysql> show status where Variable_name like '%wsrep%';

wsrep_cluster_conf_id         1

wsrep_cluster_size             1

wsrep_ready                    ON

wsrep_incoming_addresses    192.168.0.1:3306

2) 기동순서 2번 Node

- 그냥 시작

- service mysql start

wsrep_cluster_conf_id         2

wsrep_cluster_size             2

wsrep_ready                    ON

wsrep_incoming_addresses    192.168.0.1:3306, 192.168.0.2:3306



3) 모든 Node 기동 후 재확인(wsrep_incoming_addresses가 마지막 노드와 동일하게 표시되야함)


-------------------------------------------------------------------------------------------------------------


마스터 노드 셧다운으로 싱크가 깨졌을때

------

시작하려고하고있는 노드와 기동 된 노드 사이에 불일치가 발생하고있는 것으로 알려졌다.

이미 시작된 노드가 정의에서 시작하고있는 노드의 데이터는 관계없이 다음을 실행하면 시작있다.


로그 파일과 데이터의 상태를 제거

------


/var/lib/mysql
rm -rf ib_logfile
rm -rf grastate.dat



[특정 노드의 전체 데이터 수동 동기화]

* node2 가 Cluster에서 분리된 이후에 Update되어 데이터가 node1, node3 에 비해 지나치게 상이한 경우의 조치(초기화)

* 아래 과정대로 하면 node1, node3로부터 전체 데이터에 대해 동기화(mysqldump, xtrabackup, rsync 등 방법도 있음)

root@ubuntu14-pv2:~# rm -rf /var/lib/mysql/*

root@ubuntu14-pv2:~# rm -rf /var/log/mysql/*

root@ubuntu14-pv2:~# mysql_install_db

------------------시작이 안될때(권한문제)

chown mysql.mysql /var/lib/mysql

chmod 0775 /var/lib/mysql


root@ubuntu14-pv2:~# service mysql start --wsrep_cluster_address='gcomm://'

root@ubuntu14-pv2:~# mysql_secure_installation

root@ubuntu14-pv2:~# mysql -uroot -pmaria

MariaDB [(none)]> grant all on *.* to 'root'@'%' identified by 'maria';

MariaDB [(none)]> grant usage on *.* to sst_user@'%' identified by 'maria';

MariaDB [(none)]> grant all privileges on *.* to sst_user@'%';

MariaDB [(none)]> flush privileges;

MariaDB [(none)]> quit

root@ubuntu14-pv2:~# service mysql stop

root@ubuntu14-pv2:~# vi /etc/mysql/conf.d/mariadb.cnf

...

# Galera Node Option

wsrep_node_name='galera2'

wsrep_node_address='10.0.10.2'

wsrep_cluster_address = 'gcomm://10.0.10.1,10.0.10.2,10.0.10.3' <== Uncomment

# wsrep_cluster_address = 'gcomm://' <== Comment out

wsrep_sst_receive_address=10.0.10.2:4569

...

root@ubuntu14-pv1:~# service mysql start

 * Stopping MariaDB database server mysqld                               [ OK ] 

 * Starting MariaDB database server mysqld                               [ OK ] 

 * Checking for corrupt, not cleanly closed and upgrade needing tables.



출처: http://bryan.wiki/246 [Barracuda MemoLog]


'Lecture > Maria DB' 카테고리의 다른 글

[xtrabackup] 백업 및 복원  (0) 2016.05.25
샤딩/파티셔닝  (0) 2016.05.19
[replication] master - slave 싱크 깨질때 대처  (0) 2015.10.22