티스토리 뷰

Galera Cluster for MariaDB

 

 

갈레라 클러스터 설치 매뉴얼입니다.

참조 바랍니다.

 

Maria DB MySQL Cluster가 아닌 Galera Cluster를 기본으로 합니다.

Galera어떤 클러스터 node에도 쓰고 읽고 할 수 있다는 장점이 있는 진정한 클러스터라고 합니다.

참고 : galera cluster mininum 3 Node 서버로 운영이 됩니다.

Minimal cluster size

In order to avoid a split-brain condition, the minimum recommended number of nodes in a cluster is 3. Blocking state transfer is yet another reason to require a minimum of 3 nodes in order to enjoy service availability in case one of the members fails and needs to be restarted. While two of the members will be engaged in state transfer, the remaining member(s) will be able to keep on serving client requests.

 

설치된 서버에 기본적으로 갈레라에서 사용할 포트를 오픈합니다.

Linux는 시스템의 속성을 바꾸는 명령은 superuser권한을 획득해야 합니다.

일일이 번거로우니, 풀고 시작합니다.(Ubuntu 14.04 LTS기준입니다)

Sudo -s

 

방화벽 구동

ufw enable

 

ssh접속 허용

ufw allow ssh

우분투업데이트

apt-get update

 

우분투 업그레이드

apt-get upgrade

 

ipv6 해제

vi /etc/sysctl.conf아래 내용을 추가

※  ipv6해제는 하지 않아도 되나, 향후 Log분석시 ipv4와 혼란스럽기 때문에 미리 Disable합니다.

#disable ipv6

net.ipv6.conf.all.disable_ipv6 = 1

net.ipv6.conf.default.disable_ipv6 = 1

net.ipv6.conf.lo.disable_ipv6 = 1

 

정보 업데이트

sysctl -p

 

클러스터용 방화벽 오픈

TCP : 4567 (group comm)

TCP : 4568 (IST)

TCP : 4444 (rsync)

TCP : 3306 (MariaDB)

TCP : 9200 (http health check)

TCP : 22 (ssh) clustercontrol passwordless ssh

ICMP

 

호스트 방화벽(ufw) 포트 열기(한꺼번에 연다)

ufw allow 4567 ; ufw allow 4568 ; ufw allow 4444 ; ufw allow 3306 ; ufw allow 9200 ; ufw allow 22

 

리포지토리 업데이트(MariaDB 5.5)

https://downloads.mariadb.org/mariadb/repositories/#mirror=kaist 접속하셔서 버전별로 설치 가능합니다.

 

apt-get install python-software-properties

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db

add-apt-repository 'deb http://ftp.kaist.ac.kr/mariadb/repo/5.5/ubuntu precise main'

 

Maria db 10.0

sudo apt-get install software-properties-common

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db

sudo add-apt-repository 'deb http://ftp.kaist.ac.kr/mariadb/repo/10.0/ubuntu trusty main'

apt-get update

 

 

 

마리아db 갈레라클러스터 패키지 설치

apt-get install -y  rsync galera mariadb-galera-server

(설치중 DBroot 패스워드를 물어보며, 입력합니다)

 

 

db 데몬 죽이기

service mysql stop

 

 

클러스터 파일 생성

vi /etc/mysql/conf.d/cluster.cnf

(아래의 내용을 복사하여 붙여넣기)

 

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

[mysqld]

query_cache_size=0

binlog_format=ROW

default-storage-engine=innodb

innodb_autoinc_lock_mode=2

query_cache_type=0

bind-address=0.0.0.0

 

# Galera Provider Configuration

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

#wsrep_provider_options="gcache.size=32G"

 

# Galera Cluster Configuration

wsrep_cluster_name="test_cluster"

wsrep_cluster_address="gcomm://192.168.29.10,192.168.29.11,192.168.49.10"

 

# Galera Synchronization Congifuration

wsrep_sst_method=rsync

#wsrep_sst_auth=user:pass

 

# Galera Node Configuration

wsrep_node_address="192.168.29.10"

wsrep_node_name="ERP-DB-SJ-01"

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

 

gcomm://192.168.29.10,192.168.29.11,192.168.49.10 , 

wsrep_node_address="192.168.29.10"

wsrep_node_name=" ERP-DB-SJ-01"

이들 3부분을 각 노드 정보에 맞게 수정해야 합니다.

wsrep_node_address="192.168.29.10"는 해당 호스트의 IP, name은 호스트 네임

