حسین جعفری
حسین جعفری
خواندن ۹ دقیقه·۲ ماه پیش

قسمت سوم: شروع کار با فایل inventory در Ansible

قسمت اول: انسیبل چیست ؟ نصب و راه انداری انسیبل (ansible)

قسمت دوم:‌ مدیریت سرورها با دستورات Ad-Hoc Ansible

قسمت سوم: شروع کار با فایل inventory در Ansible

خب، قضیه از این قراره که شرکت تصمیم گرفته پول اضافی برای تمدید مجوز نرم‌افزار پشتیبان‌گیری نده و گفته این هزینه غیرضروریه. نتیجه؟ مجوز تمدید نشده! حالا مدیرت اومده و برای اینکه پشتیبان‌گیری رو از دست ندیم، یه اسکریپت ساده و یه playbook تو Ansible نوشته که از فایل‌های مهممون پشتیبان بگیره، اون هم براساس گروه‌های از قبل تعریف‌شده.

اینجا شما وارد میشی! کارت اینه که فایل inventory رو آماده کنی تا این راهکار موقتی بتونه درست کار کنه و استراتژی پشتیبان‌گیری تکمیل بشه. بدون این فایل، کل ماجرا رو هوا می‌مونه

پیش نیاز ها

قبل از اینکه بخواید عملیات پشتیبان‌گیری رو شروع کنید، باید چند تا کار مهم رو انجام بدین تا مطمئن بشید همه چیز به‌درستی آماده است. این موارد توی بخش‌های قبلی توضیح داده شدن، اما برای خلاصه اینجا بهشون اشاره می‌کنم:

  1. نصب Ansible روی نود کنترل: باید مطمئن بشید که Ansible روی سیستمی که قراره به‌عنوان نود کنترل استفاده کنید، نصب شده. اگر هنوز نصب نکردید، می‌تونید دستورالعمل نصب Ansible رو در بخش قبلی ببینید.
  2. ایجاد کاربر ansible روی همه سرورهای مدیریت‌شده: برای اینکه Ansible بتونه بدون مشکل به سرورها دسترسی داشته باشه، باید کاربر ansible رو روی همه سرورها بسازید و کلید SSH این کاربر رو از نود کنترل به سرورهای مقصد منتقل کنید. جزئیات این کار رو قبلاً توضیح دادیم. (این قسمت اجباری نیست و میشه گفت best practice هست)
  3. تنظیم یکسان رمز عبور برای کاربر ansible: حتماً بررسی کنید که رمز عبور کاربر ansible روی تمام سرورها یکسان باشه تا در صورت نیاز به ورود مستقیم مشکلی پیش نیاد. در بخش قبل نحوه تغییر رمز عبور رو توضیح دادیم.
  4. پیکربندی فایل etc/hosts/: برای اینکه بتونید به‌راحتی به سرورهای مدیریت‌شده وصل بشید، باید فایل etc/hosts/ رو روی نود کنترل پیکربندی کنید و نام‌های سرورها و آدرس‌های IP رو به اون اضافه کنید. این کار قبلاً توی بخش مربوطه توضیح داده شده.
[root@control1 ansible]# cat /etc/hosts 10.0.1.133 node1 web1 media1 10.0.1.181 node2 web2 media2

با انجام این مراحل، مطمئن می‌شید که همه چیز برای اجرای playbook‌های Ansible و انجام پشتیبان‌گیری آماده است. حالا می‌تونید ادامه بدید و عملیات پشتیبان‌گیری رو به‌راحتی شروع کنید.

۱. ایجاد فایل موجودی

ابتدا باید فایلی به نام inventory ایجاد کنیم که شامل لیستی از هاست‌ها (سرورها) باشد. این فایل لیستی از سرورهای مختلف مثل "media" و "webservers" را مدیریت می‌کند. سرورهایی مانند media1 و media2 در گروه media و سرورهای web1 و web2 در گروه webservers قرار می‌گیرند. در ادامه، این موجودی به ما امکان می‌دهد تا دستورات و اسکریپت‌های خاصی را روی هر گروه از سرورها اجرا کنیم.

قدم اول: ایجاد فایل موجودی

