بلاگ/اتوماسیون راه‌اندازی و پیکربندی چند سرور مجازی و اختصاصی با Ansible
به‌روز شده

اتوماسیون راه‌اندازی و پیکربندی چند سرور مجازی و اختصاصی با Ansible

1405/06/070 بازدید
اتوماسیون راه‌اندازی و پیکربندی چند سرور مجازی و اختصاصی با Ansible

اتوماسیون راه‌اندازی و پیکربندی چند سرور مجازی و اختصاصی با Ansible

نمایی از مدیریت متمرکز چند سرور با Ansible راه‌اندازی یک سرور لینوکس معمولاً با چند کار آشنا شروع می‌شود: ساخت کاربر، افزودن کلید SSH، به‌روزرسانی بسته‌ها، تنظیم فایروال، نصب ابزارهای ضروری و پیکربندی سرویس‌ها. انجام دستی این مراحل برای یک سرور ممکن است قابل‌قبول باشد، اما وقتی تعداد سرورها بیشتر شود، تکرار همین دستورها هم وقت‌گیر است و هم احتمال خطا را بالا می‌برد. Ansible این فرایند را به مجموعه‌ای از دستورهای قابل‌تکرار تبدیل می‌کند. با یک فایل inventory مشخص می‌کنید چه سرورهایی مدیریت شوند و با یک playbook وضعیت مطلوب آن‌ها را تعریف می‌کنید. سپس همان تنظیمات روی چند سرور مجازی یا اختصاصی اجرا می‌شوند. در این آموزش، یک سناریوی عملی برای مدیریت پیکربندی سرور با Ansible می‌سازیم: چند سرور اوبونتو را آماده می‌کنیم، کاربر مدیریتی می‌سازیم، SSH و فایروال را تنظیم می‌کنیم، بسته‌های پایه را نصب می‌کنیم و یک وب‌سرور را روی گروه مشخصی از هاست‌ها راه می‌اندازیم.

Ansible چه مسئله‌ای را حل می‌کند؟

Ansible یک ابزار اتوماسیون بدون عامل یا agentless است. لازم نیست روی هر سرور مقصد سرویس اختصاصی نصب کنید؛ در بیشتر سناریوهای لینوکسی، کنترل‌نود از طریق SSH به سرورها متصل می‌شود و ماژول‌های لازم را اجرا می‌کند. روی میزبان مقصد معمولاً وجود Python کافی است. تفاوت اصلی Ansible با یک اسکریپت ساده Bash در نحوه تعریف عملیات است. در یک اسکریپت ممکن است بنویسید «این بسته را نصب کن»، اما در Ansible معمولاً وضعیت مورد انتظار را مشخص می‌کنید: «این بسته باید نصب باشد». بسیاری از ماژول‌های Ansible خاصیت idempotent دارند؛ یعنی اجرای دوباره playbook نباید تغییری ایجاد کند، مگر اینکه وضعیت سرور با وضعیت تعریف‌شده تفاوت داشته باشد. این ویژگی برای مدیریت چند سرور مهم است. اگر اجرای playbook در میانه کار متوقف شود، می‌توان آن را دوباره اجرا کرد و Ansible فقط تغییرات لازم را اعمال می‌کند.

Ansible در مقایسه با روش‌های دیگر

هر ابزار برای مسئله متفاوتی مناسب است. Ansible جایگزین کامل Terraform، اسکریپت‌های Shell یا سیستم‌های مدیریت کانتینر نیست، اما می‌تواند در کنار آن‌ها استفاده شود.

روشکاربرد اصلیمزیتمحدودیت
اجرای دستی با SSHتغییرات محدود روی یک یا دو سرورشروع سریع و بدون آماده‌سازیتکرارپذیری کم و احتمال اختلاف میان سرورها
اسکریپت Bashخودکارسازی مراحل خطیساده و در دسترسکنترل وضعیت و مدیریت خطا دشوارتر می‌شود
Ansibleپیکربندی و مدیریت چند هاستخوانایی، inventory، ماژول‌های آماده و اجرای تکرارپذیربه اتصال SSH و طراحی درست playbook نیاز دارد
Terraformساخت و تغییر منابع زیرساختمدیریت چرخه عمر منابع با stateبرای جزئیات پیکربندی داخل سیستم‌عامل طراحی نشده است
Kubernetesاجرای بارهای کانتینریزمان‌بندی، مقیاس‌پذیری و بازیابی سرویس‌هابرای مدیریت عمومی تنظیمات سیستم‌عامل میزبان مناسب نیست

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

معماری سناریوی این آموزش

فرض می‌کنیم یک سیستم محلی یا سرور مدیریتی با عنوان کنترل‌نود داریم. Ansible روی این سیستم نصب می‌شود و از طریق SSH به سه هاست متصل خواهد شد: - دو سرور مجازی برای اجرای وب‌سرور - یک سرور اختصاصی برای سرویس پایگاه داده - یک کاربر اولیه با دسترسی sudo روی هر سه هاست - احراز هویت SSH با کلید عمومی

کنترل‌نود Ansible که از طریق SSH به دو سرور مجازی وب و یک سرور اختصاصی پایگاه داده متصل می‌شود

ساختار پروژه را به این شکل در نظر می‌گیریم:

ansible-server-setup/
├── ansible.cfg
├── inventory.ini
├── group_vars/
│   └── all.yml
├── templates/
│   └── sshd_config.j2
└── site.yml

در یک محیط واقعی بهتر است playbookهای بزرگ‌تر را به roleهای جدا تقسیم کنید، اما این ساختار برای دیدن اجزای اصلی کافی است.

نصب Ansible روی کنترل‌نود

روی اوبونتو می‌توانید Ansible را از مخزن سیستم نصب کنید:

sudo apt update
sudo apt install -y ansible
ansible --version

Ansible باید فقط روی کنترل‌نود نصب باشد. کنترل‌نود می‌تواند لپ‌تاپ مدیر سیستم، یک ماشین مجازی مدیریتی یا رانر CI/CD باشد. بهتر است این سیستم دسترسی شبکه‌ای محدود و کلید SSH محافظت‌شده داشته باشد. فایل ansible.cfg را در ریشه پروژه ایجاد کنید: ```ini