Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 11 additions & 17 deletions docker-compose-db.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@ services:
image: redis:alpine
container_name: rabbit-redis
hostname: redis
ports:
- "6379:6379"
networks:
- rabbit-db
ports: [ "6379:6379" ]
networks: [ rabbit-db ]

mysql_master:
container_name: rabbit-mysql-master
Expand All @@ -16,13 +14,11 @@ services:
MYSQL_DATABASE: rabbit
MYSQL_ROOT_HOST: '%'
MYSQL_ROOT_PASSWORD: 1234
ports:
- "3306:3306"
ports: [ "3306:3306" ]
volumes:
- ./mysql/master-data-source.cnf:/etc/mysql/conf.d/my.cnf
- ./mysql/init-master.sql:/docker-entrypoint-initdb.d/01-init-master.sql
networks:
- rabbit-db
networks: [ rabbit-db ]
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p1234" ]
timeout: 20s
Expand All @@ -35,12 +31,10 @@ services:
MYSQL_DATABASE: rabbit
MYSQL_ROOT_HOST: '%'
MYSQL_ROOT_PASSWORD: 1234
ports:
- "3307:3306"
ports: [ "3307:3306" ]
volumes:
- ./mysql/replica-data-source.cnf:/etc/mysql/conf.d/my.cnf
networks:
- rabbit-db
networks: [ rabbit-db ]
depends_on:
mysql_master:
condition: service_healthy
Expand All @@ -50,13 +44,13 @@ services:
retries: 10

mysql_replication_setup:
profiles: [ setup ]
image: mysql:8.0
container_name: mysql_replication_setup
container_name: mysql-replication-setup
volumes:
- ./mysql/setup-replication.sh:/setup-replication.sh
command: [ "/bin/bash", "/setup-replication.sh" ]
networks:
- rabbit-db
- ./mysql/entrypoint.sh:/entrypoint.sh
command: [ "/bin/bash", "/entrypoint.sh" ]
networks: [ rabbit-db ]
depends_on:
mysql_master:
condition: service_healthy
Expand Down
14 changes: 4 additions & 10 deletions docker-compose-elk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ version: "3.8"
services:
setup:
profiles: [ setup ]
container_name: rabbit-elk-setup
init: true
build:
context: elk/setup/
Expand All @@ -29,9 +30,7 @@ services:
volumes:
- ./elk/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro,Z
- elasticsearch:/usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
ports: [ "9200:9200", "9300:9300" ]
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
ELASTIC_PASSWORD: ${ELASTIC_PASSWORD:-rabbit1234}
Expand All @@ -47,11 +46,7 @@ services:
volumes:
- ./elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro,Z
- ./elk/logstash/pipeline:/usr/share/logstash/pipeline:ro,Z
ports:
- "5044:5044"
- "50000:50000/tcp"
- "50000:50000/udp"
- "9600:9600"
ports: [ "5044:5044", "50000:50000/tcp", "50000:50000/udp", "9600:9600" ]
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
LOGSTASH_USERNAME: ${LOGSTASH_USERNAME:-rabbit_logstash}
Expand All @@ -67,8 +62,7 @@ services:
ELASTIC_VERSION: ${ELASTIC_VERSION:-8.10.2}
volumes:
- ./elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:ro,Z
ports:
- "5601:5601"
ports: [ "5601:5601" ]
environment:
KIBANA_SYSTEM_PASSWORD: ${KIBANA_SYSTEM_PASSWORD:-rabbit1234}
networks: [ rabbit-elk ]
Expand Down
15 changes: 4 additions & 11 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,22 @@ services:
rabbitmq:
image: rabbitmq:3-management
container_name: rabbit-rabbitmq
ports:
- "5672:5672"
- "15672:15672"
- "61613:61613"
ports: [ "5672:5672", "15672:15672", "61613:61613" ]
command: >
/bin/bash -c "rabbitmq-plugins enable --offline rabbitmq_management rabbitmq_stomp && rabbitmq-server"
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
networks:
- rabbit-default
networks: [ rabbit-default ]

nginx:
image: nginx:latest
container_name: rabbit-nginx
ports:
- "80:80"
- "443:443"
ports: [ "80:80", "443:443" ]
volumes:
- ./nginx/config/nginx.conf:/etc/nginx/conf.d/default.conf
- ./nginx/ssl:/etc/nginx/ssl
networks:
- rabbit-default
networks: [ rabbit-default ]

networks:
rabbit-default:
24 changes: 0 additions & 24 deletions elk/setup/sh/tmp.sh

This file was deleted.

110 changes: 110 additions & 0 deletions mysql/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#!/bin/bash

# MySQL Master-Replica ๋ณต์ œ ์„ค์ • ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ
set -e

log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') [+] $1"
}
sublog() {
echo "$(date '+%Y-%m-%d %H:%M:%S') โ ฟ $1"
}
suberr() {
echo "$(date '+%Y-%m-%d %H:%M:%S') โŒ $1" >&2
}

log "MySQL Master-Replica ๋ณต์ œ ์„ค์ •์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค..."

log "Master DB ์—ฐ๊ฒฐ ๋Œ€๊ธฐ ์ค‘..."
until mysql -h rabbit-mysql-master -u root -p1234 -e "SELECT 1" > /dev/null 2>&1; do
sublog "Master DB ์—ฐ๊ฒฐ ๋Œ€๊ธฐ ์ค‘..."
sleep 3
done
sublog "Master DB ์—ฐ๊ฒฐ๋จ"

log "Replica DB ์—ฐ๊ฒฐ ๋Œ€๊ธฐ ์ค‘..."
until mysql -h rabbit-mysql-replica -u root -p1234 -e "SELECT 1" > /dev/null 2>&1; do
sublog "Replica DB ์—ฐ๊ฒฐ ๋Œ€๊ธฐ ์ค‘..."
sleep 3
done
sublog "Replica DB ์—ฐ๊ฒฐ๋จ"

