Orchestrator를 활용한 cluster 생성

2023. 8. 7. 17:28docker

기본 디렉토리 및 설정파일 생성

데이터 연결 관련 디렉토리

mkdir -p /db/db001/data
mkdir -p /db/db002/data
mkdir -p /db/db003/data
chmod 777 /db/db001/data
chmod 777 /db/db002/data
chmod 777 /db/db003/data

 

로그 및 설정 연결 관련 디렉토리
mkdir -p /db/db001/log
mkdir -p /db/db002/log
mkdir -p /db/db003/log
chmod 777 /db/db001/log
chmod 777 /db/db002/log
chmod 777 /db/db003/log

mkdir -p /db/db001/conf
mkdir -p /db/db002/conf
mkdir -p /db/db003/conf
chmod 777 /db/db001/conf
chmod 777 /db/db002/conf
chmod 777 /db/db003/conf 

 

생성할 DB의 설정 파일
touch /db/db001/conf/my.cnf
chmod 644 /db/db001/conf/my.cnf
nano /db/db001/conf/my.cnf

touch /db/db002/conf/my.cnf
chmod 644 /db/db002/conf/my.cnf
nano /db/db002/conf/my.cnf 

touch /db/db003/conf/my.cnf
chmod 644 /db/db003/conf/my.cnf
nano /db/db003/conf/my.cnf

 

 

touch /db/db001/conf/my.cnf 내용 수정

[mysqld]
log_bin                     = mysql-bin
binlog_format               = ROW
gtid_mode                   = ON
enforce-gtid-consistency    = true
server-id                   = 100
log_slave_updates
datadir                     = /var/lib/mysql
socket                      = /var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links              = 0

log-error                   = /var/log/mysql/mysqld.log
pid-file                    = /var/run/mysqld/mysqld.pid

report_host                 = db001

[mysqld_safe]
pid-file                    = /var/run/mysqld/mysqld.pid
socket                      = /var/lib/mysql/mysql.sock
nice                        = 0

 

 

touch /db/db002/conf/my.cnf 내용 수정

[mysqld]
log_bin                     = mysql-bin
binlog_format               = ROW
gtid_mode                   = ON
enforce-gtid-consistency    = true
server-id                   = 200
log_slave_updates
datadir                     = /var/lib/mysql
socket                      = /var/lib/mysql/mysql.sock
read_only
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links              = 0

log-error                   = /var/log/mysql/mysqld.log
pid-file                    = /var/run/mysqld/mysqld.pid

report_host                 = db002

[mysqld_safe]
pid-file                    = /var/run/mysqld/mysqld.pid
socket                      = /var/lib/mysql/mysql.sock
nice                        = 0

 

touch /db/db003/conf/my.cnf 내용 수정

[mysqld]
log_bin                     = mysql-bin
binlog_format               = ROW
gtid_mode                   = ON
enforce-gtid-consistency    = true
server-id                   = 300
log_slave_updates
datadir                     = /var/lib/mysql
socket                      = /var/lib/mysql/mysql.sock
read_only
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links              = 0

log-error                   = /var/log/mysql/mysqld.log
pid-file                    = /var/run/mysqld/mysqld.pid

report_host                 = db003

[mysqld_safe]
pid-file                    = /var/run/mysqld/mysqld.pid
socket                      = /var/lib/mysql/mysql.sock
nice                        = 0

 

 

Docker 설치

root@ubuntu:~# hostnamectl set-hostname ubuntu

root@ubuntu:~# apt update -y && apt dist-upgrade -y

root@ubuntu:~# apt-get install mysql-client -y && apt-get install curl -y

root@ubuntu:~# curl -fsSL http://get.docker.com -o get-docker.sh

root@ubuntu:~# chmod +x get-docker.sh

root@ubuntu:~# ./get-docker.sh

root@ubuntu:~# usermod -aG docker ubuntu

 

root@ubuntu:~# systemctl restart docker

root@ubuntu:~# systemctl enable docker

root@ubuntu:~# systemctl status docker

root@ubuntu:~# mkdir dockerdir

root@ubuntu:~# cd dockerdir

 

 

기본 명령어

root@ubuntu:~/dockerdir# docker ps

설치된 도커 확인

 

root@ubuntu:~/dockerdir# docker images

도커 이미지 파일 상세정보 확인

 

root@ubuntu:~/dockerdir# docker stop <도커명>

도커 정지

 

root@ubuntu:~/dockerdir# docker start <도커명>

도커 시작(restart도 가능)

 

root@ubuntu:~/dockerdir# docker inspect <도커명>

도커에 대한 상세정보 확인

 

root@ubuntu:~/dockerdir# docker rm <도커명>

도커 제거

 

root@ubuntu:~/dockerdir# docker top <도커명>

리소스 확인

 

root@ubuntu:~/dockerdir# docker network ls

도커 네트워크 확인

 

 

기본 접속

root@ubuntu:~/dockerdir# docker run -it --name db001 -e MYSQL_ROOT_PASSWORD="12345" -d percona:5.7.30

-it : Container의 Shell 명령어 취득해서 접속
--name : Container 이름 지정
-e : 환경변수 지정
-d : 백그라운드 동작 유지

 

 

포트 맵핑

root@ubuntu:~/dockerdir# docker run -it --name db002 -p 3307:3306 -e MYSQL_ROOT_PASSWORD="12345" -d percona:5.7.30