ابتدا با دستور زیر فایل را ایجاد کنید:

touch /home/ansible/inventory vim /home/ansible/inventory

سپس، در این فایل، سرورها را به این شکل وارد کنید:

[media] media1 media2 [webservers] web1 web2

۲. تعریف متغیرها برای گروه‌های سرورها

انسیبل Ansible به ما این قابلیت رو میده که برای هر گروه از سرورهایی که تعریف می‌کنیم، متغیرهای اختصاصی یا group_vars تعریف کنیم. این متغیرها به Ansible کمک می‌کنن تا بدونه هر گروه از سرورها چه تنظیمات خاصی دارن یا چه مسیری‌هایی برای اجرای دستورات باید استفاده بشه.

به عنوان مثال، ممکنه شما گروه‌های مختلفی از سرورها داشته باشین، مثل سرورهای وب (web servers) و سرورهای دیتابیس (database servers). هر کدوم از این گروه‌ها نیاز به تنظیمات یا مسیرهای خاصی دارن. برای اینکه این تنظیمات به‌صورت خودکار اعمال بشن و نیاز نباشه در هر playbook جداگانه دوباره تعریفشون کنیم، از group_vars استفاده می‌کنیم.

فقط باید بدونی که این فایل باید دقیقا جایی باشه که فایل inventory هست

تنظیم متغیرهای گروه "media"

ابتدا یک دایرکتوری برای متغیرها ایجاد کنید:

mkdir /home/ansible/group_vars cd /home/ansible/group_vars/ touch media

سپس در فایل media این متغیرها را وارد کنید:

media_content: /tmp/var/media/content/ media_index: /tmp/opt/media/mediaIndex

تنظیم متغیرهای گروه "webservers"

همین کار را برای سرورهای وب انجام دهید:

touch webservers vim webservers

و متغیرهای مربوط به سرورهای وب را وارد کنید:

httpd_webroot: /var/www/ httpd_config: /etc/httpd/

۳. تعریف متغیرهای خاص برای سرورها

ممکنه بعضی از سرورها نیاز به تنظیمات خاص و متفاوتی داشته باشن که برای سایر سرورها در همون گروه اعمال نمی‌شه. در این حالت، host_vars وارد عمل میشه. host_vars به شما این امکان رو میده که متغیرهای خاصی رو برای یک سرور خاص (host) تعریف کنید، به‌جای اینکه اون متغیرها رو به کل گروه اختصاص بدید.

تنظیم متغیر برای سرور web1

ابتدا دایرکتوری host_vars را برای متغیرهای اختصاصی سرورها ایجاد کنید:

mkdir /home/ansible/host_vars cd host_vars/ touch web1

سپس در فایل web1، متغیرهای زیر را وارد کنید:

script_files: /tmp//usr/local/scripts

۴. بررسی اتصال به سرورها

برای اینکه مطمئن بشیم که می‌تونیم از طریق Ansible به سرورهای مدیریت‌شده متصل بشیم، از ماژول ping استفاده می‌کنیم. این ماژول به ما نشون میده که آیا Ansible قادره به سرورهای مشخص‌شده در فایل inventory دسترسی داشته باشه یا نه

5. بررسی فایل بکاپ

فایل زیر که توی این لینک گیت هاب هم در دسترس هست برای بکاپ گیری تهیه شده. این فایل playbook مربوط به پشتیبان‌گیری از فایل‌های مهم سرورهای ماست که با استفاده از Ansible نوشته شده. توی این فایل، از متغیرهای خاص سرورها (host_vars) و گروه‌های سرورها (group_vars) استفاده کردیم تا هر گروه از سرورها بر اساس نیازهای خاص خودشون فایل‌های مهم رو به درستی پشتیبان‌گیری کنن.

