PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : انتقال اطلاعات بین دو سرور لینوکس



h.rezazadeh
May 25th, 2016, 18:51
در زمان خرید سرور جدید یکی از بزرگترین دغدغه ها انتقال داده ها بین دو سرور قدیمی و جدید می باشد، این مشکل زمانی چالش برانگیزتر می شود که سیستم عامل این سرورها لینوکس باشند. در این آموزش قصد داریم تا چند دستور ساده برای انتقال داده ها بین دو سرور لینوکس بیس شرح دهیم. توجه داشته باشید که انتخاب هریک از این دستورات کاملاً به سناریوی انتقال شما بستگی دارد.

1- استفاده از دستور rsync :


یکی ازکاربردهای این دستور به جهت کپی برداری و یا بک آپ گیری فایل و فلدرها در مسیری درسیستم لوکال و یا یک سیستم ریموت (با سیستم عامل لینوکس یا یونیکس) استفاده میشود. امنیت، سرعت بالا، مصرف پهنای باند کم و عدم نیاز به هیچگونه پیش نیازی (درسرور مبداء و یا مقصد) از جمله قابلیت های این دستور می باشند.هدف از توضیح این دستور در اینجااعلام نحوه استفاده از آن به جهت انتقال داده ها از یک سرور به سروری جدید میباشد. در این سناریو سرور لینوکس قبلی را لوکال (local) و سرور جدید را ریموت (remote) در نظر می گیریم.


در ابتدا به سرور لوکال از طریق کاربری روت ssh بزنید و در آن کامند rsync را اجرا نمایید.

شکل کلی و مناسب برای عملیات انتقال صحیح و با کمترین حجم ممکن این دستور به صورت ذیل اعلام می گردد :
(توجه داشته باشید که امکان استفاده از سوئیچ های دیگری به جزء مواردی که در نمونه ذیل اعلام شده نیز وجود دارد)


rsync -avz -e "ssh -p <port-number>" </local-path> root@<server-name>:/<remote-folder>
توضیح جزئیات دستور :

سوئیچ a کارهای ذیل را انجام می دهد :

- رعایت کپی بصورت تو در تو
- حفظ لینک ها (Symbolic Link )
- حفظ پرمیشن (Permission)
- عدم تغییر زمان فایل مقصد با فایل اولیه
- حفظ مشخصات مالکیت ( owner ، group)

سوئچ v به جهت نمایش شرح عملیات در هنگام اجرا می باشد.
سوئیچ z فشرده سازی را فعال می سازد (از این طریق پهنای باند کم تری مصرف می گردد)
سوئیچ e به جهت استفاده از SSH برای انتقال داده ها استفاده می شود.

نکته : در صورتیکه پورت SSH سرور ریموت، پورت پیش فرض SSH (یعنی 22) است می توانید به جای عبارت "ssh -p <port-number>" تنها عبارت ssh را وارد نمایید.

به جای عبارت <port-number> باید پورت SSH مرتبط با سرور مقصد را وارد نمایید.
به جای عبارت </local-path> باید مسیر فایل یا فلدر موجود در سرور لوکال را وارد نمایید.
به جای عبارت <server-name> آی پی یا نام سرور ریموت را وارد نمایید.
به جای عبارت <remote-folder> مسیری که می خواهید فایل یا فلدر مربوطه در سرور ریموت قرار گیرد را وارد نمایید.

نکته : برای مشاهده درصد پیشرفت فرآیند کپی برداری می توانید از سوئیچ progress قبل از عبارت –e استفاده نمایید. که شکل کلی دستور با این سوئیچ به صورت ذیل می باشد :
rsync -avz -progress -e "ssh -p <port-number>" </local-path> root@<server-name>:/<remote-folder>

بعداز وارد نمودن دستور سفارشی شده rsync (با توجه به اطلاعات مورد نظر خود) رمز عبور سرور ریموت از شما خواسته می شود لذا به جهت شروع اجرای عملیات انتقال رمز عبور کاربری روت مرتبط با سرور ریموت را وارد نمایید.

به جهت آگاهی هرچه بیشتر شما یک نمونه از دستور rsync سفارشی شده به شرح ذیل ارائه می گردد :


rsync -avz -e "ssh -p 2233" /mnt/data/admin root@192.168.1.1:/mnt/newfolder/repository/

2- استفاده از دستور scp

از این دستور برای انتقال فایل یا فلدر از سرور لوکال (سرور مبداء) به سرور ریموت (مقصد) با استفاده از پروتکل ssh استفاده می شود.در این سناریو سرور لینوکس قبلی را لوکال (local) و سرور جدید را ریموت (remote) در نظر می گیریم.

شکل کلی و مناسب برای عملیات انتقال صحیح و با کمترین حجم ممکن این دستور به صورت ذیل اعلام می گردد :
(توجه داشته باشید که امکان استفاده از سوئیچ های دیگری به جزء مواردی که در نمونه ذیل اعلام شده نیز وجود دارد)


scp -Cpv -P <ssh-port-number> </local-path> <user>@<remote-server>:<remote-folder>

توضیح جزئیات دستور :

