نحوه مدیریت چندین سرور با دستورات Ad Hoc Ansible
Ansible ابزاری مدرن برای مدیریت پیکربندی است که کار تنظیم و نگهداری سرور محازی های از راه دور را تسهیل می کند. با یک طراحی مینیمالیستی که قصد دارد کاربران را به روز کرده و به آنها سرعت ببخشد ، به شما این امکان را می دهد تا یک یا صدها سیستم را از یک مکان مرکزی با playbook یا دستورات ad hoc کنترل کنید.
بر خلاف playbook- که شامل مجموعه کارهایی است که می توان از آنها استفاده مجدد کرد – دستورات ad hoc کارهایی هستند که شما مرتباً آنها را انجام نمی دهید ، مانند راه اندازی مجدد یک سرویس یا بازیابی اطلاعات در مورد سیستمهای از راه دور که قابل اعتماد نیستند.
در این راهنما، یاد می گیرید که چگونه از دستورات ad hoc برای انجام کارهای متداول مانند نصب بسته ها ، کپی کردن فایل ها ، و راه اندازی مجدد سرویس ها بر روی یک یا چند سرور محازی از راه دور ، از یک گره کنترل Ansible استفاده کنید.
پیش نیازها
برای پیروی از این راهنما ، به موارد زیر نیاز دارید:
• یک گره کنترل Ansible. این راهنما فرض می کند که گره کنترل شما یک دستگاه اوبونتو 20.04 است که Ansible روی آن نصب و پیکربندی شده است تا با استفاده از کلیدهای SSH به میزبان های Ansible شما متصل شود. اطمینان حاصل کنید که گره کنترل دارای یک کاربر معمولی با مجوزهای sudo است و فایروال را نیز فعال کرده است ، همانطور که در راهنمای ستاپ اولیه سرور محازی توضیح داده شده است. برای راه اندازی Ansible ، لطفا راهنمای ما در مورد نحوه نصب و پیکربندی Ansible در اوبونتو 20.04 را دنبال کنید.
• دو یا چند میزبان Ansible. میزبان Ansible هر دستگاهی است که گره کنترل Ansible شما برای خودکار سازی پیکربندی شده باشد. این راهنما فرض می کند که میزبان های Ansible شما سرور محازی های Ubuntu 20.04 از راه دور هستند. اطمینان حاصل کنید که هر میزبان Ansible دارای موارد زیر است:
o کلید عمومی SSH گره کنترل Ansible به کلیدهای مجاز کاربر کاربر اضافه شده باشد. این کاربر می تواند root یا یک کاربر معمولی با امتیازات sudo باشد. برای تنظیم این گزینه ، می توانید مرحله 2 راهنمای نحوه تنظیم کلیدهای SSH را در اوبونتو 20.04 دنبال کنید.
• یک فایل inventory بر روی گره کنترل Ansible تنظیم شده باشد. اطمینان حاصل کنید که یک فایل inventory در آن وجود دارد که شامل همه میزبان های Ansible باشد. برای انجام این کار ، لطفاً به راهنمای چگونگی تنظیم موجودی های Ansible مراجعه کنید. سپس مطمئن شوید که با اجرای تست اتصال مشخص شده در بخش تست اتصال به میزبان های Ansible ، می توانید به گره های خود متصل شوید.
آزمایش اتصال به هاست های Ansible
دستور زیر اتصال بین گره کنترل Ansible و تمام میزبان های Ansible شما را آزمایش می کند. این دستور از کاربر سیستم فعلی و کلید SSH مربوطه آن به عنوان ورود از راه دور استفاده می کند و گزینه -m را نیز شامل می شود ، که به Ansible می گوید ماژول ping را اجرا کنید. همچنین دارای پرچم -i است که به Ansible میگوید میزبان های موجود در فایل inventory مشخص شده را ping کند.
$ ansible all -i inventory -m ping
اگر اولین بار است که از طریق SSH به این سرور محازی ها وصل می شوید ، از شما خواسته می شود که صحت میزبان هایی را که از طریق Ansible به آنها وصل می شوید ، تأیید کنید. وقتی از شما خواسته شد ، yes را تایپ کنید و سپس برای تأیید ENTER را بزنید.
باید خروجی مشابه این دریافت کنید:
Output
server1 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
server2 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
هنگامی که یک پاسخ “pong” را از هاست دریافت کردید ، بدان معنی است که ارتباط زنده است و شما آماده اجرای دستورات Ansible در آن سرور محازی هستید.
تنظیم گزینه های اتصال
به طور پیش فرض ، Ansible سعی دارد با استفاده از صفحه کلید SSH مربوطه ، به عنوان کاربر از راه دور با همان نام کاربری سیستم فعلی شما ، به گره ها متصل شود.
برای اتصال به عنوان یک کاربر از راه دور متفاوت ، فرمان را با پرچم -u و نام کاربر در نظر گرفته شده اضافه کنید:
$ ansible all -i inventory -m ping -u sammy
اگر از یک کلید SSH سفارشی برای اتصال به سرور محازی های از راه دور استفاده می کنید ، می توانید آن را در زمان اجرا با گزینه –private-key ارائه دهید:
$ ansible all -i inventory -m ping –private-key=~/.ssh/custom_id
توجه: برای کسب اطلاعات بیشتر در مورد نحوه اتصال به گره ها ، لطفاً به راهنمای نحوه استفاده از Ansible ما مراجعه کنید ، که گزینه های اتصال بیشتری را نشان می دهد.
هنگامی که می توانید با استفاده از گزینه های مناسب اتصال برقرار کنید ، می توانید فایل inventory خود را تنظیم کنید تا به صورت خودکار کاربر از راه دور و کلید خصوصی خود را تنظیم کنید ، تا تفاوتی با مقادیر پیش فرض تعیین شده توسط Ansible نباشد. سپس ، لازم نیست آن پارامترها را در خط فرمان ارائه دهید.
مثال فایل inventory زیر متغیر ansible_user را فقط برای سرور محازی server1 تنظیم می کند:
~/ansible/inventory
server1 ansible_host=203.0.113.111 ansible_user=sammy
server2 ansible_host=203.0.113.112
Ansible اکنون هنگام اتصال به سرور محازی server1 از summy به عنوان کاربر پیش فرض از راه دور استفاده می کند.
برای تنظیم کلید SSH سفارشی ، متغیر ansible_ssh_private_key_file را به شرح زیر وارد کنید:
~/ansible/inventory
server1 ansible_host=203.0.113.111 ansible_ssh_private_key_file=/home/sammy/.ssh/custom_id
server2 ansible_host=203.0.113.112
در هر دو مورد ، ما مقادیر سفارشی را فقط برای server1 تنظیم کرده ایم. اگر می خواهید از همان تنظیمات برای چندین سرور محازی استفاده کنید ، می توانید برای آن گروه child استفاده کنید:
~/ansible/inventory
[group_a]
203.0.113.111
203.0.113.112
[group_b]
203.0.113.113
[group_a:vars]
ansible_user=sammy
ansible_ssh_private_key_file=/home/sammy/.ssh/custom_id
این پیکربندی مثال فقط یک کاربر سفارشی و کلید SSH را برای اتصال به سرور محازی های ذکر شده در group_a اختصاص می دهد.
تعیین اهدافی برای اجرای فرمان
هنگام اجرای دستورات ad hoc با Ansible ، می توانید میزبان های فردی و همچنین هر ترکیبی از گروه ها ، هاست ها و زیر گروه ها را هدف قرار دهید. به عنوان مثال ، به ترتیب زیر می توانید اتصال را برای هر میزبان در یک گروه به نام سرور محازی ها بررسی کنید:
$ ansible servers -i inventory -m ping
همچنین می توانید میزبان ها و گروه های مختلفی را با جدا کردن آنها با ستون هایی مشخص کنید:
$ ansible server1:server2:dbservers -i inventory -m ping
برای درج یک استثناء در یک الگو ، از علامت تعجب ، پیشوند با کاراکتر \ ، به شرح زیر استفاده کنید. این دستور بر روی همه سرور محازی های گروه 1 اجرا می شود ، به جز server2:
$ ansible group1:\!server2 -i inventory -m ping
در صورت تمایل به اجرای یک دستور فقط بر روی سرور محازی هایی که جزئی از گروه 1 و گروه 2 هستند ،
به عنوان مثال ، باید از & استفاده کنید. فراموش نکنید که پیشوند آن را یک کاراکتر \ قرار دهید:
$ ansible group1:\&group2 -i inventory -m ping
برای کسب اطلاعات بیشتر در مورد چگونگی استفاده از الگوها هنگام تعیین اهداف برای اجرای فرمان ، لطفاً به مرحله 5 راهنمای ما در مورد نحوه تنظیم موجودی های Ansible مراجعه کنید.
اجرای ماژول های Ansible
ماژول های Ansible قطعاتی از کد هستند که می توانند از playbooks و همچنین از خط فرمان دریافت شوند تا مراحل اجرا روی گره های از راه دور را تسهیل کنند. مثالها شامل ماژول apt ، برای مدیریت بسته های سیستم در اوبونتو و ماژول user است که برای مدیریت کاربران سیستم استفاده می شود. دستور ping مورد استفاده در سراسر این راهنما نیز یک ماژول است که به طور معمول برای تست اتصال از گره کنترل به هاست استفاده می شود.
Ansible با مجموعه گسترده ای از ماژول های داخلی همراه است که برخی از آنها به منظور فراهم آوردن قابلیت های کامل ، نیاز به نصب نرم افزار اضافی دارند. همچنین می توانید ماژول های دلخواه خود را با استفاده از زبان مورد نظر خود ایجاد کنید.
برای اجرای یک ماژول با آرگومان ها ، پرچم -a را به همراه گزینه های مناسب در نقل قول اضافه کنید ، مانند این:
$ ansible target -i inventory -m module -a “module options”
به عنوان نمونه ، از ماژول apt برای نصب بسته tree روی server1 استفاده می کند:
$ ansible server1 -i inventory -m apt -a “name=tree”
اجرای دستورات Bash
هنگامی که یک ماژول از طریق گزینه -m ارائه نمی شود ، از ماژول فرمان به طور پیش فرض برای اجرای دستور مشخص شده روی سرور محازی (های) راه دور استفاده می شود.
این امر به شما امکان می دهد تا بتوانید تقریبا هر فرمانی را اجرا کنید که بطور معمول از طریق یک ترمینال SSH اجرا میشود، مادامی که کاربر در حال اتصال مجوزهای کافی داشته باشد و هیچ گونه اعلان تعاملی وجود نداشته باشد.
این مثال فرمان uptime را در کلیه سرور محازی ها از موجودی مشخص شده اجرا می کند:
$ ansible all -i inventory -a “uptime”
Output
server1 | CHANGED | rc=0 >>
14:12:18 up 55 days, 2:15, 1 user, load average: 0.03, 0.01, 0.00
server2 | CHANGED | rc=0 >>
14:12:19 up 10 days, 6:38, 1 user, load average: 0.01, 0.02, 0.00
استفاده از افزایش امتیازات برای اجرای دستورات با sudo
اگر دستور یا ماژول مورد نظر برای اجرا روی هاستهای از راه دور نیاز به امتیازات گسترده سیستم یا کاربر سیستم دیگری دارد ، لازم است که از ماژول افزایش امتیاز Ansible استفاده کنید ، که ماژولی انتزاعی برای sudo و همچنین سایر نرم افزارهای افزایش امتیاز است که توسط Ansible در سیستم عامل های مختلف پشتیبانی می شود.
به عنوان مثال ، اگر می خواهید یک فرمان tail را برای خروجی آخرین پیام های ورود به سیستم از خطای Nginx روی سرور محازی به نام server1 از inventory ، اجرا کنید ، باید گزینه –become را به شرح زیر وارد کنید:
ansible server1 -i inventory -a “tail /var/log/nginx/error.log” –become
این می تواند معادل اجرای فرمان sudo tail /var/log/nginx/error.log بر روی میزبان از راه دور ، با استفاده از کاربر سیستم فعلی محلی یا کاربر از راه دور تنظیم شده در فایل inventory شما باشد.
سیستم های افزایش امتیاز مانند sudo اغلب با درخواست رمز ورود کاربر، از شما میخواهند که تأیید اعتبار کنید. این باعث می شود که Ansible در اجرای یک دستور یا اجرای playbook شکست بخورد. سپس می توانید از گزینه –ask-become-pass یا -K استفاده کنید تا Ansible اعلان رمز عبور sudo را درخواست کند:
$ ansible server1 -i inventory -a “tail /var/log/nginx/error.log” –become -K
نصب و حذف بسته ها
مثال زیر از ماژول apt برای نصب بسته nginx در تمام گره ها از فایل inventory استفاده می کند:
$ ansible all -i inventory -m apt -a “name=nginx” –become -K
برای حذف بسته ، آرگومان state را درج کنید و آن را روی absent تنظیم کنید:.
$ ansible all -i inventory -m apt -a “name=nginx state=absent” –become -K
کپی کردن فایل ها
با ماژول file ، می توانید فایلها را بین گره کنترل و گره های مدیریت شده ، از هر جهت کپی کنید. دستور زیر یک فایل متنی محلی را برای همه میزبانهای از راه دور در فایل inventory مشخص شده کپی می کند:
$ ansible all -i inventory -m copy -a “src=./file.txt dest=~/myfile.txt”
برای کپی کردن فایل از سرور محازی از راه دور در گره کنترل خود ، گزینه Remote_src را نیز اضافه کنید:
$ ansible all -i inventory -m copy -a “src=~/myfile.txt remote_src=yes dest=./file.txt”
تغییر مجوزهای فایل
برای تغییر مجوزها در فایل ها و دایرکتوری ها روی گره های از راه دور خود ، می توانید از ماژول file استفاده کنید.
دستور زیر مجوزها را روی فایلی به نام file.txt که در / var / www در میزبان از راه دور قرار دارد تنظیم می کند. این قسمت کادر اجرایی فایل را روی 600 تنظیم می کند ، که مجوزهای خواندن و نوشتن را فقط برای مالک فعلی فایل فعال می کند. علاوه بر این ، مالکیت آن فایل را برای کاربر و گروهی به نام sammy تعیین می کند:
$ ansible all -i inventory -m file -a “dest=/var/www/file.txt mode=600 owner=sammy group=sammy” –become -K
از آنجا که این فایل در یک دیرکتوری قرار دارد که معمولاً متعلق به root است ، برای تغییر ویژگی های آن ممکن است به مجوزهای sudo نیاز داشته باشیم. به همین دلیل گزینه های –become و -K را شامل می شود. اینها برای اجرای دستور دارای امتیازات گسترده از سیستم تشدید امتیاز Ansible استفاده می کنند ، و این امر باعث می شود که رمز عبور sudo را برای کاربر از راه دور تهیه کنید.
ریستارت سرویس ها
شما می توانید از ماژول service برای مدیریت سرویس های در حال اجرا روی گره های از راه دور که توسط Ansible استفاده می شود ، استفاده کنید. این امر به امتیازات گسترده سیستم نیاز دارد ، بنابراین اطمینان حاصل کنید که کاربر از راه دور شما دارای مجوزهای sudo است و شما از گزینه –become برای استفاده از سیستم افزایش امتیاز Ansible استفاده می کنید. استفاده از -K باعث می شود که رمز عبور sudo را برای کاربر متصل کننده فراهم کنید.
برای ریستارت سرویس nginx در تمام میزبانهای گروهی به نام webservers ، دستور زیر را اجرا کنید:
$ ansible webservers -i inventory -m service -a “name=nginx state=restarted” –become -K
ریستارت سرور محازی ها
اگرچه Ansible یک ماژول اختصاصی برای راه اندازی مجدد سرور محازی ها ندارد ، می توانید یک دستور bash صادر کنید که فرمان /sbin/reboot را روی میزبان از راه دور فراخوانی می کند.
راه اندازی مجدد سرور محازی به امتیازات گسترده سیستم نیاز دارد ، بنابراین اطمینان حاصل کنید که کاربر از راه دور شما دارای مجوزهای sudo است و شما از گزینه –become برای استفاده از سیستم افزایش امتیاز Ansible استفاده می کنید. استفاده از -K باعث می شود رمز عبور sudo را برای کاربر متصل کننده فراهم کنید.
هشدار: دستور زیر سرور محازی (های) هدف Ansible را ریستارت می کند. این امر ممکن است باعث ایجاد اختلال موقتی در هر برنامه ای که به آن سرور محازی ها متکی است، گردد.
برای ریستارت همه سرور محازی ها در یک گروه webservers دستور زیر را اجرا کنید :
$ ansible webservers -i inventory -a “/sbin/reboot” –become -K
جمع آوری اطلاعات در مورد گره های از راه دور
ماژول setup اطلاعات دقیق در مورد سیستمهای از راه دور مدیریت شده توسط Ansible ، که به system facts نیز شناخته میشود را نشان می دهد.
برای به دست آوردن system facts برای server1 ، دستور زیر را اجرا کنید:
$ ansible server1 -i inventory -m setup
این دستور مقدار زیادی از داده های JSON را چاپ می کند که حاوی جزئیاتی درباره محیط سرور محازی از راه دور است. برای اینکه فقط مرتبط ترین اطلاعات چاپ شود، عبارت “gather_subset=min” را به شرح زیر وارد کنید:
$ ansible server1 -i inventory -m setup -a “gather_subset=min”
برای چاپ فقط موارد خاص JSON ، می توانید از آرگومان filter استفاده کنید. که یک الگوی wildcard را میپذیرد که برای مطابقت رشته ها ، مشابه fnmatch ، استفاده میشود. به عنوان مثال ، برای به دست آوردن اطلاعات در مورد هر دو رابط شبکه ipv4 و ipv6 ، می توانید از * ipv * به عنوان فیلتر استفاده کنید:
ansible server1 -i inventory -m setup -a “filter=*ipv*”
Output
server1 | SUCCESS => {
“ansible_facts”: {
“ansible_all_ipv4_addresses”: [
“203.0.113.111”,
“10.0.0.1”
],
“ansible_all_ipv6_addresses”: [
“fe80::a4f5:16ff:fe75:e758”
],
“ansible_default_ipv4”: {
“address”: “203.0.113.111”,
“alias”: “eth0”,
“broadcast”: “203.0.113.111”,
“gateway”: “203.0.113.1”,
“interface”: “eth0”,
“macaddress”: “a6:f5:16:75:e7:58”,
“mtu”: 1500,
“netmask”: “255.255.240.0”,
“network”: “203.0.113.0”,
“type”: “ether”
},
“ansible_default_ipv6”: {}
},
“changed”: false
}
اگر می خواهید میزان استفاده از دیسک را بررسی کنید ، می توانید یک دستور Bash را با استفاده از ابزار df اجرا کنید ، به شرح زیر:
$ ansible all -i inventory -a “df -h”
Output
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0
نتیجه
در این راهنما ، ما نحوه استفاده از دستورات adible ad hoc را برای مدیریت سرور محازی های از راه دور ، از جمله نحوه اجرای کارهای متداول شامل ریستارت یک سرویس یا کپی کردن یک فایل از گره کنترل به سرور محازی های از راه دور که توسط آن قابل کنترل است ، نشان دادیم. همچنین نحوه جمع آوری اطلاعات از گره های از راه دور با استفاده از پارامترهای محدود کننده و فیلتر را مشاهده کردیم.
به عنوان یک منبع اضافی ، می توانید مستندات رسمی Ansible را در مورد دستورات ad hoc بررسی کنید.
نحوه استفاده از Traefik به عنوان پروکسی معکوس برای کانتینرهای Docker در اوبونتو 20.04
نحوه نصب و ایمن سازی Redis در Centos7
چگونه می توان محیط JupyterLab را در اوبونتو 18.04 تنظیم کرد
نحوه نصب Webmin در Ubuntu 20.04
نحوه بازنویسی آدرس های اینترنتی با mod_rewrite برای Apache در اوبونتو 20.04
نحوه مدیریت چندین سرور با دستورات Ad Hoc Ansible
چگونه می توان REST API را با Prisma و PostgreSQL ساخت
نحوه میزبانی وب سایت با استفاده از Cloudflare و Nginx در اوبونتو 18.04
نحوه استفاده از Traefik به عنوان پروکسی معکوس برای کانتینرهای Docker در Ubuntu 18.04
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
https://vpsgol.net/product/vps-germany/
https://vpsgol.net/product/vps-usa/
https://vpsgol.net/product/vps-france/
https://vpsgol.net/product/vps-canada/
https://vpsgol.net/product/vps-poland/
https://vpsgol.net/product/vps-netherlands/
https://vpsgol.net/product/vps-england/