--- - hosts: all become: yes tasks: - name: create backup directories file: path: /mnt/backup_vol/{{ ansible_hostname }} state: directory tags: - hostvar - webservervars - mediavars - hosts: web1 become: yes tasks: - name: backup scripts archive: dest: /mnt/backup_vol/{{ ansible_hostname }}/scripts.tgz path: &quot{{ script_files }}&quot tags: hostvar - hosts: webservers become: yes tasks: - name: backup httpd configs archive: dest: /mnt/backup_vol/{{ ansible_hostname }}/httpd_configs.tgz path: &quot{{ httpd_config }}&quot tags: webservervars - name: backup webroot archive: dest: /mnt/backup_vol/{{ ansible_hostname }}/httpd_webroot.tgz path: &quot{{ httpd_webroot }}&quot tags: webservervars - hosts: media become: yes tasks: - name: backup media content archive: dest: /mnt/backup_vol/{{ ansible_hostname }}/media_content.tgz path: &quot{{ media_content }}&quot tags: mediavars - name: backup media index archive: dest: /mnt/backup_vol/{{ ansible_hostname }}/media_index.tgz path: &quot{{ media_index }}&quot tags: mediavars

توضیح اجزای playbook:

  1. ایجاد دایرکتوری‌های بکاپ
    در ابتدای playbook، برای همه سرورها (با استفاده از hosts: all) دایرکتوری‌های پشتیبان‌گیری در مسیر /mnt/backup_vol/{{ ansible_hostname }} ایجاد میشه. این دایرکتوری‌ها بر اساس نام هر سرور ایجاد میشن و فایل‌های پشتیبان هر سرور توی دایرکتوری خودش ذخیره میشه.
  2. پشتیبان‌گیری از اسکریپت‌ها روی سرور web1
    برای سرور web1 به‌طور خاص، یک تسک برای آرشیو کردن و پشتیبان‌گیری از اسکریپت‌ها در مسیر /mnt/backup_vol/{{ ansible_hostname }}/scripts.tgz وجود داره. این تسک از متغیر script_files برای تعیین مسیر اسکریپت‌ها استفاده می‌کنه که احتمالاً توی فایل host_vars/web1.yml تعریف شده.
  3. پشتیبان‌گیری از تنظیمات و محتوای وب سرورها
    برای گروه webservers، دو تسک تعریف شده:تسک اول پشتیبان‌گیری از تنظیمات httpd (تنظیمات سرور وب) رو توی فایل httpd_configs.tgz ذخیره می‌کنه.
    تسک دوم پشتیبان‌گیری از محتوای وب (وب‌روت) رو در فایل httpd_webroot.tgz ذخیره می‌کنه.
    مسیرهایی که باید پشتیبان‌گیری بشن، از طریق متغیرهای httpd_config و httpd_webroot تعیین میشن که احتمالاً توی فایل group_vars/webservers.yml تعریف شدن.
  4. پشتیبان‌گیری از محتوای مدیا سرورها
    برای گروه media، دو تسک وجود داره:پشتیبان‌گیری از محتوای مدیا (فایل‌ها) و ذخیره اون‌ها در فایل media_content.tgz.
    پشتیبان‌گیری از ایندکس مدیا و ذخیره اون در فایل media_index.tgz.
    مسیرهای این فایل‌ها از طریق متغیرهای media_content و media_index که در فایل group_vars/media.yml تعریف شدن، تنظیم میشن.

این playbook یک راهکار ساده و مؤثر برای پشتیبان‌گیری از فایل‌های کلیدی سرورها با توجه به نوع سرور و نقش اون‌ها در سیستم ارائه میده. هر گروه از سرورها متغیرهای خاص خودش رو داره و پشتیبان‌گیری‌ها بر اساس این متغیرها انجام میشه.

6. اجزای نهایی بکاپ از سرور ها

حالا که فایل پشتیبان‌گیری رو تنظیم کردیم، وقتشه که مطمئن بشیم همه چیز درست کار می‌کنه. برای این کار، یک اسکریپت به نام backup.sh داریم که با استفاده از اون می‌تونیم عملیات پشتیبان‌گیری رو اجرا و تست کنیم. این اسکریپت براساس تگ‌هایی که برای هر گروه سرور در playbook تعریف کردیم، به ما اجازه میده پشتیبان‌گیری رو به‌صورت دقیق اجرا کنیم.