سوئیچ C برای فعالسازی عملیات فشرده سازی استفاده می شود. (دقت داشته باشید که از حرف بزرگ استفاده شده است)
سوئیچ p به جهت نمایش زمان اصلاح، دسترسی، سرعت ارتباط و همچنین درصد پییشرفت عملیات می باشد.
سوئیچ v برای نمایش اطلاعات انتقال در صفحه استفاده می شود.
سوئیچ P به جهت مشخص کردن پورت سفارشی ssh استفاده می شود. در صورتیکه در سرور ریموت از پورت پیش فرض ssh، یعنی 22، استفاده شده است نیازی به استفاده از این سوئیچ نیست. (دقت داشته باشید که از حرف بزرگ استفاده شده است)
به جای عبارت <port-number> باید پورت SSH مرتبط با سرور مقصد را وارد نمایید.
به جای عبارت </local-path> باید مسیر فایل یا فلدر موجود در سرور لوکال را وارد نمایید.
به جای عبارت <user> نام کاربری که برای برقراری ارتباط ssh با سرور ریموت استفاده می نمایید را وارد نمایید.
به جای عبارت <server-name> آی پی یا نام سرور ریموت را وارد نمایید.
به جای عبارت <remote-folder> مسیری که می خواهید فایل یا فلدر مربوطه در سرور ریموت قرار گیرد را وارد نمایید.

بعداز وارد نمودن دستور سفارشی شده scp (با توجه به اطلاعات مورد نظر خود) رمز عبور سرور ریموت از شما خواسته می شود لذا به جهت شروع اجرای عملیات انتقال رمز عبور کاربری روت مرتبط با سرور ریموت را وارد نمایید.

به جهت آگاهی هرچه بیشتر شما یک نمونه از دستور scp سفارشی شده به شرح ذیل ارائه می گردد :

scp -Cpv -P 2233 /mnt/data/admin root@192.168.1.1:/mnt/newfolder/repository/

و ...

برای مشاهده کامل این مقاله و امکان کپی برداری از دستورات ذکر شده می توانید به منبع اصلی آن در سایت پارس نافع به لینک ذیل مراجعه نمایید :


https://www.parsnafe.com/knowledgebase.php?action=displayarticle&id=63

illusive_man
May 25th, 2016, 19:11
دستور rsync برای replicate کردن هست و نه انتقال. FTP هم صرفا زمانی کارایی داره که در هر دو سمت نصب و فعال باشه. از wget هم زمانی می توان استفاده کرد که مبدا دارای وب سرور باشه.

به جای این دستورات استفاده از دستور scp پیشفرض لینوکس که از ssh برای ارتباط استفاده می کند در دسترس تر و راحت تر هست، ضمن اینکه سرعت انتقال خیلی خوبی هم ارایه میده.

webhosts
May 26th, 2016, 10:29
سلام
اگر بخواهیم یک دایرکتوری را از یک سرور لینوکس به سرور لینوکسی دیگر کپی کنیم و هر ثانیه این دایرکتوری در سرور جدید آپدیت شود (این دایرکتوری دائماً sync شود) ، باید چه کار کنیم؟
با تشکر

illusive_man
May 26th, 2016, 11:40
سلام
اگر بخواهیم یک دایرکتوری را از یک سرور لینوکس به سرور لینوکسی دیگر کپی کنیم و هر ثانیه این دایرکتوری در سرور جدید آپدیت شود (این دایرکتوری دائماً sync شود) ، باید چه کار کنیم؟
با تشکر

شما می بایست از ابزاری همچون rsync استفاده کنید برای این منظور، که بصورت خودکار فایل های تغییر یافته را در مقصد آپدیت می نماید. البته امکان آپدیت در هر ثانیه میسر نیست چرا که هر مرتبه اجرای دستور مقداری زمان می برد.

webhosts
May 26th, 2016, 11:41
شما می بایست از ابزاری همچون rsync استفاده کنید برای این منظور، اما امکان اجرا در هر ثانیه میسر نیست چرا که هر مرتبه اجرای دستور مقداری زمان می برد و نیز در cron لینوکس زمانی کمتر از 1 دقیقه قابل تنظیم نیست.

پس برای این کار باید چه کار کنیم؟
از چه دستوری استفاده کنیم؟

webhosts
May 28th, 2016, 09:56
کسی نمیتونه کمک کنه؟

illusive_man
May 28th, 2016, 17:46
پس برای این کار باید چه کار کنیم؟
از چه دستوری استفاده کنیم؟

اگر اجرا به صورت ثانیه ای برای شما اهمیت دارد، بهترین گزینه دستور watch است که بصورت زیر استفاده می شود:


watch -n 1 command

کد بالا، دستور command فرضی را در بازه های 1 ثانیه ای تا ابد اجرا خواهد نمود.

webhosts
May 29th, 2016, 22:15
اگر اجرا به صورت ثانیه ای برای شما اهمیت دارد، بهترین گزینه دستور watch است که بصورت زیر استفاده می شود:


watch -n 1 command

کد بالا، دستور command فرضی را در بازه های 1 ثانیه ای تا ابد اجرا خواهد نمود.

اگر بخواهم از دستور rsync استفاده کنم ، این دستور هر یک دقیقه یکبار اجرا می شود؟
چه طور می توانم به صورت اتوماتیک ، دیتابیس را دائماً به یک سرور دیگر کپی کنم؟

illusive_man
May 30th, 2016, 08:07
اگر بخواهم از دستور rsync استفاده کنم ، این دستور هر یک دقیقه یکبار اجرا می شود؟
چه طور می توانم به صورت اتوماتیک ، دیتابیس را دائماً به یک سرور دیگر کپی کنم؟

بله، البته هر ثانیه... در خصوص سوال دوم هم اگر از MySQL استفاده می کنید، در خصوص Replicate کردن آن جستجو بفرمایید چون بصورت داخلی از آن پشتیبانی می کند.