gcomm://192.168.29.10,192.168.29.11,192.168.49.10는 클러스터를 구성하는 노드 전체의 IP

 

my.cnf 수정 : 한글코드 관련해서 반드시 추가한다.

vi /etc/mysql/my.cnf

 

default-character-set=utf8

character-set-server  = utf8

collation-server      = utf8_general_ci

character_set_server   = utf8

collation_server       = utf8_general_ci

 

 

**************My.cnf참조*************

- my.cnf 샘플 : 참조만 할 것우선은 한글코드 제외하고는 디폴트로 운영.

[client]

port = 3306

socket = /var/run/mysqld/mysqld.sock

default-character-set=utf8

 

[mysqld_safe]

nice = 0

socket = /var/run/mysqld/mysqld.sock

 

[mysqld]

basedir = /usr

bind-address = 0.0.0.0

binlog_format = ROW

character_set_server = utf8

collation_server = utf8_general_ci

datadir = /var/lib/mysql

default-storage-engine = InnoDB

expire_logs_days = 10

innodb_autoinc_lock_mode = 2

innodb_buffer_pool_size = 256M

innodb_doublewrite = 1

innodb_file_per_table = 1

innodb_flush_log_at_trx_commit = 2

innodb_lock_wait_timeout = 60

innodb_locks_unsafe_for_binlog = 1

innodb_stats_on_metadata = 0

key_buffer = 256M

lc-messages-dir = /usr/share/mysql

lock_wait_timeout = 300

max_allowed_packet = 128M

max_binlog_size = 128M

max_connections = 64

myisam-recover = BACKUP

myisam_sort_buffer_size = 64M

net_buffer_length = 8K

open-files-limit = 65535

pid-file = /var/run/mysqld/mysqld.pid

port = 3306

query_cache_limit = 8M

query_cache_size = 16M

read_buffer_size = 8M

read_rnd_buffer_size = 8M

skip-external-locking

socket = /var/run/mysqld/mysqld.sock

sort_buffer_size = 16M

table_cache = 2M

table_definition_cache = 65535

table_open_cache = 65535

thread_cache_size = 8

thread_concurrency = 8

tmpdir = /tmp

user = mysql

 

character-set-server  = utf8

collation-server      = utf8_general_ci

character_set_server   = utf8

collation_server       = utf8_general_ci

 

 

[mysqldump]

max_allowed_packet = 16M

quick

quote-names

 

 

[mysql]

 

[isamchk]

!includedir /etc/mysql/conf.d/

key_buffer = 256M

read_buffer = 16M

sort_buffer_size = 256M

write_buffer = 16M

EOF

 

 

 

 

 

 

 

 

 

 

8. 1번째 노드의 /etc/mysql/debian.cnf 를 나머지 노드에 복사

- scp명령을 이용해서 복사를 해도 된다.(원격 서버 → 로컬 서버로 파일 전송)

scp -P 22 seungjin@192.168.29.10:/etc/mysql/debian.cnf /etc/mysql/

권한이 없으면 츄마드로 읽기 권한을 넣어준다.

 

9. 1번째 노드의 /etc/mysql/conf.d/clustr.cnf 를 나머지 노드에 복사

- 각 노드들에게 1번째 노드의 /etc/mysql/conf.d/cluster.cnf 를 나머지 노드에 복사해도 된다.

scp -P 22 seungjin@192.168.29.10:/etc/mysql/conf.d/cluster.cnf /etc/mysql/conf.d/

 

 

 

 

- 1번째 노드에서 : 처음 클러스터를 생성할 때만 첫번째 노드에서 이렇게 수행이후에는 아님.

service mysql start --wsrep-new-cluster

 

 

나머지 노드 수행

service mysql start

 

 

노드 전체가 죽은 상태에서 시작할 경우(맨처음 설치시 이부분으로 구동)

첫번째 노드에서 

sudo service mysql start --wsrep_cluster_address=gcomm://

  

 

 

- Mysql접속해서 아래의 IP 허용

 

mysql -u root -p

 

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.29.%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION;

 

 

- DB 생성

CREATE DATABASE SJDB CHARACTER SET utf8;

create user 'sjuser'@'192.168.29.10' IDENTIFIED BY 'Seungjin007#^(';

grant all on SJDB.* to'sjuser'@'192.168.29.10'; 

flush privileges;

 

 

-Database 생성 확인

show databases;

 

 

- DB 파일 검사 명령

mysqlcheck --check-upgrade --all-databases --auto-repair -u root -p

 


댓글