-p : 호스트 시스템의 포트 3307을 Docker 컨테이너 내부의 포트 3306에 매핑

 

root@ubuntu:~/dockerdir# ip addr | grep docker0

docker에 할당된 IP 주소 확인

 

root@ubuntu:~/dockerdir# mysql -uroot -p12345 -h172.17.0.1

도커 진입 없이 바로 mySQL 접속 가능

 

 

데이터 연결

root@ubuntu:~/dockerdir# docker run -it --name db001 -p 3306:3306 -v /db/db001/data:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD="12345" -d percona:5.7.30

-v : 호스트 시스템의 /db/db001/data 경로를 컨테이너 내부의 /var/lib/mysql/ 경로로 볼륨 매핑
호스트의 db/db001/data 디렉토리를 컨테이너 내부의 var/lib/mysql 디렉토리와 바인딩하여
데이터를 영속적으로 저장

 

 

실제 연동된 것 확인

 

 

설정 로그 연결

root@ubuntu:~/dockerdir# docker run -it --name db001 -p 3306:3306 \
-v /db/db001/data:/var/lib/mysql \
-v /db/db001/log:/var/log/mysql \
-v /db/db001/conf:/etc/percona-server.conf.d \
-e MYSQL_ROOT_PASSWORD="12345" -d percona:5.7.30  

호스트의 db/db001/log 디렉토리를 컨테이너 내부의 var/log/mysql 디렉토리와 바인딩하여
로그를 영속적으로 저장

 

 

로그 파일 생성 확인

 

 

Bridge 생성, 연결

root@ubuntu:~/dockerdir# docker network create --driver bridge mybridge

 

도커 정지 및 제거 후

 

root@ubuntu:~/dockerdir# docker run -it --name db001 -h db001 -p 3306:3306 \

--net mybridge --net-alias=db001 \

-v /db/db001/data:/var/lib/mysql \

-v /db/db001/log:/var/log/mysql \

-v /db/db001/conf:/etc/percona-server.conf.d \

-e MYSQL_ROOT_PASSWORD="12345" -d percona:5.7.30

 

 

db002, db003에 대해서도 위와 같이 명령을 실행하면 db 간 ping 가능

 

 

복제

1. DB001(Master)에서 복제에 사용할 유저 생성, 권한 부여

 

root@ubuntu:~/dockerdir# docker exec -it -uroot db001 /bin/bash

[root@db001 /]# mysql -uroot -p12345

mysql> create user 'repl'@'%'identified by '12345';

mysql> grant replication slave on *.* to 'repl'@'%';

mysql> flush privileges;

mysql> use mysql;

확인

 

 

2. Slave 컨테이너에 접속해서 Master 서버로 연결 → 복제 실시

 

root@ubuntu:~/dockerdir# docker exec -it -uroot db002 /bin/bash

[root@db002 /]# mysql -uroot -p12345

mysql> reset master;

mysql> change master to master_host='db001', master_user='repl', master_password='12345', master_auto_position=1;

mysql> start slave;

확인

 

 

root@ubuntu:~/dockerdir# docker exec -it -uroot db003 /bin/bash

[root@db003 /]# mysql -uroot -p12345

mysql> reset master;

mysql> change master to master_host='db001', master_user='repl', master_password='12345', master_auto_position=1;

mysql> start slave;

확인

 

 

Orchestrator 설치 및 Orchestrator가 사용할 MySQL 계정 생성

root@ubuntu:~/dockerdir# docker run -it --name orchestrator -h orchestrator -p 3000:3000 --net mybridge --net-alias=orchestrator -d openarkcode/orchestrator:latest

오케스트레이터 설치 확인

 

 

root@ubuntu:~/dockerdir# docker inspect db00[1 | 2 | 3] | grep “IPAddress” → 172.18.0.[2 | 3 | 4]

 

 

root@ubuntu:~/dockerdir# docker exec -it -uroot db001 /bin/bash

[root@db001 /]# mysql -uroot -p12345

mysql> use mysql;

mysql> drop user 'orc_client_user'@'172.%';

mysql> flush privileges;

 

mysql> create user 'orc_client_user'@'172.%' identified by 'orc_client_password';

mysql> grant super, process, replication slave, reload on *.* to 'orc_client_user'@'172.%';

super: 이 권한은 슈퍼 유저 권한을 부여한다. 데이터베이스 서버를 관리하는 데 필요한 권한으로, 데이터베이스 서버의 모든 작업을 수행할 수 있게 한다.
process: 이 권한은 다른 사용자 세션과 연관된 프로세스를 볼 수 있는 권한이다.
replication slave: 이 권한은 데이터베이스 복제를 위해 슬레이브 서버가 마스터 서버로부터 데이터를 가져오는 것을 허용한다.
reload: 이 권한은 데이터베이스 서버 설정을 다시 로드하는 권한이다.

mysql> grant select on mysql.slave_master_info to 'orc_client_user'@'172.%';

해당 사용자는 mysql 데이터베이스 내부의 slave_master_info 테이블에서 데이터를 읽을 수 있게 된다.

mysql> flush privileges;

 

 

파이어폭스에서 localhost:3000 접속 후 db001 검색

 

 

클러스터 확인

'docker' 카테고리의 다른 글

docker 기본 사항  (0) 2023.10.04
docker 설치  (0) 2023.10.04
자동화 실습  (0) 2023.08.31
프록시  (0) 2023.08.30
Orchestrator 설정  (0) 2023.08.10