قسمت اول: انسیبل چیست ؟ نصب و راه انداری انسیبل (ansible)
قسمت دوم: مدیریت سرورها با دستورات Ad-Hoc Ansible
قسمت سوم: شروع کار با فایل inventory در Ansible
خب، قضیه از این قراره که شرکت تصمیم گرفته پول اضافی برای تمدید مجوز نرمافزار پشتیبانگیری نده و گفته این هزینه غیرضروریه. نتیجه؟ مجوز تمدید نشده! حالا مدیرت اومده و برای اینکه پشتیبانگیری رو از دست ندیم، یه اسکریپت ساده و یه playbook تو Ansible نوشته که از فایلهای مهممون پشتیبان بگیره، اون هم براساس گروههای از قبل تعریفشده.
اینجا شما وارد میشی! کارت اینه که فایل inventory رو آماده کنی تا این راهکار موقتی بتونه درست کار کنه و استراتژی پشتیبانگیری تکمیل بشه. بدون این فایل، کل ماجرا رو هوا میمونه
قبل از اینکه بخواید عملیات پشتیبانگیری رو شروع کنید، باید چند تا کار مهم رو انجام بدین تا مطمئن بشید همه چیز بهدرستی آماده است. این موارد توی بخشهای قبلی توضیح داده شدن، اما برای خلاصه اینجا بهشون اشاره میکنم:
[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 هست
ابتدا یک دایرکتوری برای متغیرها ایجاد کنید:
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
همین کار را برای سرورهای وب انجام دهید:
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 دسترسی داشته باشه یا نه
فایل زیر که توی این لینک گیت هاب هم در دسترس هست برای بکاپ گیری تهیه شده. این فایل 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: "{{ script_files }}" tags: hostvar - hosts: webservers become: yes tasks: - name: backup httpd configs archive: dest: /mnt/backup_vol/{{ ansible_hostname }}/httpd_configs.tgz path: "{{ httpd_config }}" tags: webservervars - name: backup webroot archive: dest: /mnt/backup_vol/{{ ansible_hostname }}/httpd_webroot.tgz path: "{{ httpd_webroot }}" tags: webservervars - hosts: media become: yes tasks: - name: backup media content archive: dest: /mnt/backup_vol/{{ ansible_hostname }}/media_content.tgz path: "{{ media_content }}" tags: mediavars - name: backup media index archive: dest: /mnt/backup_vol/{{ ansible_hostname }}/media_index.tgz path: "{{ media_index }}" tags: mediavars
hosts: all
) دایرکتوریهای پشتیبانگیری در مسیر /mnt/backup_vol/{{ ansible_hostname }}
ایجاد میشه. این دایرکتوریها بر اساس نام هر سرور ایجاد میشن و فایلهای پشتیبان هر سرور توی دایرکتوری خودش ذخیره میشه./mnt/backup_vol/{{ ansible_hostname }}/scripts.tgz
وجود داره. این تسک از متغیر script_files
برای تعیین مسیر اسکریپتها استفاده میکنه که احتمالاً توی فایل host_vars/web1.yml تعریف شده.httpd_configs.tgz
ذخیره میکنه.httpd_webroot.tgz
ذخیره میکنه.httpd_config
و httpd_webroot
تعیین میشن که احتمالاً توی فایل group_vars/webservers.yml تعریف شدن.media_content.tgz
.media_index.tgz
.media_content
و media_index
که در فایل group_vars/media.yml تعریف شدن، تنظیم میشن.این playbook یک راهکار ساده و مؤثر برای پشتیبانگیری از فایلهای کلیدی سرورها با توجه به نوع سرور و نقش اونها در سیستم ارائه میده. هر گروه از سرورها متغیرهای خاص خودش رو داره و پشتیبانگیریها بر اساس این متغیرها انجام میشه.
حالا که فایل پشتیبانگیری رو تنظیم کردیم، وقتشه که مطمئن بشیم همه چیز درست کار میکنه. برای این کار، یک اسکریپت به نام 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 "$1" in mediavars) ansible-playbook -i /home/ansible/inventory /home/ansible/scripts/backup.yml --tags "mediavars" exit $? ;; webservervars) ansible-playbook -i /home/ansible/inventory /home/ansible/scripts/backup.yml --tags "webservervars" exit $? ;; hostvar) ansible-playbook -i /home/ansible/inventory /home/ansible/scripts/backup.yml --tags "hostvar" exit $? ;; *) ansible-playbook -i /home/ansible/inventory /home/ansible/scripts/backup.yml exit $? esac
این اسکریپت بهصورت زیر کار میکنه:
ansible-playbook
برای اجرای playbook پشتیبانگیری استفاده میشه و تگها مشخص میکنن که کدوم بخشها اجرا بشن.برای اجرای پشتیبانگیری برای گروههای مختلف، میتونید یکی از آرگومنتهای زیر رو به اسکریپت پاس بدید:
/home/ansible/scripts/backup.sh mediavars
این دستور فقط تسکهای مرتبط با پشتیبانگیری سرورهای مدیا رو اجرا میکنه.
/home/ansible/scripts/backup.sh webservervars
این دستور پشتیبانگیری مربوط به سرورهای وب رو اجرا میکنه، شامل پشتیبانگیری از پیکربندیهای httpd و محتوای وبروت.
/home/ansible/scripts/backup.sh hostvar
این دستور مخصوص پشتیبانگیری از سرورهایی هست که متغیرهای خاصی دارن، مثل web1 که ممکنه مسیر اسکریپتها متفاوت باشه.
اگر هیچ آرگومنتی به اسکریپت ندید، کل playbook پشتیبانگیری برای همه سرورها اجرا میشه:/home/ansible/scripts/backup.sh
اگر همه چیز درست باشه و موجودی (inventory) و فایلهای متغیرها بهدرستی تنظیم شده باشن، اسکریپت بدون هیچ خطایی اجرا میشه و پشتیبانگیری بهصورت کامل انجام میشه. در این صورت، میتونید مطمئن باشید که عملیات پشتیبانگیری به درستی پیادهسازی شده و دادههای مهم سرورهای شما بهطور ایمن ذخیره شدن.
با این روش، شما یک راهکار اتوماتیک و مطمئن برای پشتیبانگیری از سرورهای خودتون دارید.
حالا باید اطمینان حاصل کنیم که همه چیز درست کار میکند. برای این کار میتوانیم اسکریپت بکاپ را اجرا کنیم تا مطمئن شویم که موجودی به درستی تنظیم شده است.
/home/ansible/scripts/backup.sh
اگر همه چیز درست باشد، اسکریپت بدون هیچ خطایی اجرا میشود و به این ترتیب، وظیفه شما به خوبی انجام شده است.
تبریک! شما inventory انسیبل رو به درستی تنظیم کردید و توانستید بکاپگیری از سرورها را به درستی انجام دهید. این کار، سادهترین روش برای مدیریت سرورها با استفاده از Ansible است که میتواند در سناریوهای مختلف بسیار مفید باشد.
و در آخر این آدرس لینکدین و توئیتر من هست خوشحال میشم در ارتباط باشیم.
🪩 Follow Linkedin Hossein Jafari🪩
🕊 Twitter 🕊