-
ubuntu proxy ochestrator 활용카테고리 없음 2023. 8. 30. 11:45
hostnamectl set-hostname ubuntu
apt-get update -y && apt-get dist-upgrade -y
apt-get install curl -y && apt-get install mysql-client -y
curl -fsSL https://get.docker.com -o get-docker.sh
chmod +x get-docker.sh
./get-docker.sh
usermod -aG docker ubuntu
mkdir dockerdir
cd dockerdircurl
커맨드 라인에서 다양한 프로토콜을 통해 데이터를 전송하거나 받을 수 있는 도구입니다. 주로 HTTP, HTTPS, FTP 등과 같은 프로토콜을 사용하여 웹 서버나 다른 리소스와 상호 작용할 때 유용하게 사용됩니다.
curl의 옵션
- -X: HTTP 요청 메서드를 지정합니다. 예를 들어, -X GET 또는 -X POST와 같이 사용합니다.
- -H: HTTP 헤더를 추가합니다. 예를 들어, -H "Content-Type: application/json"와 같이 사용합니다.
- -d: POST 요청 시에 전송할 데이터를 지정합니다.
- -o: 다운로드한 데이터를 특정 파일로 저장합니다.
- -O: URL에서 파일명을 추출하여 해당 파일명으로 저장합니다.
- -i: 서버 응답 헤더를 출력합니다.
- -s: 정적 데이터를 화면에 표시하지 않고 에러 메시지만 출력합니다.
- --insecure: SSL 인증서 검증을 무시하고 접속합니다 (보안상 권장되지 않음).
- -A: 사용자 에이전트(브라우저 등)를 지정합니다.
- -L: 리다이렉션을 따라갑니다.
사용 예시
- URL에서 데이터를 가져오기: curl https://www.example.com
- POST 요청 보내기: curl -X POST -d "key=value" https://www.example.com/api
- 다운로드: curl -o filename.jpg https://www.example.com/image.jpg
docker restart
docker stop[start]
docker rm
docker run
docker top[stats] db001
- 기본 폴더와 권한 부여 ---
mkdir -p /db/db001/data /db/db001/log /db/db001/conf
chmod 777 /db/db001/data /db/db001/log /db/db001/conf
mkdir -p /db/db002/data /db/db002/log /db/db002/conf
chmod 777 /db/db002/data /db/db002/log /db/db002/conf
mkdir -p /db/db003/data /db/db003/log /db/db003/conf
chmod 777 /db/db003/data /db/db003/log /db/db003/conf
touch /db/db001/conf/my.cnf
chmod 644 /db/db001/conf/my.cnf
touch /db/db002/conf/my.cnf
chmod 644 /db/db002/conf/my.cnf
touch /db/db003/conf/my.cnf
chmod 644 /db/db003/conf/my.cnf[mysqld] log_bin = mysql-bin binlog_format = ROW gtid_mode = ON enforce-gtid-consistency = true server-id = 100 --> 200 / 300 log_slave_updates datadir = /var/lib/mysql socket = /var/lib/mysql/mysql.sock read_only ----> db002, db003 # 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 --> db002 / db003 [mysqld_safe] pid-file = /var/run/mysqld/mysqld.pid socket = /var/lib/mysql/mysql.sock nice = 0
=== 실습 ====
docker network create --driver bridge mybridge
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
docker run -it --name db002 -h db002 -p 3307:3306 \
--net mybridge --net-alias=db002 \
-v /db/db002/data:/var/lib/mysql \
-v /db/db002/log:/var/log/mysql \
-v /db/db002/conf:/etc/percona-server.conf.d \
-e MYSQL_ROOT_PASSWORD="12345" -d percona:5.7.30
docker run -it --name db003 -h db003 -p 3308:3306 \
--net mybridge --net-alias=db003 \
-v /db/db003/data:/var/lib/mysql \
-v /db/db003/log:/var/log/mysql \
-v /db/db003/conf:/etc/percona-server.conf.d \
-e MYSQL_ROOT_PASSWORD="12345" -d percona:5.7.30
master에서 복제에 사용할 유저 생성, 권한 부여
docker exec -it -uroot db001 /bin/bash
mysql -uroot -p12345
create user 'repl'@'%' identified by '12345';
grant replication slave on *.* to 'repl'@'%';
flush privileges;
slave 컨테이너에 접속해서 master서버로 연결되도록 복제 구성 -> 복제 start
docker exec -it -uroot db002 /bin/bash
mysql -uroot -p12345
reset master;
change master to master_host='db001', master_user='repl', master_password='12345', master_auto_position=1;
start slave;
show slave status\G ---> 복제 구성 확인 하기
docker exec -it -uroot db003 /bin/bash
mysql -uroot -p12345
reset master;
change master to master_host='db001', master_user='repl', master_password='12345', master_auto_position=1;
start slave;
show slave status\G ---> 복제 구성 확인 하기
orchestrator
docker run -it --name orchestrator -h orchestrator \
--net mybridge --net-alias=orchestrator \
-p 3000:3000 -d openarkcode/orchestrator:latest
docker ps
docker inspect db001 | grep "IPAddress"
orchestrator가 사용할 db유저, 권한 생성
docker exec -it -uroot db001 /bin/bash
mysql -uroot -p12345
create user 'orc_client_user'@'172.%' identified by 'orc_client_password';
grant super, process, replication slave, reload on *.* to 'orc_client_user'@'172.%';
grant select on mysql.slave_master_info to 'orc_client_user'@'172.%';
flush privileges;https://blog.yannickjaquier.com/mysql/orchestrator-tutorial.html
참조 사이트
Orchestrator MySQL replication topology tool tutorial
How to setup Orchestrator to graphically manage and visualize any complex MySQL or MariaDB replication topology
blog.yannickjaquier.com
ip addr | grep docker0
우분투 파이폭스 172.17.0.1:3000/web/discover
proxysql
mkdir -p /db/proxysql/data /db/proxysql/conf
chmod 777 /db/proxysql /db/proxysql/data /db/proxysql/conf
touch /db/proxysql/conf/proxysql.cnf
chmod 644 /db/proxysql/conf/proxysql.cnf
nano /db/proxysql/conf/proxysql.cnfdatadir="/var/lib/proxysql" admin_variables= { admin_credentials="admin:admin;radmin:radmin" mysql_ifaces="0.0.0.0:6032" } mysql_variables= { threads=4 max_connections=2048 default_query_delay=0 default_query_timeout=36000000 have_compress=true poll_timeout=2000 interfaces="0.0.0.0:6033" default_schema="information_schema" stacksize=1048576 server_version="5.5.30" connect_timeout_server=3000 monitor_username="monitor" monitor_password="monitor" monitor_history=600000 monitor_connect_interval=60000 monitor_ping_interval=10000 monitor_read_only_interval=1500 monitor_read_only_timeout=500 ping_interval_server_msec=120000 ping_timeout_server=500 commands_stats=true sessions_sort=true connect_retries_on_failure=10 }
docker run -it --name proxysql -h proxysql -p 16032:6032 -p 16033:6033 \
--net mybridge --net-alias=proxysql \
-v /db/proxysql/data:/var/lib/proxysql \
-v /db/proxysql/conf/proxysql.cnf:/etc/proxysql.cnf \
-d proxysql/proxysqldocker exec -it -uroot db001 /bin/bash
mysql -uroot -p12345
create database testdb default character set utf8;
create user 'appuser'@'%' identified by '12345';
grant select, insert, update, delete on testdb.* to 'appuser'@'%';
create user 'monitor'@'%' identified by 'monitor';
grant replication client on *.* to 'monitor'@'%';
flush privileges;- hostgroup 10번, hostgroup 20번 2개 등록
- hostgroup 10번 : write용 transaction 처리 -> db001 등록
hostgroup 20번 : read용 transaction 처리 -> db001 2 3
mysql -h127.0.0.1 -P16032 -uradmin -pradmin --prompt "ProxySQL Admin>"
insert into mysql_servers(hostgroup_id, hostname, port) values(10, 'db001', 3306);
insert into mysql_servers(hostgroup_id, hostname, port) values(20, 'db001', 3306);
insert into mysql_servers(hostgroup_id, hostname, port) values(20, 'db002', 3306);
insert into mysql_servers(hostgroup_id, hostname, port) values(20, 'db003', 3306);
insert into mysql_replication_hostgroups values(10, 20 ,'read_only','');
load mysql servers to runtime; --> 적용
save mysql servers to disk; --> 영구저장
insert into mysql_users(username, password, default_hostgroup, transaction_persistent) values('appuser', '12345', 10, 0);
load mysql servers to runtime; --> 적용
save mysql servers to disk; --> 영구저장
proxy서버가 app서버로 부터 받은 쿼리를 sql서버로 분기시켜줄 룰 생성
insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup) values(1,1,'^select.*for update$',10);
insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup) values(2,1,'^select',20);
load mysql query rules to runtime; --> 적용
save mysql query rules to disk; --> 영구저장