#!/bin/sh # Need to take a tag varialbe # mediavars to test media # webservervars to test webservers # hostvar to test host var # use playbook tags maybe? case &quot$1&quot in mediavars) ansible-playbook -i /home/ansible/inventory /home/ansible/scripts/backup.yml --tags &quotmediavars&quot exit $? ;; webservervars) ansible-playbook -i /home/ansible/inventory /home/ansible/scripts/backup.yml --tags &quotwebservervars&quot exit $? ;; hostvar) ansible-playbook -i /home/ansible/inventory /home/ansible/scripts/backup.yml --tags &quothostvar&quot exit $? ;; *) ansible-playbook -i /home/ansible/inventory /home/ansible/scripts/backup.yml exit $? esac

ساختار اسکریپت backup.sh:

این اسکریپت به‌صورت زیر کار می‌کنه:

  • با توجه به آرگومنتی که به اسکریپت پاس می‌دیم، مشخص میشه که کدوم دسته از سرورها (مثل سرورهای وب یا سرورهای مدیا) باید پشتیبان‌گیری بشن.
  • از ansible-playbook برای اجرای playbook پشتیبان‌گیری استفاده میشه و تگ‌ها مشخص می‌کنن که کدوم بخش‌ها اجرا بشن.

نحوه استفاده از اسکریپت:

برای اجرای پشتیبان‌گیری برای گروه‌های مختلف، می‌تونید یکی از آرگومنت‌های زیر رو به اسکریپت پاس بدید:

  1. پشتیبان‌گیری از سرورهای مدیا:

/home/ansible/scripts/backup.sh mediavars

این دستور فقط تسک‌های مرتبط با پشتیبان‌گیری سرورهای مدیا رو اجرا می‌کنه.

  1. پشتیبان‌گیری از سرورهای وب:

/home/ansible/scripts/backup.sh webservervars

این دستور پشتیبان‌گیری مربوط به سرورهای وب رو اجرا می‌کنه، شامل پشتیبان‌گیری از پیکربندی‌های httpd و محتوای وب‌روت.

  1. پشتیبان‌گیری برای یک سرور خاص (host-specific):

/home/ansible/scripts/backup.sh hostvar

این دستور مخصوص پشتیبان‌گیری از سرورهایی هست که متغیرهای خاصی دارن، مثل web1 که ممکنه مسیر اسکریپت‌ها متفاوت باشه.

  1. اجرای پشتیبان‌گیری کامل:

اگر هیچ آرگومنتی به اسکریپت ندید، کل playbook پشتیبان‌گیری برای همه سرورها اجرا میشه:/home/ansible/scripts/backup.sh

نتیجه اجرا:

اگر همه چیز درست باشه و موجودی (inventory) و فایل‌های متغیرها به‌درستی تنظیم شده باشن، اسکریپت بدون هیچ خطایی اجرا میشه و پشتیبان‌گیری به‌صورت کامل انجام میشه. در این صورت، می‌تونید مطمئن باشید که عملیات پشتیبان‌گیری به درستی پیاده‌سازی شده و داده‌های مهم سرورهای شما به‌طور ایمن ذخیره شدن.

با این روش، شما یک راهکار اتوماتیک و مطمئن برای پشتیبان‌گیری از سرورهای خودتون دارید.

حالا باید اطمینان حاصل کنیم که همه چیز درست کار می‌کند. برای این کار می‌توانیم اسکریپت بکاپ را اجرا کنیم تا مطمئن شویم که موجودی به درستی تنظیم شده است.

/home/ansible/scripts/backup.sh

اگر همه چیز درست باشد، اسکریپت بدون هیچ خطایی اجرا می‌شود و به این ترتیب، وظیفه شما به خوبی انجام شده است.

نتیجه‌گیری

تبریک! شما inventory انسیبل رو به درستی تنظیم کردید و توانستید بکاپ‌گیری از سرورها را به درستی انجام دهید. این کار، ساده‌ترین روش برای مدیریت سرورها با استفاده از Ansible است که می‌تواند در سناریوهای مختلف بسیار مفید باشد.

و در آخر این آدرس لینکدین و توئیتر من هست خوشحال میشم در ارتباط باشیم.

🪩 Follow Linkedin Hossein Jafari🪩

🕊 Twitter 🕊

انسیبل چیستansibleinventoryشروع کاررمز عبور
شاید از این پست‌ها خوشتان بیاید