วิธีใช้ Ansible Playbooks เพื่อทำให้งานที่ซับซ้อนเป็นอัตโนมัติบนเซิร์ฟเวอร์ระยะไกลหลายเครื่อง - ตอนที่ 2
ในบทความก่อนหน้าของซีรีส์ Ansible นี้ เราได้อธิบายว่า Ansible เป็นเครื่องมือที่ไม่ต้องใช้เอเจนต์ ซึ่งช่วยให้คุณจัดการเครื่องหลายเครื่องได้อย่างรวดเร็วและมีประสิทธิภาพ (หรือที่เรียกว่าโหนด และดำเนินการปรับใช้กับเครื่องเหล่านั้นด้วย) จากระบบเดียว
หลังจากติดตั้งซอฟต์แวร์ในเครื่องควบคุม สร้างคีย์สำหรับการเข้าสู่ระบบแบบไร้รหัสผ่านและคัดลอกไปยังโหนด ก็ถึงเวลาเรียนรู้วิธีเพิ่มประสิทธิภาพกระบวนการจัดการระบบระยะไกลดังกล่าวโดยใช้ Ansible
ตลอดทั้งบทความนี้และบทความถัดไป เราจะใช้สภาพแวดล้อมการทดสอบต่อไปนี้ โฮสต์ทั้งหมดอยู่ในกล่อง CentOS 7:
Controller machine (where Ansible is installed): 192.168.0.19
Node1: 192.168.0.29
Node2: 192.168.0.30
นอกจากนี้ โปรดทราบว่าทั้งสองโหนดได้ถูกเพิ่มในส่วนเว็บเซิร์ฟเวอร์ของไฟล์ /etc/ansible/hosts ในเครื่อง:
ที่กล่าวว่าเรามาเริ่มต้นกับหัวข้อที่มีอยู่กันดีกว่า
ขอแนะนำ Ansible Playbooks
ตามที่อธิบายไว้ในคำแนะนำก่อนหน้านี้ คุณสามารถใช้ยูทิลิตี ansible เพื่อรันคำสั่งในโหนดระยะไกลได้ดังต่อไปนี้:
ansible -a "/bin/hostnamectl --static" webservers
ในตัวอย่างด้านบน เรารัน hostnamectl --static
บน node1 และ node2 ใช้เวลาไม่นานในการตระหนักว่าวิธีการรันงานบนคอมพิวเตอร์ระยะไกลนี้ทำงานได้ดีสำหรับคำสั่งสั้นๆ แต่อาจกลายเป็นภาระหรือยุ่งเหยิงได้อย่างรวดเร็วสำหรับงานที่ซับซ้อนมากขึ้น ซึ่งต้องใช้พารามิเตอร์การกำหนดค่าที่มีโครงสร้างที่ดีเพิ่มเติม หรือการโต้ตอบกับบริการอื่นๆ
ตัวอย่างเช่น การตั้งค่าและกำหนดค่า WordPress บนหลายโฮสต์ ซึ่งเราจะกล่าวถึงในบทความถัดไปของชุดนี้) นี่คือจุดที่ Playbooks เข้ามามีบทบาท
พูดง่ายๆ ก็คือ Playbooks เป็นไฟล์ข้อความธรรมดาที่เขียนในรูปแบบ YAML และมีรายการที่มีรายการที่มีคู่คีย์/ค่าอย่างน้อย 1 คู่ (หรือที่เรียกว่า "แฮช ” หรือ “พจนานุกรม ”)
ภายใน Playbook แต่ละเล่ม คุณจะพบกลุ่มโฮสต์ตั้งแต่หนึ่งกลุ่มขึ้นไป (แต่ละกลุ่มเรียกอีกอย่างว่า ละคร) ซึ่งจะมีการดำเนินงานที่ต้องการ
ตัวอย่างจากเอกสารอย่างเป็นทางการจะช่วยเราในการอธิบาย:
1. โฮสต์: นี่คือรายการของเครื่อง (ตาม /etc/ansible/hosts) ที่จะดำเนินการงานต่อไปนี้
2. remote_user: บัญชีระยะไกลที่จะใช้ในการดำเนินงาน
3. vars: ตัวแปรที่ใช้ในการแก้ไขพฤติกรรมของระบบระยะไกล
4. งานจะได้รับการดำเนินการตามลำดับทีละงานกับเครื่องทั้งหมดที่ตรงกับโฮสต์ ในการเล่น โฮสต์ทั้งหมดจะได้รับคำสั่งงานเดียวกัน
หากคุณต้องการดำเนินการชุดงานที่เกี่ยวข้องกันสำหรับโฮสต์เฉพาะ ให้สร้างบทละครอื่นใน Playbook ปัจจุบัน (หรืออีกนัยหนึ่ง จุดประสงค์ของการเล่นคือการจับคู่โฮสต์ที่เลือกไว้อย่างดี -งานที่กำหนด)
ในกรณีดังกล่าว ให้เริ่มเล่นใหม่โดยเพิ่มคำสั่งโฮสต์ที่ด้านล่างและเริ่มใหม่:
---
- hosts: webservers
remote_user: root
vars:
variable1: value1
variable2: value2
remote_user: root
tasks:
- name: description for task1
task1: parameter1=value_for_parameter1 parameter2=value_for_parameter2
- name: description for task1
task2: parameter1=value_for_parameter1 parameter2=value_for_parameter2
handlers:
- name: description for handler 1
service: name=name_of_service state=service_status
- hosts: dbservers
remote_user: root
vars:
variable1: value1
variable2: value2
…
5. ตัวจัดการคือการดำเนินการที่ถูกทริกเกอร์เมื่อสิ้นสุดส่วนงานในการเล่นแต่ละครั้ง และส่วนใหญ่จะใช้เพื่อรีสตาร์ทบริการหรือทริกเกอร์การรีบูตในระบบระยะไกล
mkdir /etc/ansible/playbooks
และไฟล์ชื่อ apache.yml อยู่ข้างในโดยมีเนื้อหาดังต่อไปนี้:
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: replace default index.html file
copy: src=/static_files/index.html dest=/var/www/html/ mode=0644
notify:
- restart apache
- name: ensure apache is running (and enable it at boot)
service: name=httpd state=started enabled=yes
handlers:
- name: restart apache
service: name=httpd state=restarted
ประการที่สอง สร้างไดเร็กทอรี /static_files:
mkdir /static_files
ตำแหน่งที่คุณจะจัดเก็บไฟล์ index.html ที่กำหนดเอง:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
</script>
</head>
<body>
<h1>Apache was started in this host via Ansible</h1><br>
<h2>Brought to you by linux-console.net</h2>
</body>
</html>
ถึงกระนั้น ตอนนี้ก็ถึงเวลาใช้ Playbook นี้เพื่อทำงานตามที่กล่าวไว้ข้างต้น คุณจะทราบว่า Ansible จะดำเนินการแต่ละงานตามโฮสต์ ทีละงาน และจะรายงานสถานะของงานดังกล่าว:
ansible-playbook /etc/ansible/playbooks/apache.yml
ตอนนี้เรามาดูกันว่าเกิดอะไรขึ้นเมื่อเราเปิดเบราว์เซอร์และชี้ไปที่ 192.168.0.29 และ 192.168.0.30:
ก้าวไปอีกขั้นหนึ่งด้วยการหยุดและปิดการใช้งาน Apache บน node1 และ node2 ด้วยตนเอง:
systemctl stop httpd
systemctl disable httpd
systemctl is-active httpd
systemctl is-enabled httpd
แล้ววิ่งอีกครั้ง
ansible-playbook /etc/ansible/playbooks/apache.yml
คราวนี้ งานรายงานว่าเว็บเซิร์ฟเวอร์ Apache เริ่มต้นและเปิดใช้งานในแต่ละโฮสต์:
โปรดพิจารณาตัวอย่างข้างต้นเป็นการสรุปถึงพลังของ Ansible แม้ว่างานเหล่านี้จะค่อนข้างง่ายเมื่อดำเนินการบนเซิร์ฟเวอร์จำนวนไม่มาก แต่ก็อาจกลายเป็นเรื่องน่าเบื่อและใช้เวลานานได้ หากคุณต้องการทำแบบเดียวกันในเครื่องหลายเครื่อง (อาจเป็นหลายร้อย)
สรุป
ในบทความนี้ เราได้อธิบายวิธีการรันคำสั่งและดำเนินงานที่ซับซ้อนบนโฮสต์ระยะไกลหลายเครื่องพร้อมกันโดยใช้ Ansible เอกสารอย่างเป็นทางการและที่เก็บ GitHub มีตัวอย่างและคำแนะนำมากมายเกี่ยวกับวิธีใช้ Ansible เพื่อให้บรรลุงานแทบทุกอย่างเท่าที่จะจินตนาการได้
เมื่อคุณเริ่มเรียนรู้วิธีการทำงานอัตโนมัติบนโฮสต์ Linux ระยะไกลโดยใช้ Ansible เราต้องการทราบความคิดเห็นของคุณ เรายินดีต้อนรับคำถาม ความคิดเห็น และข้อเสนอแนะเสมอ ดังนั้นโปรดติดต่อเราโดยใช้แบบฟอร์มด้านล่างได้ตลอดเวลา