Trong các giai đoạn phát triển các ứng dụng, dịch vụ dùng server thì việc xây dựng deployment là không thể thiếu được. Giai đoạn này đòi hỏi người thiết định phải có kinh nghiệm, kiến thức về server, các thiết định performance cùng với tính chính xác trong từng thao tác.
Đặc biệt là đối với các hệ thống có số node (server) từ 2 hoặc nhiều hơn thì việc thiết định thống nhất giữ 2 server là rất quan trọng. Người thực hiện bắt buộc phải ghi nhớ các libraries, tools của từng loại server (DB server thế nào, Cache server, Web server như thế nào).
Ngoài ra các thiết định đã dùng trong quá trình development và production cũng phải đảm bảo tính thống nhất.
Túm lại, quá trình deployment thường gặp phải các khó khăn
- tốn thời gian và công sức
- việc sai sót là không thể tránh khỏi.
Infrastructure as Code
Một trong các cách giải quyết các khó khăn trong vấn đề deploy các ứng dụng là quản lý cấu trúc hệ thống bằng code. Infrastructure as Code là khái niệm quan trọng nhất, các thông tin package, library, config của cấu hình hệ thống sẽ thiết định bằng syntax của ngôn ngữ lập trình Ruby và được sử dụng như các chương trình lập trình. Như thế, việc xây dựng cấu hình hệ thống sẽ trở nên giống như lập trình một chương trình vậy.
Framework tự động cấu hình server Chef sẽ tự động cấu hình các server dựa trên các code này.
Chúng ta sẽ có những lợi điểm như sau:
- Các thiết định này được lưu lại dưới dạng source code nên đảm bảo tính thống nhất, tính tái sử dụng lại của các thao tác
- Chỉ bằng các lệnh đơn giản, Chef thực hiện xây dựng hàng loạt các server với các cấu hình cần thiết là giảm đi dáng kể thời gian và công sức.
- Nếu các code này được quản lý bằng SVN hoặc Git, bằng cách xem lại các commit log thì sẽ dễ dànd hình dung được quá trình xây dựng hệ thống.
- Quá trình check & review thiết định sẽ đơn giản hơn nhiều bằng cách review code thay vì login vào từng server để check.
1.Cơ bản về Chef
Chef là gì_?
Chef is built to address the hardest infrastructure challenges on the planet. By modeling IT infrastructure and application delivery as code, Chef provides the power and flexibility to compete in the digital economy.
http://www.opscode.com/chef/
Chef là 1 framework tự động tạo và cấu hình hệ thống (provision). Chef là phần mềm mã nguồn mở (OSS: Open Source Software) được phát triển bởi Opscode bằng ngôn ngữ Ruby.
Các khái niệm cơ bản
Lần này mình sẽ làm quen với các khái niệm cơ bản trong Chef (chef-solo) .Các khái niệm trong chef dựa theo motip là một người đầu bếp (Chef) dùng các thực đơn (Recipe) để chế biến các món ăn (server)
Đây là cấu tạo một thư mục của một chef
[tuan@tmac boxes]$ tree -L 3 chef-repo/
├── cookbooks
├── nodes
│ └── webdb.json
└── site-cookbooks
└── nginx
├── attributes
├── definitions
├── files
├── libraries
├── providers
├── recipes
├── resources
└── templates
Các phần quan trọng nhất gồm có:
- Recipe: Các thiết định cấu hình được viết bằng ngôn ngữ domain (DSL: Domain Specific Language) của Ruby. Ở đây chỉ cần viết những thiết định cơ bản như tên package, version, action là được Chef sẽ tự động thiết định cách cài đặt thiết định cụ thể đối với từng hệ điều, từng version.-> File thiết định dùng cho server centos cũng có thể dùng cho server ubuntu, …
- Cookbook: Là tập hợp các recipe, thông thườngthường thì mỗi cookbook dùng cho một application ví dụ như nginx, http,… Ngoài recipe thì trong Cookbook còn có thêm Template là các file thiết định của application, Attribute là các thuộc tính riêng thích ứng với từng môi trường server. Thông thường thì cookbook người dùng thường được tách ra vào 1 thư mục (site-cookbooks)
- Resource: (Nguyên liệu) ngoài các package thì còn có các kiểu khác mà người dùng có thể tự viết thêm để thoả mãn yêu cầu hệ thống.
- Nodes: Là file JSON thiết định các attribute cho từng node (server). Các attribute này có thể đọc được từ recipe, template
ChefServer vs ChefSolo
ChefServer: Thường dùng đối với các hệ thống có lượng node lớn, dùng một server để làm Chef server, các node sẽ hoạt động giống như 1 Chef client nhận được dữ liệu từ Chef server.
ChefSolo: Là hệ thống hoạt động standalone không cần server chạy riêng cho Chef, thường dành cho hệ thống vừa và bé với lượng node ít, ChefSolo cũng giống như ChefServer có đầy đủ các chức năng của Chef
Recipe & Cookbook
Người dùng có thể tự viết recipe cho hệ thống của mình hoặc dùng các recipe có sẵn được chia sẽ trên các trang tham khảo. https://github.com/opscode/cookbooks
2.Viết thử một recipe
Chuẩn bị
Cài đặt Ruby:
Trên Mac: http://railsapps.github.io/installrubyonrails-mac.html
Trên Window: http://www.railsviet.com/ruby-co-ban-2-huong-dan-cai-dat-ruby-tren-windows/
Cài đặt Chef-solo
Mình dùng Ruby Version Manager (RVM) để quản lý version
[tuan@tmac boxes]$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwi
gem install bundler
[tuan@tmac boxes] sudo gem install bundler
[tuan@tmac boxes] bundler -v
gem install bundler
[tuan@tmac boxes] sudo gem install bundler
[tuan@tmac boxes] bundler -v
[tuan@tmac boxes] bundle exec rake build
[tuan@tmac boxes] bundle
[tuan@tmac boxes] sudo chown -R tuan /Library/Ruby/Gems/2.0.0/build_info/
Dùng knife để tạo dữ liệu ( dao) (chef, recipe)
[tuan@tmac boxes] bundle
[tuan@tmac boxes] bundle exec knife configure
[tuan@tmac boxes] bundle exec knife solo init chef-repo
Tạo repository cho Chef || Quản lý thông tin bằng Git
{code>
[tuan@tmac boxes] ls
[tuan@tmac boxes] git init
[tuan@tmac boxes] git add .
[tuan@tmac boxes] git commit -m ‘first commit’
File cài đặt cho chef được lưu lại Server)
Lần tới mình sẽ giới thiệu phần thông tin thiết của recipe, thưc tế demo,
Bạn viết phần tiếp đi. Thanks bài viết của bạn nhiều lắm!
Cám ơn bạn đã đọc bài của mình. Mình sẽ cố gắng viết tiếp sớm.
Lâu quá chưa viết bài mới bạn uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii.