Danh sách bài viết trong series Sử dụng Ansible tự động hệ thống
- Bài 1: Ansible Là Gì Mà Dân DevOps Mê Thế?
- Bài 2: Ansible Inventory – Danh Bạ Server Của Bạn
- Bài 3: Ansbile Ad-Hoc – Lệnh Nhanh Như Chớp
- Bài 4: Ansbile Playbook Đầu Tiên – Đừng Sợ YAML
- Bài 5: Ansible Variables – Bí Kíp Linh Hoạt Hóa Mọi Thứ
- Bài 6: Ansible Module Nâng Cao – Mở Rộng Khả Năng
- Bài 7: Ansible Roles – Sạch Sẽ Như Nhà Mới Dọn
- Bài 8: Ansible Template Jinja2 – Config Động Như Phim Marvel
- Bài 9: Ansible Conditionals Và Loops – Đỉnh Cao Điều Khiển
- Bài 10: Ansible Error Handling – Không Panic Khi Fail
- Bài 11: Ansible Quản Lý Cloud – Chơi Lớn Với AWS
- Bài 12: Ansible Dynamic Inventory – Danh Sách Server Tự Động
- Bài 13: Ansible Vault – Khóa Két Sắt Cho Bí Mật
- Bài 14: Ansible Tower/AWX – Trung Tâm Điều Khiển DevOps
- Bài 15: Ansible Best Practices – Viết Ansible Sạch, Chạy Đỉnh Cao
Hồi đó, mình nhớ như in cái ngày đầu tiên biết đến Ansible Ad-Hoc DevOps. Lúc ấy, mình đang đau đầu vì phải SSH từng server để cài Nginx, kiểm tra disk, rồi restart service – mệt muốn xỉu. Rồi một ông bạn DevOps bảo: “Mày dùng ad-hoc đi, gõ một lệnh là xong cả đống việc!”. Mình thử, và đúng là “tay nhanh hơn não” thật! Hôm nay, mình sẽ kể bạn nghe Ansible Ad-Hoc DevOps là gì, tại sao nó tiện, và cách mình từng dùng nó để giải quyết công việc vặt trong DevOps. Cùng làm vài thí nghiệm nhỏ để bạn thấy sức mạnh của nó nhé!
Ansible Ad-Hoc DevOps Là Gì? – “Lệnh Đột Kích” Của DevOps
Nói đơn giản, Ansible Ad-Hoc DevOps là cách chạy lệnh nhanh trên nhiều server mà không cần viết playbook phức tạp. Bạn có thể tưởng tượng nó như “lệnh đột kích” – khi cần làm việc gì gấp, không muốn mất thời gian code dài dòng, bạn chỉ cần gõ một dòng lệnh là xong. Hồi mới làm DevOps, mình toàn SSH tay để update package hay kiểm tra trạng thái service. Có lần quản 7 server, gõ nhầm lệnh apt upgrade
mà quên kiểm tra, làm một con server reboot bất ngờ – sếp gọi hỏi tới tấp. Từ đó, mình tìm đến ad-hoc, và nó thay đổi cách mình làm việc hoàn toàn.
Vậy Ansible Ad-Hoc DevOps khác gì playbook? Playbook là “kế hoạch dài hạn” – bạn viết ra, lưu lại, chạy nhiều lần. Còn ad-hoc là “hành động tức thời” – gõ xong là chạy ngay, không cần lưu. Nó dùng các module (như command
, shell
, apt
) để thực thi task. Mình thích ad-hoc vì nó giúp xử lý nhanh những việc nhỏ, kiểu như kiểm tra disk hay restart service khi server “lăn ra ngủ” giữa giờ cao điểm.
Chuẩn Bị Trước Khi Chơi Ad-Hoc
Trước khi dùng Ansible Ad-Hoc DevOps, bạn cần file inventory (như bài 2 đã làm). Mình sẽ dùng file hosts
từ trước:
[webservers]
web1 ansible_host=192.168.1.10 ansible_user=ubuntu
web2 ansible_host=192.168.1.11 ansible_user=ubuntu
[dbservers]
db1 ansible_host=192.168.1.20 ansible_user=ubuntu
Đảm bảo SSH key đã setup (bài 1), và Ansible đã cài (cũng bài 1 luôn). Mình từng quên kiểm tra SSH trước, chạy ad-hoc xong báo “UNREACHABLE” – mất cả buổi debug mới biết key chưa copy sang server. Nên nhớ: Kiểm tra SSH tay trước khi chơi ad-hoc nhé!
Thử Lệnh Ad-Hoc Đơn Giản Nhất
Bắt đầu với cái gì dễ nhất – kiểm tra server còn sống không. Chạy lệnh:
ansible webservers -i hosts -m ping
-i hosts
: File inventory.-m ping
: Module ping, hỏi “Server ơi, mày ổn không?”.
Nếu thấy:
web1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
web2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Là server vẫn “khỏe re”! Mình nhớ lần đầu chạy lệnh này, thấy “pong” mà sướng cả ngày – đơn giản mà hiệu quả. Còn nếu lỗi, thêm -v
để debug:
ansible webservers -i hosts -m ping -v
Nó sẽ hiện chi tiết lỗi (VD: “connection refused”), giúp bạn fix nhanh.
Làm Việc Vặt Với Ad-Hoc
Ad-hoc mạnh ở chỗ nó xử lý công việc vặt nhanh gọn. Dưới đây là vài ví dụ mình hay dùng:
-
Kiểm Tra Disk Usage:
ansible webservers -i hosts -m command -a "df -h /"
Kết quả:
web1 | SUCCESS | rc=0 >> /dev/sda1 20G 5.2G 14G 28% / web2 | SUCCESS | rc=0 >> /dev/sda1 20G 6.0G 13G 32% /
Một lệnh mà kiểm tra disk cả nhóm – so với SSH tay từng máy, tiết kiệm cả đống thời gian!
-
Cài Package (VD: Nginx):
ansible webservers -i hosts -m apt -a "name=nginx state=present" -b
-m apt
: Module quản lý package trên Debian/Ubuntu.-a "name=nginx state=present"
: Cài Nginx nếu chưa có.-b
: Chạy với quyền sudo (cần SSH key có quyền).
Kết quả:
web1 | SUCCESS => {
"changed": true,
"msg": "nginx is already the newest version"
}
web2 | SUCCESS => {
"changed": true,
"msg": "nginx is already the newest version"
}
Mình từng dùng lệnh này để cài Nginx trên 5 server chỉ trong 1 phút – nhanh hơn cả Flash chạy đua!
- Restart Service:
ansible webservers -i hosts -m service -a "name=nginx state=restarted" -b
Nếu Nginx bị treo, lệnh này sẽ restart nó ngay. Mình nhớ có lần server web bị lỗi 500, dùng ad-hoc restart xong là hết – sếp khen mình “nhanh tay lẹ mắt”.
Thực Hành Nhẹ: Cài Nginx Và Kiểm Tra
Giờ bạn thử làm một chuỗi ad-hoc xem sao. Mình sẽ hướng dẫn cài Nginx và kiểm tra trạng thái:
-
Cài Nginx:
ansible webservers -i hosts -m apt -a "name=nginx state=present" -b
Chờ nó chạy, nhìn output xem có lỗi không.
-
Kiểm Tra Trạng Thái:
ansible webservers -i hosts -m service -a "name=nginx state=started" -b
Kết quả:
web1 | SUCCESS => { "changed": false, "name": "nginx", "state": "started" } web2 | SUCCESS => { "changed": false, "name": "nginx", "state": "started" }
Nếu thấy “state: started”, là Nginx đã chạy ngon lành. Mình từng quên bước này, để server chạy mà không biết Nginx chưa start – mất cả buổi debug!
Mẹo Nhỏ Từ Kinh Nghiệm Thật
- Chạy thử trước: Dùng
--check
để mô phỏng, không thay đổi thật:ansible webservers -i hosts -m apt -a "name=nginx state=present" -b --check
Mình hay dùng cái này để tránh lỗi bất ngờ.
- Giới hạn số server: Nếu nhiều server, thêm
-l
để chạy trên một vài máy:ansible webservers -i hosts -m ping -l web1
Mình từng chạy nhầm cả cụm 20 server, làm mạng lag cả ngày.
- Lỗi sudo?: Nếu báo “permission denied”, check SSH key có quyền sudo không. Mình từng quên thêm user vào sudoers, mất cả tiếng fix.
Có lần mình dùng ad-hoc để update package trên 10 server. Vui quá, quên kiểm tra, gõ nhầm apt upgrade -y
mà không lọc nhóm, làm cả database server cũng nâng cấp – kết quả là MySQL crash, mất 2 tiếng rollback. Từ đó, mình luôn chia nhóm rõ ràng trong inventory và test ad-hoc trên 1-2 server trước khi “chiến” cả cụm.
Sau vụ thất bại trên, mình càng yêu Ansible Ad-Hoc DevOps hơn. Nó như “người bạn đồng hành” – khi cần làm việc gấp, chỉ cần gõ vài dòng là xong. So với SSH tay, ad-hoc giúp mình tiết kiệm thời gian và giảm lỗi kinh khủng. Lần đầu dùng, mình còn ngạc nhiên: “Chỉ một lệnh mà làm được thế này sao?”. Nhưng đúng là sức mạnh của Ansible nằm ở sự đơn giản mà hiệu quả.
Tiếp Theo Là Gì?
Bài này tụi mình đã làm quen với Ansible Ad-Hoc DevOps, từ ping server đến cài Nginx siêu nhanh. Lần sau, mình sẽ kể bạn nghe cách viết playbook – kiểu “kế hoạch dài hạn” của Ansible. Bạn sẽ thấy cách tổ chức task sao cho chuyên nghiệp, không còn phải gõ ad-hoc lung tung nữa! Chịu không?
Thử Nghiệm Nhẹ: Thử cài Nginx trên webservers
như hướng dẫn, rồi restart service xem. Nếu có server thật, thêm vào inventory và chạy thử. Có gì thắc mắc cứ nhắn mình nhé – ad-hoc là “vũ khí” đầu tiên, làm quen tốt là bạn đã đi được nửa chặng đường!