log "DB ์ดˆ๊ธฐํ™” ์™„๋ฃŒ ๋Œ€๊ธฐ ์ค‘..."
sleep 10
sublog "DB ์ดˆ๊ธฐํ™” ์™„๋ฃŒ"

log "Master DB์—์„œ ๋ณต์ œ ์‚ฌ์šฉ์ž ํ™•์ธ ์ค‘..."
REPLICA_USER_EXISTS=$(mysql -h rabbit-mysql-master -u root -p1234 -e "SELECT COUNT(*) FROM mysql.user WHERE user='replica';" 2>/dev/null | tail -n 1)
if [ "$REPLICA_USER_EXISTS" -eq 0 ]; then
sublog "๋ณต์ œ ์‚ฌ์šฉ์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ ์ค‘..."
mysql -h rabbit-mysql-master -u root -p1234 << EOF
CREATE USER IF NOT EXISTS 'replica'@'%' IDENTIFIED WITH mysql_native_password BY '1234';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;
EOF
sublog "๋ณต์ œ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."
else
sublog "๋ณต์ œ ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค."
fi

log "Master DB์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ์ƒํƒœ ํ™•์ธ ์ค‘..."
MASTER_STATUS=$(mysql -h rabbit-mysql-master -u root -p1234 -e "SHOW MASTER STATUS\G" 2>/dev/null)
MASTER_FILE=$(echo "$MASTER_STATUS" | grep "File:" | awk '{print $2}')
MASTER_POSITION=$(echo "$MASTER_STATUS" | grep "Position:" | awk '{print $2}')
sublog "Master File: $MASTER_FILE"
sublog "Master Position: $MASTER_POSITION"

if [ -z "$MASTER_FILE" ] || [ -z "$MASTER_POSITION" ]; then
suberr "Master ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."
exit 1
fi

log "๊ธฐ์กด ๋ณต์ œ ์„ค์ • ์ •๋ฆฌ ์ค‘..."
mysql -h rabbit-mysql-replica -u root -p1234 << EOF
STOP SLAVE;
RESET SLAVE ALL;
EOF
sublog "๊ธฐ์กด ๋ณต์ œ ์„ค์ • ์ •๋ฆฌ ์™„๋ฃŒ"

log "Replica DB์—์„œ Master ์—ฐ๊ฒฐ ์„ค์ • ์ค‘..."
mysql -h rabbit-mysql-replica -u root -p1234 << EOF
CHANGE MASTER TO
MASTER_HOST='rabbit-mysql-master',
MASTER_USER='replica',
MASTER_PASSWORD='1234',
MASTER_LOG_FILE='$MASTER_FILE',
MASTER_LOG_POS=$MASTER_POSITION,
MASTER_CONNECT_RETRY=10,
MASTER_RETRY_COUNT=3;
START SLAVE;
EOF
sublog "Master ์—ฐ๊ฒฐ ์„ค์ • ์™„๋ฃŒ"

log "๋ณต์ œ ์—ฐ๊ฒฐ ๋Œ€๊ธฐ ๋ฐ ์ƒํƒœ ํ™•์ธ ์ค‘..."
for i in {1..30}; do
SLAVE_STATUS=$(mysql -h rabbit-mysql-replica -u root -p1234 -e "SHOW SLAVE STATUS\G" 2>/dev/null)
IO_RUNNING=$(echo "$SLAVE_STATUS" | grep "Slave_IO_Running:" | awk '{print $2}')
SQL_RUNNING=$(echo "$SLAVE_STATUS" | grep "Slave_SQL_Running:" | awk '{print $2}')

sublog "์‹œ๋„ $i/30 - IO Running: $IO_RUNNING, SQL Running: $SQL_RUNNING"

if [ "$IO_RUNNING" = "Yes" ] && [ "$SQL_RUNNING" = "Yes" ]; then
sublog "โœ… MySQL Master-Replica ๋ณต์ œ ์„ค์ •์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!"
log "๋ณต์ œ ์ƒํƒœ ์ƒ์„ธ ์ •๋ณด ์ถœ๋ ฅ"
mysql -h rabbit-mysql-replica -u root -p1234 -e "SHOW SLAVE STATUS\G" | grep -E "(Slave_IO_Running|Slave_SQL_Running|Master_Host|Master_User|Read_Master_Log_Pos|Exec_Master_Log_Pos)"
exit 0
elif [ "$IO_RUNNING" = "No" ]; then
suberr "IO ์Šค๋ ˆ๋“œ ์—ฐ๊ฒฐ ์‹คํŒจ. ์˜ค๋ฅ˜ ํ™•์ธ ์ค‘..."
LAST_IO_ERROR=$(echo "$SLAVE_STATUS" | grep "Last_IO_Error:" | cut -d':' -f2- | xargs)
if [ -n "$LAST_IO_ERROR" ]; then
suberr "IO ์˜ค๋ฅ˜: $LAST_IO_ERROR"
fi
break
fi
sleep 2
done

suberr "๋ณต์ œ ์„ค์ •์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ข… ์ƒํƒœ: IO Running: $IO_RUNNING, SQL Running: $SQL_RUNNING"
log "๋ณต์ œ ์˜ค๋ฅ˜ ์ •๋ณด ์ถœ๋ ฅ"
mysql -h rabbit-mysql-replica -u root -p1234 -e "SHOW SLAVE STATUS\G" | grep -E "(Last_IO_Error|Last_SQL_Error)"
exit 1
109 changes: 0 additions & 109 deletions mysql/setup-replication.sh

This file was deleted.

Loading