2023. 8. 7. 17:28ㆍdocker
기본 디렉토리 및 설정파일 생성
데이터 연결 관련 디렉토리
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
복제
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;
'docker' 카테고리의 다른 글
docker 기본 사항 (0) | 2023.10.04 |
---|---|
docker 설치 (0) | 2023.10.04 |
자동화 실습 (0) | 2023.08.31 |
프록시 (0) | 2023.08.30 |
Orchestrator 설정 (0) | 2023.08.10 |