Tim hiểu chef linux


##Giới thiệu

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ấu hình hệ thống, performance. Đặ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 thống nhất giữa 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 lập, cấu hình đã dùng trong quá trình development và production cũng phải đảm bảo tính thống nhất. Do đó 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. Các thông tin package, library, config của cấu hình hệ thống sẽ cấu hình bằng cú pháp của ngôn ngữ lập trình 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 sẽ tự động cấu hình server các server dựa trên các code này.

Việc quản lí cấu trúc hệ thống bằng code có những ích lợi sau

  • Các cấu hình, setting 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, có thể 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àng hình dung được quá trình xây dựng hệ thống.
  • Quá trình check & review các setting sẽ đơn giản hơn nhiều bằng cách review code thay vì login vào từng server để check.

##Chef Chef được xây dựng để xử lí những thách thức lớn nhất trong việc quản lí cấu hình hệ thống. Bằng cách mô hình hoá và quản lí cấu trúc hệ thống bằng code, Chef mang lại sức mạnh và tính cơ động cao trong việc quản lí hệ thống. 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.

http://www.opscode.com/chef/

###Các khái niệm cơ bản 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)

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 setting cơ bản như tên package, version, action là được Chef sẽ tự động cài đặt setting cụ thể đối với từng hệ điều hành từng version.-> File setting 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 setting 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

###Mô hình hoạt động của chef

Chef hoạt động dựa trên các định nghĩa có thể tái sử dụng được biết đến như là các recipe (thực đơn) để tự động cấu hình hệ thống. Những chỉ lệnh trong recipe dùng để cấu hình server, database, cân bằng tải. Các recipe mô tả các thành phần của hệ thống cần được triển khai, bảo trì. Recipe sử dụng những khối resource. Resource mô tả 1 phần của hệ thống ví dụ như file, package. Chúng ta có thể sử dụng các resource có sẵn trong Chef hoặc tự viết resource. Chef server lưu lại các recipe cũng như các dữ liệu cấu hình hệ thống. Mỗi node trong mạng sẽ cài được cài đặt Chef client. 1 node có thể là 1 máy chủ vật lí hoặc 1 máy chủ ảo. Chef client định kì kiểm tra các recipe mới nhất trên Chef server và kiểm tra xem node có phù hợp với các recipe đó không. Nếu node đã outdate thì Chef client sẽ chạy các bản cập nhật cho node đó

Tim hiểu chef linux