lsync - ½Ç½Ã°£ µ¿±âÈ
Lsyncd´Â ¡°Live Syncing Daemon¡±ÀÇ ¾àÀÚ·Î master ¼¹ö¿¡ ÆÄÀÏ ¶Ç´Â µð·ºÅ丮°¡ º¯°æ »çÇ×ÀÌ ÀÖÀ¸¸é inotify·Î º¯°æ»çÇ×À» üũ ÇÏ¿© slave ¼¹ö·Î ÆÄÀÏ ¶Ç´Â µð·ºÅ丮°¡ µ¿±âÈ ¶Ç´Â º¹Á¦°¡ µÇ¸ç, À̶§ rsync ¿Í ssh¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù.
rsync´Â Remote synchronization ÀÇ ¾àÀÚ·Î local °ú remote ÀÇ µ¥ÀÌÅÍ µ¿±âȸ¦ À§ÇÑ À¯Æ¿¸®Æ¼ ÀÔ´Ï´Ù. Linux System°ú Unix System ¿¡¼ ¹é¾÷ ¿ëµµ·Î °¡Àå ³Î¸® »ç¿ëÇÏ´Â À¯Æ¿ÀÔ´Ï´Ù.
rsync À¯Æ¿ÀÇ ÀåÁ¡À¸·Î ³×Æ®¿öÅ© ´ë¿ªÆøÀ» ÃÖ¼ÒÈÇÏ´Â µ¨Å¸ ÀÎÄÚµù ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ¿© º¯°æÀÌ ÀÏ¾î³ ºÎºÐ¸¸ Àü¼ÛÇϹǷΠºü¸£°í, È¿À²ÀûÀ¸·Î µ¥ÀÌÅ͸¦ µ¿±âÈ ¹× º¹Á¦¸¦ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
µ¿±âÈÀÇ ¹æ½ÄÀº À̵¿ ¹æ¹ý¿¡ µû¶ó Å©°Ô 4°¡Áö Á¾·ù°¡ ÀÖ½À´Ï´Ù.
A ¿Í B ¼¹öÀÇ µ¿±âȸ¦ ÇÑ´Ù°í °¡Á¤ ÇÑ´Ù¸é, ¾Æ·¡¿Í °°ÀÌ ³ª´ ¼ö ÀÖ½À´Ï´Ù.
A ¡æ B : A ¼¹ö¿¡¼ B ¼¹ö·Î ÆÄÀÏÀ» ¹Ð¾î ³Ö´Â ¹æ¹ý (Upload)
A ¡æ B : B ¼¹ö¿¡¼ A ¼¹ö¿¡ ÀÖ´Â ÆÄÀÏÀ» ´ç°Ü ¹Þ´Â ¹æ¹ý (Download)
B ¡æ A : B ¼¹ö¿¡¼ A ¼¹ö·Î ÆÄÀÏÀ» ¹Ð¾î ³Ö´Â ¹æ¹ý (Upload)
B ¡æ A : A ¼¹ö¿¡¼ B ¼¹ö¿¡ ÀÖ´Â ÆÄÀÏÀ» ´ç°Ü ¹Þ´Â ¹æ¹ý (Download)
lsyncd »ç¿ëÀ» À§Çؼ A ¼¹ö¿¡¼ B ¼¹ö·Î ÆÄÀÏÀ» ¹Ð¾î ³Ö´Â ¹æ¹ýÀΠù¹øÂ° ¹æ½ÄÀ» »ç¿ëÇÏ¿© Å×½ºÆ®¸¦ ÁøÇà ÇϰڽÀ´Ï´Ù.
0. ±âŸ
Å×½ºÆ® ȯ°æ
(ÁÖ)¿¡½ºÀ¯¼ÒÇÁÆ®¿¡¼ Á¦°ø ¹Þ¾Æ sulinux 17 64bit¸¦ »ç¿ëÇÏ¿´À¸¸ç, Å×½ºÆ® ¹× ÀÛ¾÷ ÁøÇàÀ» È®ÀÎ Çϱâ À§ÇÏ¿© ¼¹ö 3´ë¸¦ µ¿ÀÏÇÑ ¹öÀüÀ¸·Î ¼³Ä¡ÇÏ¿´½À´Ï´Ù.
- Kernel : 3.10.0-514.el7.x86_64
- OS : sulinux-release-17-3.1703.el7.sulinux.x86_6
- Master A ÀÇ IP : 192.168.0.106
- Slave B ÀÇ IP : 192.168.0.128
- Slave C ÀÇ IP : 192.168.0.133
¿ä±¸ »çÇ× (¼³Ä¡ ¹× µ¿ÀÛ Á¶°Ç)
master A ¼¹ö¿¡ rsync ¿Í Á¾¼Ó ÆÐŰÁöµéÀÌ ÇÊ¿äÇϸç, yum À¸·Î ¼³Ä¡ ÁøÇàÇÏ¿´½À´Ï´Ù.
- kernel 2.6.13 ÀÌ»ó
- rsync libxml2 libxml2-devel
- lsync lua lua-devel pkgconfig gcc asciidoc
±Û ³»¿ë°ú ½ÇÁ¦ ½©»ó¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸í·É¾îÀÇ Â÷ÀÌÁ¡À» µÎ±â À§ÇÏ¿© ¸®´ª½º ½© »ó¿¡¼ »ç¿ëÇÏ´Â ¸í·ÉÀº $ ±âÈ£¸¦ ¾Õ¿¡ µÎ¾î Ç¥½Ã ÇÏ¿´½À´Ï´Ù.
¸í·É¾î¸¦ ±×´ë·Î º¹»çÇÏ¿© »ç¿ëÇÏ¸é ±âÈ£ ' " ' ` µî Àû¿ëÀÌ µÇÁö ¾Ê´Â ºÎºÐÀÌ ÀÖÀ» ¼ö ÀÖÀ¸¸ç, ¸í·É¾î º¹»ç ÈÄ¿¡ ±âÈ£¸¦ ¼öÁ¤ ÇÏ½Ã°í »ç¿ëÇÏ¸é µË´Ï´Ù.
1. Ä¿³Î ¹öÀü È®ÀÎ
Ä¿³ÎÀº 3.10.0À¸·Î 2.6.13 ¹öÀüÀÇ »óÀ§ ¹öÀüÀ¸·Î È®ÀÎ µÇ¾úÀ¸¹Ç·Î, ÇÊ¿ä ÆÐŰÁöµéÀ» ¼³Ä¡ ÇÕ´Ï´Ù. inotify ¼³Á¤ ¶ÇÇÑ È®ÀÎÀ» ÇÕ´Ï´Ù. uname -r Àº ¼¹öÀÇ kernel À» È®ÀÎÇÏ´Â ¸í·É¾î À̸ç, inotify ¼³Á¤ È®Àνà [ µû¿ÈÇ¥ Apostrophe(') ]°¡ ¾Æ´Ñ [ ¹°°áÇ¥½Ã ¾Æ·¡ µû¿ÈÇ¥ Grave (`) ] ÀÔ´Ï´Ù.
$ uname -r
3.10.0-514.el7.x86_64
$ cat /boot/config-`uname -r` | grep -i inotify
CONFIG_INOTIFY_USER=y
2. ¼³Ä¡ °úÁ¤
@ ¼³Ä¡
rsync ¿Í libxml2 ´Â ±âº»ÀûÀ¸·Î ¼³Ä¡°¡ µÇ¾î ÀÖÀ¸¸ç, µÎ ÆÐŰÁöÀÇ ¼³Ä¡ ÁøÇàÀ» ÇÏ¸é ¾÷µ¥ÀÌÆ® ȤÀº latest version(ÃֽйöÀü)À̶ó´Â ÇØ´ç ¸Þ½ÃÁö¸¦ º¼ ¼ö ÀÖ½À´Ï´Ù.
libxml2-devel ÆÐŰÁö´Â ¼³Ä¡°¡ ¾ÈµÇ¾î ÀÖÀ¸¹Ç·Î ¼³Ä¡ ÁøÇàÀ» ÇÕ´Ï´Ù.
µ¿±âÈ ÆÄÀÏÀ̳ª µð·ºÅ丮°¡ ÀÖ´Â master A ¼¹ö, Slave B C ¿¡ ¼³Ä¡¸¦ ÁøÇà ÇÏ¸é µË´Ï´Ù.
$ yum install libxml2 libxml2-devel rsync
..
..
Package libxml2-2.9.1-6.el7_2.3.x86_64 already installed and latest version
..
..
..
Dependencies Resolved
================================================================== Package Arch Version Repository Size
==================================================================
Installing:
libxml2-devel x86_64 2.9.1-6.el7_2.3 base 1.0 M
Installing for dependencies:
xz-devel x86_64 5.2.2-1.el7 base 45 k
zlib-devel x86_64 1.2.7-17.el7 base 49 k
Transaction Summary
==================================================================
Install 1 Package (+2 Dependent packages)
Total download size: 1.1 M
Installed size: 9.1 M
Is this ok [y/d/N]: y
..
...
Installed:
libxml2-devel.x86_64 0:2.9.1-6.el7_2.3
Complete!
@ ¼³Ä¡_2
±âº» ÀúÀå¼Ò¿¡¼´Â lsyncd ÆÐŰÁö¸¦ »ç¿ë ÇÒ ¼ö ¾øÀ¸¹Ç·Î, epel repo¸¦ Ãß°¡ ÇÏ¿© Ȱ¼ºÈ Çϵµ·Ï ÇÕ´Ï´Ù. ±Û¾´ÀÌ´Â dl.fedoraproject.org ÀÇ URL¿¡¼ ÃֽŠrepo¸¦ Ãß°¡ ÇÏ¿´½À´Ï´Ù.
Ãß°¡°¡ ¿Ï·á µÇ¸é yum À» ÀÌ¿ëÇÏ¿© Á¾¼Ó ÆÐŰÁö¿Í lsyncd ÆÐŰÁö¸¦ ¼³Ä¡ ÇÕ´Ï´Ù.
Complete! ¸Þ½ÃÁö°¡ ¸¶Áö¸·¿¡ Ãâ·ÂÀÌ µÇ¸é Á¤»óÀûÀ¸·Î ¼³Ä¡°¡ µÈ °Í ÀÔ´Ï´Ù.
master A ¼¹ö¿¡ ¼³Ä¡¸¦ Çϸç, ¼³Á¤ ¶ÇÇÑ master A ¼¹ö¿¡¼ ÁøÇàÀ» ÇÕ´Ï´Ù.
rpmÀÇ URL °æ·Î´Â ¹Ù²ð ¼ö ÀÖÀ¸¸ç, À¥ºê¶ó¿ìÀú¿¡ ¼öµ¿À¸·Î URL ÁÖ¼Ò¸¦ ÀÔ·ÂÇÏ¿© °æ·Î¸¦ È®ÀÎÇϵµ·Ï ÇÕ´Ï´Ù.
$ rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
# Á¾¼Ó ÆÐŰÁö
$ yum install lua lua-devel pkgconfig gcc asciidoc
.. ...
.. ...
Installed:
asciidoc.noarch 0:8.6.8-5.el7 lua-devel.x86_64 0:5.1.4-15.el7
Dependency Installed:
boost-regex.x86_64 0:1.53.0-27.el7 docbook-dtds.noarch 0:1.0-60.el7 docbook-style-xsl.noarch 0:1.78.1-3.el7 graphviz.x86_64 0:2.30.1-19.el7 libXaw.x86_64 0:1.0.13-4.el7 sgml-common.noarch 0:0.6.3-39.el7
source-highlight.x86_64 0:3.1.6-6.el7
Updated:
gcc.x86_64 0:4.8.5-16.el7_4.1
Dependency Updated:
cpp.x86_64 0:4.8.5-16.el7_4.1 gcc-c++.x86_64 0:4.8.5-16.el7_4.1 gcc-gfortran.x86_64 0:4.8.5-16.el7_4.1 libgcc.x86_64 0:4.8.5-16.el7_4.1 libgfortran.x86_64 0:4.8.5-16.el7_4.1
libgomp.x86_64 0:4.8.5-16.el7_4.1 libquadmath.x86_64 0:4.8.5-16.el7_4.1 libquadmath-devel.x86_64 0:4.8.5-16.el7_4.1 libstdc++.x86_64 0:4.8.5-16.el7_4.1 libstdc++-devel.x86_64 0:4.8.5-16.el7_4.1
Complete!
$ yum install lsyncd
.. ...
.. ...
Installed:
lsyncd.x86_64 0:2.2.2-1.el7
Complete!
@ ¼³Ä¡ È®ÀÎ
$ rpm -qa | grep "rsync\|libxml2\|libxml2-*"
libxml2-2.9.1-6.el7_2.3.x86_64
libxml2-devel-2.9.1-6.el7_2.3.x86_64
rsync-3.0.9-18.el7.x86_64
$ rpm -qa | grep "lua\|lua-devel\|pkgconfig\|gcc\|asciidoc\|lsyncd"
lua-devel-5.1.4-15.el7.x86_64
libgcc-4.8.5-16.el7_4.1.x86_64
asciidoc-8.6.8-5.el7.noarch
gcc-4.8.5-16.el7_4.1.x86_64
gcc-gfortran-4.8.5-16.el7_4.1.x86_64
pkgconfig-0.27.1-4.el7.x86_64
lua-5.1.4-15.el7.x86_64
gcc-c++-4.8.5-16.el7_4.1.x86_64
lsyncd-2.2.2-1.el7.x86_64
@ lsync »ç¿ë Çü½Ä
lsyncd [OPTION]... [SOURCE] [TARGET 1] [TARGET 2] ...
[SOURCE] => µ¿±âȽà ¿øº»ÀÌ Á¸ÀçÇÏ´Â À§Ä¡ /home/test/
[TARGET X] => µ¿±âȰ¡ ÇÊ¿äÇÑ ¼¹ö 192.168.0.3::HOME/test
[OPTION]
--binary FILE rsync ½ÇÇà ÆÄÀÏ À§Ä¡
--conf FILE ½ÇÇà½Ã ·ÎµåÇÒ ¼³Á¤ ÆÄÀϸí (DEFAULT: /etc/lsyncd.conf.xml)
--debug µð¹ö±×¸¦ À§ÇÑ ·Î±×
--exclude-from FILE µ¿±âȽà Á¦¿Ü½Ãų ÆÐÅÏÀÇ ¿É¼Ç
--logfile FILE ·Î±× ÆÄÀÏÀ§Ä¡
--no-daemon Æ÷±×¶ó¿îµå·Î ½ÇÇà ½ÃÅ´
--pidfile FILE pid ÆÄÀÏ »ý¼ºÀ§Ä¡
@ ssh keygen ÀÛ¾÷
¸¶½ºÅÍ¿Í ½½·¹ÀÌºê ¼¹ö °£ÀÇ Å° ±â¹Ý ÀÎÁõÀ» »ç¿ëÇϱâ À§ÇÏ¿©, ¸¶½ºÅÍ ¼¹ö¿¡ ·Î±×ÀÎ Çϰí, ssh-keygenÀ» »ç¿ëÇÏ¿© °ø°³ Ű¿Í °³ÀΠ۸¦ »ý¼º ÇÕ´Ï´Ù.
»ý¼º ÀÛ¾÷ÀÌ ¿Ï·á µÇ¾ú´Ù¸é, ssh-copy-id ¸í·ÉÀ» »ç¿ëÇÏ¿© °ø°³ ۸¦ ½½·¹ÀÌºê ¼¹ö·Î º¹»ç ÇÕ´Ï´Ù.
# keygen »ý¼º
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
0a:5d:c6:37:ec:2c:4b:ab:36:0a:5d:15:5f:e0:0c:97 root@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
| o oo. |
| . OE. |
| = B |
| . + + . |
| . o S o |
| . o o + |
| . . . o |
| . o. |
| .o.. |
+-----------------+
# º¹Á¦
$ ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.0.128
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.0.128's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.0.128'"
and check to make sure that only the key(s) you wanted were added.
@ È®ÀÎ
keygen ±îÁö º¹»ç°¡ ¿Ï·á°¡ µÇ¾ú´Ù¸é, slave ¼¹ö¿¡¼ È®ÀÎÀ» Çϵµ·Ï ÇÕ´Ï´Ù.
º¸¾ÈÀ» À§ÇÏ¿© Áß°£¿¡ °ªµéÀº »ý·«ÇÏ¿© Ãâ·ÂÇÏ¿´½À´Ï´Ù.
slave B
$ cat /root/.ssh/authorized_keys
ssh-rsa AAAA¡¦ .. ...bbbBB root@localhost.localdomain
@ lsyncdÀÇ ±¸¼º ÆÄÀÏ ¼³Á¤
¼³Ä¡ ÀÛ¾÷À» ¿Ï·á ÇÏ¿´´Ù¸é Ç×»ó ½À°üÀûÀ¸·Î È®ÀÎÀ» Çϵµ·Ï ÇսôÙ.
È®ÀαîÁö ¸¶Ä£ ÈÄ ±¸¼º ÆÄÀÏÀ» ¼³Á¤ ÇϰڽÀ´Ï´Ù.
»ùÇà ÆÄÀÏÀ» /etc/lsyncd.conf À¸·Î º¹»ç¸¦ ÇÕ´Ï´Ù. ¼³Á¤ ÆÄÀÏÀÌ »ý¼ºµÇ¾î ÀÖ´Ù¸é, ¹é¾÷ ÈÄ º¹»ç¸¦ ÁøÇà ÇÏ¸é µË´Ï´Ù.
º¹»ç¸¦ ¸¶Ä£ ÈÄ ±¸¼º ÆÄÀÏÀ» ´ÙÀ½°ú °°°Ô ¼³Á¤ ÇÕ´Ï´Ù.
slave C ¿¡´Â delete ¿É¼ÇÀ» ÁÖ¾î master ¼¹ö¿¡¼ µð·ºÅ丮³ª ÆÄÀÏ »èÁ¦½Ã slave C ¼¹ö¿¡µµ ÇÔ²² »èÁ¦°¡ µÇµµ·Ï ¼³Á¤ ÇÏ¿´½À´Ï´Ù.
slave C ¿¡´Â archive ¿É¼ÇÀ» ÁÖ¾î permission °ú ¼ÒÀ¯±Ç ¶ÇÇÑ µ¿ÀÏÇÏ°Ô º¹»ç°¡ µÇµµ·Ï ¼³Á¤ ÇÏ¿´½À´Ï´Ù.
slave C ¿¡´Â exclude ¿É¼ÇÀ» ÁÖ¾î test01 µð·ºÅ丮¿Í work_2018 À̶ó´Â ÆÄÀÏÀ» Á¦¿ÜÇÏ°í µ¿±âÈ Çϵµ·Ï ¼³Á¤ ÇÏ¿´½À´Ï´Ù.
1) »ùÇà ÆÄÀÏ º¹»ç
$ cp /usr/share/doc/lsyncd-2.2.2/examples/lrsync.lua /etc/lsyncd.conf
$ cat /etc/lsyncd.conf ## ¼öÁ¤ Àü
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings {
statusFile = "/tmp/lsyncd.stat",
statusInterval = 1,
}
sync{
default.rsync,
source="src",
target="trg",
}
# ¼³Á¤À» À§ÇØ ¼öÁ¤À» ÇÕ´Ï´Ù.
$ vi /etc/lsyncd.conf
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings {
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd.stat",
statusInterval = 2,
}
sync{
default.rsync,
source="/home/",
target="192.168.0.128:/root/home2/",
rsync={rsh ="/usr/bin/ssh -l root -i /root/.ssh/id_rsa",}
}
sync{
default.rsync,
source="/home/",
delete=true,
target="192.168.0.133:/root/home3/",
exclude={'/test01','work_2018'},
rsync={rsh ="/usr/bin/ssh -l root -i /root/.ssh/id_rsa",archive=true,}
}
log ÆÄÀÏÀº /var/log/lsyncd.log ÆÄÀÏ À̸ç, lsync ¼ºñ½ºÀÇ »óÅ ȮÀÎÀº /var/log/lsyncd.stat ¿¡¼ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
@ ¼ºñ½º ½ÃÀÛ
¼³Á¤ÀÌ ¿Ï·á µÇ¾ú´Ù¸é, ½Ã½ºÅÛÀÌ ÀçºÎÆÃ(reboot)ÀÌ µÉ ¶§ »ç¿ëÇϵµ·Ï ¼³Á¤À» ÇÏ°í ¼ºñ½º¸¦ ½ÃÀÛ ÇÕ´Ï´Ù.
$ systemctl start lsyncd
$ systemctl enable lsyncd
@ È®ÀÎ
±Û¾´ÀÌ´Â master ¼¹öÀÇ /home/ ÀÌÇÏ µð·ºÅ丮¸¦ slave B ¼¹ö¿¡´Â /root/home2/ ÀÇ °æ·Î·Î µ¿±âȸ¦ ÁøÇà ÇÏ¿´À¸¸ç, slave C ¼¹ö¿¡´Â /root/home3/ °æ·Î¿¡ µ¿±âȸ¦ ÁøÇà ÇÏ¿´½À´Ï´Ù.
$ systemctl status lsyncd.service
¡Ü lsyncd.service - Live Syncing (Mirror) Daemon
Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled)
Active: active (running) since È 2017-12-25 19:20:19 KST; 5s ago
Main PID: 6119 (lsyncd)
CGroup: /system.slice/lsyncd.service
¦¦¦¡6119 /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf
12¿ù 25 19:20:19 localhost.localdomain systemd[1]: Started Live Syncing (Mirror) Daemon.
12¿ù 25 19:20:19 localhost.localdomain systemd[1]: Starting Live Syncing (Mirror) Daemon...
@ Error
¾Æ·¡ÀÇ ¼³Á¤Ã³·³ slave B ¼¹öÀÇ /root/ µð·ºÅ丮 ¹Ø¿¡ home2 µð·ºÅ丮°¡ »ý¼ºµÇ¾îÀÖÁö ¾Ê¾Æµµ ÀÚµ¿À¸·Î »ý¼ºÀÌ µÇ°Ô µË´Ï´Ù.
$ cat /etc/lsyncd.conf
.. ...
source="/home/",
target="192.168.0.128:/root/home2/",
.. ¡¦
ÇÏÁö¸¸ slave B ¼¹öÀÇ »ý¼ºµÇÁö ¾ÊÀº home3 µð·ºÅ丮ÀÇ test01 °æ·Î·Î ÁöÁ¤ÀÌ µÇ¸é Á¤»óÀûÀ¸·Î µ¿±âȰ¡ µÇÁö ¾Ê½À´Ï´Ù. µû¶ó¼ slave B ¼¹ö¿¡ mkdir ¸í·É¾î »ç¿ëÇÏ¿© ÇØ´ç °æ·Î¸¦ ¸¸µé¾î Áà¾ß ÇÕ´Ï´Ù.
$ cat /etc/lsyncd.conf
.. ...
source="/home/",
target="192.168.0.128:/root/home3/test01",
.. ¡¦
## error message
$ systemctl status lsyncd
¡Ü lsyncd.service - Live Syncing (Mirror) Daemon
Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled)
Active: active (running) since È 2017-12-25 17:50:21 KST; 7min ago
.. ...
.. ...
12¿ù 25 17:57:11 localhost.localdomain lsyncd[28239]: rsync: connection unexpectedly closed (9 bytes received so far) [sender]
12¿ù 25 17:57:11 localhost.localdomain lsyncd[28239]: rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
4¿ù 03 17:57:26 localhost.localdomain lsyncd[28239]: rsync: mkdir "/root/home3/test01" failed: No such file or directory (2)
.. ...
slave B
$ mkdir /root/home3/
@ ·Î±× È®ÀÎ
¸¶Áö¸·À¸·Î master ¼¹ö¿¡¼ slave ¼¹ö·Î Á¤»óÀûÀÎ µ¿±âȰ¡ ÁøÇàµÇ´ÂÁö ·Î±×¸¦ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ¾Æ·¡¿¡´Â master ¼¹ö 1´ë¸¦ slave 2´ë ¼¹ö¿¡ lsync ¼ºñ½º¸¦ Àû¿ëÇÑ ¿¹ ÀÔ´Ï´Ù.
µ¿±âÈ µÇ´Â µð·ºÅ丮 ¹× ÆÄÀÏÀ» È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
$ cat /var/log/lsyncd.log
.. ...
Wed Apr 4 09:50:28 2018 Normal: --- Startup ---
Wed Apr 4 09:50:28 2018 Normal: recursive startup rsync: /home/ -> 192.168.0.128:/root/home3/
Wed Apr 4 09:50:28 2018 Normal: recursive startup rsync: /home/ -> 192.168.0.133:/root/home3/
Wed Apr 4 09:50:29 2018 Normal: Startup of /home/ -> 192.168.0.133:/root/home3/ finished.
Wed Apr 4 09:50:29 2018 Normal: Startup of /home/ -> 192.168.0.128:/root/home3/ finished.
.. ...
$ tail -f /var/log/lsyncd.status
.. ...
Lsyncd status report at Wed Apr 25 10:00:00 2017
Sync1 source=/home/
There are 0 delays
.. ¡¦
.. ...
Sync2 source=/home/
There are 0 delays
Excluding:
nothing.
Inotify watching 98 directories
1: /home/
2: /home/test01/
3: /home/test01/´Ù¿î·Îµå/
4: /home/test01/¹®¼/
5: /home/test01/.cache/
6: /home/test01/.cache/abrt/
.. ...
@ slave ¼¹ö È®ÀÎ
slave ¼¹ö µÎ´ë¿¡ Á¢¼ÓÇÏ¿© Á¤»óÀûÀ¸·Î ÆÄÀÏÀÌ µ¿±âÈ µÇ¾ú´ÂÁöµµ È®ÀÎÇØ ÁÖµµ·Ï ÇÕ´Ï´Ù.
±Û¾´ÀÌ´Â À§¿¡¼ slave ¼¹öÀÇ /root/home3/ ·Î °æ·Î ÁöÁ¤À» ÇÏ¿´±â ¶§¹®¿¡ ¾Æ·¡¿Í °°ÀÌ È®ÀÎÀ» ÇÏ¿´½À´Ï´Ù. ¸¶½ºÅÍ ¼¹öÀÇ µ¿±âÈ µð·ºÅ丮¿ÍÀÇ ¿ë·®ÀÌ ÀÏÄ¡ÇÏ´ÂÁöÀÇ ¿©ºÎµµ È®ÀÎ ¹æ¹ý Áß ÇѰ¡Áö ¹æ¹ýÀ̶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù.
slave B
$ ls /root/home3/
$ du -sch /root/home3/
@ Trouble_1
¿î¿µÇÏ´Ù º¸¸é µð·ºÅ丮°¡ ÆÈõ°³ ÀÌ»ó ³Ñ´Â °æ¿ì µ¿±âȰ¡ Á¤»óÀûÀ¸·Î ÀÛµ¿ µÇÁö ¾Ê´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. inotify ±âº»ÀûÀÎ ¼³Á¤ °ª È®ÀÎ ÈÄ ¼öÁ¤À» Çϵµ·Ï ÇÕ´Ï´Ù.
$ cat /proc/sys/fs/inotify/max_user_watches
8192
$ vi /etc/sysctl.conf
.. ¡¦
fs.inotify.max_user_watches = 16000
$ sysctl -p
.. ¡¦
fs.inotify.max_user_watches = 16000
$ cat /proc/sys/fs/inotify/max_user_watches
16000
@ Trouble_2
¹æÈº® ¹®Á¦·Î ½Ç½Ã°£ µ¿±âȰ¡ ¾ÈµÇ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. ÀÌ´Â 873 Æ÷Æ®ÀÇ ¹®Á¦°¡ ¾Æ´Ñ sshd port ÀÇ ¿ÀÇÂÀÌ ¾ÈµÇ¾î »ý±â´Â Àå¾Ö ÀÔ´Ï´Ù. ¾Æ·¡¿Í °°ÀÌ ½½·¹ÀÌºê ¼¹öÀÇ sshd Æ÷Æ®°¡ ±âº» Æ÷Æ®°¡ ¾Æ´Ï¸ç, ƯÁ¤ IP¸¸ Çã¿ë ÇÏ¿´À» ½Ã master A ¼¹ö¿¡¼µµ Á¢±Ù ÇÒ ¼ö ÀÖµµ·Ï ¼³Á¤À» ÇÏ¿© ÇØ°á Çϵµ·Ï ÇÕ´Ï´Ù. Ãß°¡ÀûÀ¸·Î master A ¼¹öÀÇ /etc/lsyncd.conf ÆÄÀϵµ ¼öÁ¤À» Çϵµ·Ï ÇÕ´Ï´Ù.
slave
$ cat /etc/ssh/sshd_config | grep -i port
Port 8281
$ vi /etc/sysconfig/iptables
.. ¡¦
-A INPUT -s 192.168.0.106 -m state --state NEW -m tcp -p tcp --dport 8281 -j ACCEPT
.. ...
$ systemctl restart iptables
$ systemctl status iptables
$ iptables -nL
.. ...ACCEPT tcp -- 192.168.0.106 0.0.0.0/0 state NEW tcp dpt:8281
.. ...
master
$ cat /etc/lsyncd.conf
.. ¡¦
sync{
default.rsync,
source="/home/",
target="192.168.0.128:/root/home2/",
rsync={rsh ="/usr/bin/ssh -p 8281 -o StrictHostKeyChecking=no",}
}
.. ..
$ systemctl restart lsyncd
$ systemctl status lsyncd
À̰ÍÀ¸·Î lsyncd ¼³Ä¡ ¹× ¿î¿µ ³¡¸ÎÀ½À» Çϵµ·Ï ÇϰڽÀ´Ï´Ù.
## Âü°í URL
http://axkibe.github.io/lsyncd/manual/config/layer4/
## Âü°í »çÇ× - rsync - ##
¾Æ·¡ÀÇ Âü°í »çÇ× À̸ç, ³»¿ëÀº ÀÐÁö ¾Ê°í ³Ñ¾î°¡µµ lsync »ç¿ë¿¡´Â ÁöÀåÀÌ ¾ø½À´Ï´Ù.
lsync ÀÇ »ç¿ë ¹æ¹ýÀ» À§ÇÑ ¼³Ä¡ ¹æ¹ýÀº Å©°Ô ¾î·ÆÁö ¾Ê½À´Ï´Ù.
ÇÏÁö¸¸ lsync ¸¦ »ç¿ëÇϱâ À§Çؼ´Â rsync ÀÇ ÀÌÇØ°¡ ÇÊ¿äÇϸç,
ÀÌ´Â º¸¾È»ó Áß¿äÇÑ ºÎºÐÀ̱⠶§¹®¿¡ ¾Æ·¡ ºÎºÐÀº ÀÐ°í ³Ñ¾î °¡µµ·Ï ÇսôÙ.
$ cat /etc/rsyncd.conf
[ROOT]
path = /
uid = root
gid = root
use chroot = yes
read only = no
hosts allow = 192.168.0.128
# hosts.allow = 192.168.0.126 ## À߸øµÈ ¼³Á¤
Issue_1) read only = no
path ¼³Á¤µÈ µð·ºÅ丮 ÀÌÇÏ¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏÀÌ º¯Á¶ µÉ ¼ö ÀÖÀ¸´Ï ÁÖÀǸ¦ ¿ä±¸ ÇÕ´Ï´Ù.
$ cat /etc/rsyncd.conf
.. ...
read only = no
.. ...
A ¼¹ö¿¡ À§¿Í °°Àº ¼³Á¤À» ÇÏ¿´´Ù¸é Á¢±Ù Çã¿ëµÈ IP¿¡¼ ¸ðµç ÆÄÀÏÀ» ¹Ð¾î ³ÖÀ» ¼ö ÀÖ½À´Ï´Ù.
A ¼¹öÀÇ ÃÖ»óÀ§ µð·ºÅ丮 "/" ¹Ø¿¡ ÀÖ´Â /etc/passwd, /etc/shadow, /etc/group ÆÄÀÏÀ» B ¼¹öÀÇ Àӽ÷Π¸¸µç /etc/passwd_2 /etc/shadow_2 ÆÄÀÏ·Î º¯Á¶ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
* ¾Æ·¡ ¸í·É¾î·Î È®ÀÎÇØ º¾½Ã´Ù.
1) Master A ¼¹ö
## Å×½ºÆ® ÀÌÈÄ ¿øº¹À» À§ÇÏ¿© MasterA ¼¹öÀÇ passwd ÆÄÀÏÀ» ¹é¾÷ Çϵµ·Ï ÇÕ´Ï´Ù.
$ cp -rp /etc/passwd /etc/passwd_backup
2) Slave B ¼¹ö
## B ¼¹ö¿¡¼ passwd2¶ó´Â ÆÄÀÏÀ» ¸¸µé¾î ÆÄÀÏ ³»¿ëÀ» "test sulinux" ·Î º¯°æÀ» ÇÕ´Ï´Ù.
$ touch passwd2
$ echo "test sulinux" > passwd2
## B -> A ¼¹ö·Î º¯Á¶ÆÄÀÏÀ» ¹Ð¾î ³Ö¾î º¸µµ·Ï ÇÕ´Ï´Ù.
$ rsync -av ./passwd2 [A¼¹öÀÇ ip]::ROOT/etc/passwd
3) A ¼¹ö
## º¯Á¶ ÆÄÀÏÀ» ¹Ð¾î ³ÖÀº ÈÄ È®ÀÎ
$ cat /etc/passwd
test sulinux
4) A ¼¹ö
## º¯Á¶È®ÀÎÀÌ µÇ¾ú´Ù¸é ¿øº¹À» ÇÕ´Ï´Ù.
$ cp -rp /etc/passwd_backup /etc/passwd
Issue_2) À§¿Í °°Àº ¿¹Á¦´Â Çã¿ëµÈ IP¿¡¼ ¸ðµç ÆÄÀÏÀ» ¹Ð¾î ³Ö°Å³ª(Upload), ³»·Á ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù.(Download) ÇÏÁö¸¸ ¾Æ·¡¿Í °°Àº À߸øµÈ ¼³Á¤À¸·Î ƯÁ¤ IP¿¡¼¸¸ Á¢±ÙÀÌ °¡´É Çϵµ·Ï ¼³Á¤À» ÇÏ¿´´Ù°í Âø°¢À» Çϰí ÀÛ¾÷À» Á¾·á ÇÏ¿´´Ù¸é, º¹±¸ ¹æ¹ý¿¡ ¸¹Àº ½Ã°£°ú, ±ÝÀüÀÌ ¼Ò¿ä µÉ ¼ö ÀÖÀ¸´Ï ÁÖÀÇ Çϵµ·Ï ÇսôÙ.
$ cat /etc/rsyncd.conf
[ROOT]
path = /
.. ...
read only = no
.. ...
hosts.allow = 192.168.0.128
1) read only = no
- À§¿Í °°Àº ¼³Á¤À¸·Î ƯÁ¤ IP¿¡ ´ëÇØ¼ Á¢±ÙÀÌ °¡´ÉÇÕ´Ï´Ù.
2) hosts.allow = yes
- À߸øµÈ ¼³Á¤ÀÔ´Ï´Ù. "hosts.allow" ¶ó´Â Parameter´Â Á¸Àç ÇÏÁö ¾Ê½À´Ï´Ù.
±×·¯¹Ç·Î ÇØ´ç ¼³Á¤Àº Àû¿ëÀÌ µÇÁö ¾ÊÀ¸¸ç, ¸ðµç IP¿¡¼ Á¢±ÙÀÌ °¡´ÉÇÕ´Ï´Ù.
3) ½Ç½À ¹æ¹ýÀº °£´ÜÇÕ´Ï´Ù.
ÀÚ½ÅÀÇ IP°¡ 192.168.0.126 À̶ó°í °¡Á¤À» Çϰí "hosts.allow = 192.168.0.128" À¸·Î ¼³Á¤À» ÇÑ´Ù¸é, 192.168.0.126 Àº Çã¿ëÀÌ µÇ¾î ÀÖÁö ¾ÊÀº IPÀ̱⠶§¹®¿¡ rsync µ¥¸óÀÇ µÇÁö ¾Ê¾Æ¾ß ÇÕ´Ï´Ù.
±×·¯³ª À߸øµÈ ¼³Á¤À¸·Î Á¢±ÙÀÌ °¡´É Çϸç, ¸ðµç IP ¶ÇÇÑ Á¢±ÙÀÌ °¡´É ÇÕ´Ï´Ù.
4-1) ÇØ°á ¹æ¹ý
/etc/rsyncd.conf ÆÄÀÏÀÇ ¼³Á¤¿¡ ¹®Á¦°¡ ÀÖ´Ù¸é /var/log/messages log¿¡ ¾Æ·¡¿Í °°ÀÌ ±â·ÏÀÌ µÈ´Ù. ¾Æ·¡ ¸Þ½ÃÁö¿Í °°ÀÌ ¼³Á¤ ÆÄÀÏÀÇ ÆÄ¶ó¸ÞŸ¿¡ À߸øµÈ ¼³Á¤ÀÌ ÀÖÀ¸¸é ¸ðµç ¼¹ö¿¡¼ ÆÄÀÏÀ» °¡Á® ¿Ã ¼ö ÀÖÀ¸´Ï ÁÖÀÇ Çϵµ·Ï ÇսôÙ.
À߸øµÈ ¼³Á¤ ºÎºÐÀÌ ¾ø´ÂÁö È®ÀÎ ÇÏ·Á¸é rsync µ¥¸óÀ» »ç¿ë ÈÄ Ç×»ó messages ·Î±×¸¦ º¸´Â ½À°üÀ» ±â¸£µµ·Ï ÇÕ´Ï´Ù.
¾Æ·¡ÀÇ ¸Þ½ÃÁöÀÇ Àǹ̴ hosts allow = [Á¢±Ù Çã¿ë IP]ÀÇ ¼³Á¤¿¡ Á¡( . ) µé¾î°¡ ¼³Á¤ °ª¿¡ ¸ÂÁö ¾Ê´Â parameter·Î ·Î±×¿¡ ±â·Ï µÇ¾ú½À´Ï´Ù.
$ tail -f /var/log/messages | grep -i para*
Mar 31 19:23:06 localhost rsyncd[8300]: Unknown Parameter encountered: "hosts.allow"
Mar 31 19:23:06 localhost rsyncd[8300]: IGNORING unknown parameter "hosts.allow"
À§ÀÇ ·Î±×°¡ ±â·Ï µÇ±â À§Çؼ´Â ¾Æ·¡¿Í °°Àº Á¶°Ç µîÀÌ ÇÊ¿ä ÇÕ´Ï´Ù.
A ¼¹öÀÇ rsync daemon process °¡ ÀÛµ¿Çϰí ÀÖÀ» ¶§
B ¼¹ö¿¡¼ A ¼¹ö·Î rsync ÀÛ¾÷À» ÁøÇàÇÒ ¶§
rsync ¼ºñ½º¸¦ ¿Ã¸®°Å³ª Àç ½ÃÀÛ ÇÒ ¶§
4-2) ÇØ°á ¹æ¹ý 2
µÎ¹øÂ° ÇØ°á ¹æ¹ýÀ¸·Î ¸®´ª½º¿¡¼ ÁÖ·Î »ç¿ëµÇ´Â iptables ¹æÈº®À» ÀÌ¿ëÇÏ¿© rsyncdÀ» ƯÁ¤ IP¸¸ »ç¿ë ÇÒ ¼ö ÀÖµµ·Ï Çã¿ëÇØÁÖ´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.
rsyncd µ¥¸óÀÇ port ´Â 873 Æ÷Æ®ÀÔ´Ï´Ù.
## sulinux 17 Version
$ netstat -nlpt | grep 873
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::873 :::* LISTEN 5470/rsync
## sulinux 2014 Version
$ netstat -nlpt | grep 873
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1298/xinetd
¸®´ª½º »ç¿ëÀÚ¶ó¸é iptables ±âº»ÀûÀÎ ·ê¼Â Àû¿ëÀº ÇÒ ¼ö ÀÖ´Ù°í ÆÇ´ÜÇϸç, ¹æÈº® ¼³Á¤ ¼³¸íÀº »ý·« Çϱâ·Î ÇÕ´Ï´Ù.
## ¼³Á¤ °ª
-A INPUT -s 192.168.0.128 -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
## È®ÀÎ*
$ iptables -nL | grep 873
ACCEPT tcp -- 192.168.0.128 0.0.0.0/0 state NEW tcp dpt:873
4-3) ÇØ°á ¹æ¹ý 3
¼¼¹øÂ° ÇØ°á ¹æ¹ýÀ¸·Î´Â TCP_wrapper ¸¦ »ç¿ëÇÑ ¼³Á¤ ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.
TCP_wrapper ¼³¸í ¶ÇÇÑ ÀÚ¼¼ÇÏ°Ô ¼³¸íÀ» ÇÏ°Ô µÇ¸é ³»¿ëÀÌ ±æ¾îÁö¹Ç·Î »ý·«Çϸç,
¾Æ·¡¿¡´Â ÀÛ¼ºÀÚÀÇ ¼³Á¤ ºÎºÐÀ̸ç, Âü°í¸¸ Çϱ⠹ٶø´Ï´Ù.
(*) ¼³Á¤ ÇÏ°Ô µÈ´Ù¸é ¹Ýµå½Ã Á¢¼Ó È®ÀÎÀÌ ÇÊ¿äÇÕ´Ï´Ù.
## rsync ¼ºñ½º¸¦ ƯÁ¤ IP¿¡¼¸¸ Çã¿ë ÇÒ ¼ö ÀÖµµ·Ï ¸ðµÎ Â÷´Ü ÇÕ´Ï´Ù.
$ cat /etc/hosts.deny
rsync : ALL
## rsync ¼ºñ½º Á¢±ÙÀ» Çã¿ë ÇÒ IP¸¦ Àû¿ë.
TCP-wrapperÀÇ Àû¿ë ÀÌÈÄ Á¢¼Ó Å×½ºÆ® ¹× ¼ºñ½º È®ÀÎÀÌ ¹Ýµå½Ã ÇÊ¿ä ÇÕ´Ï´Ù.
$ cat /etc/hosts.allow
rsync : 196.128.0.128
rsync : 196.128.0.126
(*) /etc/hosts.deny -> /etc/hosts.allow ¼øÀ¸·Î deny ÆÄÀÏÀÇ Àû¿ëÀÌ ¿ì¼± ¼øÀ§¿¡ ÀÖÀ¸¸ç,
/etc/hosts.deny ÀÇ ³»¿ëÀÌ " ALL : ALL " À̶ó¸é rsync ¼ºñ½º ÀÌ¿ÜÀÇ ¸ðµç ¼ºñ½º°¡ Â÷´ÜÀÌ µÇ´Ï ¼³Á¤À» À§Çؼ´Â ÇнÀÀÌ ¼±Çà µÇ¾î¾ß ÇÕ´Ï´Ù.
(*) hosts.allow ´Â TCP-wrapperÀ» »ç¿ëÇϱâ À§ÇÑ ¼³Á¤ ÆÄÀÏ À̸§ÀÔ´Ï´Ù.
(***) Áß¿ä /etc/rsyncd.conf ÆÄÀÏÀÇ ¼³Á¤ parameter°ú Çò°¥¸®Áö ¾Êµµ·Ï ÁÖÀǸ¦ Çϵµ·Ï ÇÕ´Ï´Ù.
5) ¹æÈº®À» ±¸ÀÔÇѴٰųª, ±âŸ ´Ù¸¥ ¹æ¹ýÀ¸·Îµµ ¾ó¸¶µçÁö ¼³Á¤ÀÌ °¡´ÉÇÕ´Ï´Ù.
À ºÎºÐ¿¡¼ ¾ð±Þ ÇÑ °Íó·³ ²À rsync ¼ºñ½º¸¦ »ç¿ëÇÑ µÚ¿¡´Â /var/log/messages ¿¡ ±â·ÏµÈ ·Î±×¸¦ º¸´Â °ÍÀ» ½À°üÈ ÇսôÙ.