์๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ธ์ฅ ํ๋๋ ๋ค๋ฅธ ๋์คํฌ์ ์ค์๊ฐ์ผ๋ก ๋ฐฑ์
(๋ฏธ๋ฌ๋ง) ํ๊ณ ์ถ์ ๋,Lsyncd๋ ๋งค์ฐ ๊ฐ๋ ฅํ ์ ํ์ด๋ค.
์ด ๊ธ์์๋ Docker ํ๊ฒฝ์์ Lsyncd๋ฅผ ๊ตฌ์ฑํด, ์ฌ๋ถํ ํ์๋ ์๋์ผ๋ก ๋์ํ๋ ํ๋ ๋ฐฑ์ ์์คํ ์ ์์ฑํ๋๋ก ํ๊ฒ ๋ค.
์ฐ์ Lsyncd๋?
Lsyncd(Live Syncing Daemon)๋ Linux์ inotify ๊ธฐ๋ฅ์ ํ์ฉํด,
ํน์ ํด๋์ ๋ณ๊ฒฝ์ ์ค์๊ฐ ๊ฐ์งํ๊ณ rsync๋ก ๋๊ธฐํํ๋ ๋ฐ๋ชฌ์ด๋ค.
์ฆ, ํ์ผ์ด ์ถ๊ฐ·์์ ·์ญ์ ๋ ๋๋ง๋ค ๋์ ํด๋์ ์๋ ๋ฐ์ํ๋ค.
→ “์ค์๊ฐ ๋ฏธ๋ฌ๋ง ๋ฐฑ์
” ๊ณผ ๋์ผํ ํจ๊ณผ๋ฅผ ๋ธ๋ค.
๊ตฌ์ฑ ๋ฐฉ์
[ํธ์คํธ: /data] ←→ [Docker ์ปจํ
์ด๋: lsyncd] ←→ [์ธ์ฅํ๋: /backup]
/data: ์๋ณธ ๋ฐ์ดํฐ๊ฐ ์๋ ํด๋ (์: ์๋ฒ ๋ฐ์ดํฐ, ๋ก๊ทธ, ํ๋ก์ ํธ ํ์ผ ๋ฑ)/backup: ์ธ์ฅ ํ๋ ๋ง์ดํธ ๊ฒฝ๋ก (๋๊ธฐํ ๋์)lsyncd: Docker ์ปจํ ์ด๋๋ก ๋์ํ๋ฉฐ ์ค์๊ฐ ๊ฐ์ + ๋๊ธฐํ ์ํ
1. ํด๋ ์ค๋น
๋จผ์ , ๋๊ธฐํํ ํด๋์ ๋ฐฑ์ ํด๋๋ฅผ ๋ง๋ ๋ค.
sudo mkdir -p /data sudo mkdir -p /backup
์ด์ ์ธ์ฅํ๋๋ฅผ /backup ๊ฒฝ๋ก์ ๋ง์ดํธํ๋ค.
UUID ๊ธฐ๋ฐ์ผ๋ก ์๋ ๋ง์ดํธ๋๋๋ก /etc/fstab์ ๋ฑ๋กํด๋๋ ๊ฒ ์ข๋ค.
sudo blkid # ์ธ์ฅํ๋์ UUID ํ์ธ
sudo vi /etc/fstab # ๋งจ ์๋ซ์ค์ ์์ ์ถ๊ฐ
์์:
UUID=1234-ABCD /backup ext4 defaults 0 0
์ ์ฉ:
sudo mount -a
2. Dockerfile ์์ฑ
lsyncd๋ฅผ Docker๋ก ์คํํ ์ ์๋๋ก ์ด๋ฏธ์ง ๊ตฌ์ฑ์ ๋ง๋ ๋ค.
Dockerfile
FROM ubuntu:22.04
RUN apt-get update && \
apt-get install -y lsyncd rsync && \
mkdir -p /etc/lsyncd /sync_source /sync_target
COPY lsyncd.conf.lua /etc/lsyncd/lsyncd.conf.lua
CMD ["lsyncd", "-nodaemon", "/etc/lsyncd/lsyncd.conf.lua"]
3. Lsyncd ์ค์ ํ์ผ ์์ฑ
lsyncd.conf.lua
settings {
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd.status",
maxDelays = 5,
}
sync {
default.rsync,
source = "/sync_source",
target = "/sync_target",
rsync = {
archive = true,
compress = false,
verbose = true,
}
}
์ฃผ์ ์ต์ ์ค๋ช
| ํญ๋ชฉ | ์ค๋ช |
|---|---|
logfile |
๋ก๊ทธ ๊ฒฝ๋ก |
inotifyMode |
๋ณ๊ฒฝ ๊ฐ์ง ๋ชจ๋ (CloseWrite๋ ํ์ผ ๋ซํ ๋ ๊ฐ์ง) |
maxDelays |
๋๊ธฐํ ์ง์ฐ ์ต๋ ์๊ฐ (์ด ๋จ์) |
archive |
ํ์ผ ์์ ์/๊ถํ/ํ์์คํฌํ ์ ์ง |
--delete |
์๋ณธ์์ ์ญ์ ๋ ํ์ผ์ ๋์์์๋ ์ญ์ (์์ ๋ฏธ๋ฌ๋ง) |
4. docker-compose.yml ์์ฑ
docker-compose.yml
version: "3.8"
services:
lsyncd:
build: .
container_name: lsyncd_backup
volumes:
- /data:/sync_source:ro
- /backup:/sync_target
- ./lsyncd.conf.lua:/etc/lsyncd/lsyncd.conf.lua:ro
restart: unless-stopped
/data๋ ์ฝ๊ธฐ ์ ์ฉ(:ro)๋ก ๋ง์ดํธํด ์๋ณธ์ ๋ณดํธํ๊ณ ,/backup์ ์ฐ๊ธฐ ๊ฐ๋ฅ์ผ๋ก ๋์ด ๋ณต์ ์์ ์ด ๊ฐ๋ฅํ๊ฒ ํ๋ค.
5. ์คํํ๊ธฐ
docker compose up -d # -d ์ต์
์ ๋นผ๋ฉด ํ์ฌ ์ํ๋ฅผ ๋ฐ๋ก ํ์ธ
์ ์ ์คํ๋๋ฉด Lsyncd๊ฐ /data ํด๋์ ๋ณ๊ฒฝ์ ์ค์๊ฐ ๊ฐ์งํ์ฌ/backup์ ์๋์ผ๋ก ๋ฐ์ํ๋ค.
๋ก๊ทธ ํ์ธ:
docker logs -f lsyncd_backup
6. ์ฌ๋ถํ ํ ์๋ ์คํ
Compose ํ์ผ์ restart: unless-stopped ์ต์
๋๋ถ์
Docker ๋ฐ๋ชฌ์ด ๋ถํ
๋ ๋ Lsyncd ์ปจํ
์ด๋๊ฐ ์๋ ์ฌ์์๋๋ค.
ํ์ธ:
sudo systemctl is-enabled docker
๋ง์ฝ ๋นํ์ฑ์ด๋ผ๋ฉด:
sudo systemctl enable docker
์ด์ ์๋ฒ๊ฐ ์ฌ๋ถํ ๋ผ๋ ์๋ ๋ฐฑ์ ์ด ์ ์ง๋๋ค.
7. Docker ๊ถํ ๊ตฌ์กฐ ์ดํด
Lsyncd ์ปจํ
์ด๋๋ ์ปจํ
์ด๋ ๋ด๋ถ์์ root ๊ถํ์ผ๋ก ๋์ํ๋ค.
ํ์ง๋ง ํธ์คํธ ์ ์ฒด์ root ๊ถํ์ ์๋๋ค.
| ๊ถํ ์ข ๋ฅ | ์ค๋ช |
|---|---|
| ์ปจํ ์ด๋ ๋ด๋ถ root | ์์ |
| ํธ์คํธ ์ ์ฒด root | ์์ |
| ๋ง์ดํธ๋ ๋๋ ํ ๋ฆฌ ์กฐ์ | ๊ฐ๋ฅ |
| ์์คํ ์ค์ / ์ปค๋ ์ ๊ทผ | ๋ถ๊ฐ๋ฅ |
์ฆ, /data, /backup ํด๋ ๋ด์ ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ/์ญ์ ๋ ๊ฐ๋ฅํ์ง๋ง
ํธ์คํธ OS ์์ฒด์๋ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
โ ๏ธ
--privileged์ต์ ์ ์ฃผ๋ฉด ํธ์คํธ์ root ๊ถํ๊ณผ ๊ฑฐ์ ๋์ผํด์ง์ง๋ง,
๋ณด์์ ๋งค์ฐ ์ํํ๋ฏ๋ก ์ ๋ ์ถ์ฒํ์ง ์๋๋ค.
8. ์ค์ ๋์ ์์
1๏ธโฃ /data์ ํ์ผ์ ์์ฑ
echo "test" > /data/example.txt
2๏ธโฃ /backup ํ์ธ
cat /backup/example.txt
3๏ธโฃ /data์์ ํ์ผ ์ญ์
rm /data/example.txt
→ ์ ์ ํ /backup/example.txt๋ ์๋ ์ญ์ ๋จ.
๊ฒฐ๋ก
- ์ค์๊ฐ ๋ณ๊ฒฝ ๊ฐ์ง (inotify ๊ธฐ๋ฐ)
- Docker๋ก ํ๊ฒฝ ๋ถ๋ฆฌ
- ์ฌ๋ถํ ํ์๋ ์๋ ์คํ
- ์๋ณธ ๋ณดํธ (
:ro๋ง์ดํธ) - ํธ์คํธ ์์คํ ์ ์ํฅ ์์
๋จ์ ์ด๋ผ๋ฉด, Docker๋ฅผ ํตํ ์ค๋ฒํค๋๊ฐ ์์ฃผ ์ฝ๊ฐ ์กด์ฌํ๋ค๋ ์ ์ ๋๋ค.
ํ์ง๋ง ์์ ํ๊ณ , ์ ์ง๋ณด์๊ฐ ์ฌ์ฐ๋ฉฐ, ์ด์์ฑ์ด ๋๋ค.
๐ก ์ด ์ค์ ์ ๊ธฐ๋ฐ์ผ๋ก, NAS๋ ๋ฐฑ์
์๋ฒ ์๋ํ์๋ ํ์ฅ ๊ฐ๋ฅํ๋ค.
์๋ฅผ ๋ค์ด /backup์ NFS๋ SMB ๊ณต์ ํด๋๋ก ์ฐ๊ฒฐํด ๋คํธ์ํฌ ๋ฐฑ์
์์คํ
์ผ๋ก๋ ์์ฝ๊ฒ ํ์ฅํ ์ ์๋ค.
'๐ง Linux' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Docker] ์์ฝ๊ฒ ๋ฅ์คํธํด๋ผ์ฐ๋ ๊ฐ์ธ๋์ค ๊ตฌ์ฑ (0) | 2025.11.20 |
|---|---|
| [Docker] ์์ฝ๊ฒ NodeJS ํ๋ก์ ํธ ๊ตฌ์ฑ (with docker-compose) (0) | 2025.11.20 |
| Certbot SSL๋ฐ๊ธ ์ต๊ณ ์ ์ ์ฉ ๋ฐฉ๋ฒ with Nginx (0) | 2025.03.04 |
| [Linux] ์๋ฒ์ Nvidia ๊ทธ๋ํฝ ๋๋ผ์ด๋ฒ ์ค์น (1) | 2024.12.12 |
| [๋ฆฌ๋ ์ค] ๋๋ง์ ๋ช ๋ น์ด ๋ง๋ค๊ธฐ (์ปค์คํ ์ปค๋งจ๋) (1) | 2024.11.29 |