tự động triển khai và quản lý cấu hình linux ở quy mô nhỏ - có đáng không?


24

Tôi sắp triển khai ~ 25 máy chủ chạy Debian . Các máy sẽ có các vai trò khác nhau - máy chủ web, ứng dụng Java, proxy, hộp MySQL. Môi trường có thể sẽ không phát triển nhiều trong tương lai - có thể thêm 2-5 máy chủ trong 2 năm tới.

Có lẽ tôi sẽ sử dụng fai để cài đặt hệ thống, nhưng tôi không chắc liệu có đáng để thêm quản lý cấu hình tập trung cengine hoặc con rối cho quy mô nhỏ như vậy không.

Liệu quản lý cấu hình có ý nghĩa cho một môi trường kích thước này?

Câu trả lời:


29

Tôi khuyên bạn nên sử dụng hỗn hợp trước khi gieo hạt Debian, nơi bạn cung cấp cho trình cài đặt một tệp văn bản trả lời tất cả các câu hỏi mà nó sẽ hỏi và Puppet.

Lý do cho việc sử dụng tính năng chèn sẵn, thay vì FAI là bạn không phải thiết lập hình ảnh trước và xử lý để cập nhật hình ảnh. Bạn sẽ kết thúc với một cài đặt rất giống với những gì bạn sẽ có nếu bạn làm tất cả bằng tay. Khi bạn đến để cài đặt một bản phát hành mới, bạn sẽ phải cập nhật một tệp cấu hình với các thay đổi, thay vì phải xây dựng lại một hình ảnh mới.

Một công cụ quản lý cấu hình đặc biệt hữu ích khi bạn có một số máy chủ thực hiện cùng một vai trò và bạn muốn chúng giống hệt nhau, ví dụ: cụm máy chủ web. Tuy nhiên, chúng cũng có thể hữu ích cho việc cấu hình cài đặt cơ sở của tất cả các máy chủ. Bạn sẽ muốn cài đặt các gói cụ thể trên tất cả các máy chủ của mình, như ntpd và MTA. Bạn sẽ muốn thay đổi một tập tin cấu hình trên tất cả các máy chủ của bạn. Một lợi ích bổ sung là bạn có thể giữ các bảng kê khai của mình trong một cái gì đó như lật đổ và ghi lại những gì đã thay đổi trên máy chủ và ai đã làm điều đó và tại sao. Quản lý cấu hình cũng có thể là một trình bảo vệ cuộc sống trong trường hợp máy chủ bị lỗi và bạn cần phải xây dựng lại nó một cách nhanh chóng. Cài đặt HĐH (sử dụng FAI hoặc preseising), cài đặt con rối và đi, đi, xây dựng lại chính xác như trước đây. Rõ ràng bạn sẽ cần phải sao lưu dữ liệu.

Quản lý cấu hình yêu cầu sự tận tâm để đảm bảo bạn chỉ thực hiện các thay đổi khi sử dụng nó và sẽ có chi phí trả trước để thiết lập mọi thứ, nhưng một khi bạn có một thiết lập hoạt động, bạn sẽ không hối tiếc.

Con rối là công cụ hiện đại hơn trong hai công cụ bạn đã đề cập. Tôi thực sự giới thiệu nó cho bất cứ ai. Cấu hình là một ngôn ngữ khai báo và dễ dàng xây dựng các cấu trúc cấp cao hơn. Ngoài ra còn có một cộng đồng rất lớn xung quanh nó và luôn có những người được chào đón để giúp đỡ trong danh sách gửi thư hoặc kênh IRC.


cảm ơn cho gợi ý về hạt giống trước. Tôi đang xem các tài liệu về nó ngay bây giờ.
pQd

FAI là skool cũ; Tôi chắc chắn sẽ không đề nghị nó. Preseising + Puppet ftw.
womble

Chúng tôi sử dụng FAI và cengine, chúng tôi có khoảng 1000 máy và nó hoạt động rất tốt. Đáng chú ý là bạn có thể ssh vào máy khi nó tự xây dựng, do đó có thể làm cho việc viết các tập lệnh vi mô trở nên dễ dàng hơn.
James

FAI cũ? KHÔNG! FAI là đá rắn và có hơn 10 năm kinh nghiệm. Hãy xem danh sách dài những người dùng FAI tại fai-project.org/reports
Thomas Lange

Lời khuyên tốt, chúng tôi sử dụng một cách tiếp cận tương tự và nó hoạt động tốt. Tuy nhiên, tôi sẽ không loại bỏ FAI. FAI không sử dụng hình ảnh để cài đặt (SystemImager thực hiện điều đó). Bạn phải thiết lập một thư mục gốc nfs tối thiểu được sử dụng để chạy trình cài đặt FAI. Quá trình cài đặt được tự động hóa với các tệp cấu hình và thực hiện các hook do người dùng xác định. Ưu điểm so với dự đoán trước là khái niệm về các lớp FAI giúp dễ dàng xử lý nhiều máy chủ (và thậm chí cả máy trạm) có các vai trò khác nhau.
JooMing

10

Tôi muốn giới thiệu CFengine cho bất kỳ môi trường nào có nhiều hơn 2-3 hộp và nơi bạn có một số khái niệm về 'mẫu' hoặc máy chủ thực hiện các vai trò cụ thể.

Tại sao? Nói một cách đơn giản, nó giúp giảm lỗi, bạn có một công cụ đảm bảo quyền truy cập tệp / thư mục chính xác ở mọi nơi trong môi trường và khi bạn tung ra nhiều máy chủ hơn, công cụ sẽ xử lý hoàn toàn mọi thứ và không bao giờ mắc lỗi.

Tương phản với ngay cả một Quản trị viên hệ thống lành nghề tung ra một máy chủ web vào cuối ca làm việc mười hai giờ khi có sự cố xảy ra .... Họ có thể nhớ rằng tệp cấu hình nhỏ khó chịu cần phải đi vào / etc / Random / location / foo / bar nếu không ứng dụng sẽ âm thầm không làm điều gì đó khá quan trọng, như khách hàng thanh toán hóa đơn? :)

Các công cụ như CFengine cũng là một cách tuyệt vời để thực hiện cập nhật bảo mật toàn môi trường. Việc thả cấu hình Nagios (NRPE) vào tất cả các hộp cũng là một cách né tránh. Cho dù bạn đang xử lý năm hộp hay năm trăm hộp, bạn sẽ tiết kiệm được thời gian với CFengine.

Có lẽ đáng lưu ý rằng môi trường của tôi lớn hơn một chút, tuy nhiên tôi cũng đã triển khai CFengine cho các môi trường nhỏ hơn bạn lưu ý, do đó khuyến nghị!

Có lẽ câu hỏi tiếp theo của bạn sẽ là CFengine vs Puppet? Đó là một quyết định khó khăn hơn và tôi đã luôn đi CFengine do (trong những ngày đầu) một chút non nớt từ Puppet, đặc biệt là về việc ghi nhật ký lỗi .... những ngày này tôi thực sự không chắc chắn - có chơi không? Nhìn lại các vấn đề cụ thể của tôi với Puppet, chúng có liên quan đến chứng chỉ SSL, tôi vẫn nhớ rất nhiều thời gian tôi đã mất 3 giờ để chẩn đoán máy chủ <-> các vấn đề kết nối máy khách trong irc.freenode.net/#puppet với một số RTFM và RTFS khổng lồ chỉ để tìm một lỗi, không được ghi lại và Luke nói, "Ah thật sự rất khó sửa" và không bao giờ xảy ra. :


điểm tốt. vấn đề là trong trường hợp của tôi, mọi thứ sẽ được chuyên môn hóa cao, số lượng mẫu [vì dư thừa] có thể sẽ vào khoảng n / 2 [trong đó n là tổng số máy chủ].
pQd

1
Điều đó không có gì xấu, hầu hết các cụm WWW của tôi là n + 2 nếu không phải là n / 2 và bạn có thể khá linh hoạt với CFengine trong việc triển khai các nút phía sau bộ cân bằng tải của bạn như HAproxy. Hoàn toàn khả thi để quản lý IPVS và các công cụ cố định :-) Ngay cả với n / 2 yêu cầu dự phòng, tôi muốn bạn có nhiều tệp cấu hình giống hệt hoặc tương tự trong môi trường của mình? Hãy nhớ rằng với CFengine, bạn có công cụ 'editfiles' để thực hiện những việc như tệp cấu hình "templated" có chứa một cái gì đó như IP và sau đó (trong thời gian chạy) tìm và thay thế bằng thông tin đúng. ;)
nixgeek

@astinus cảm ơn ý kiến ​​của bạn. Tôi cũng hơi sợ việc sản xuất của mình xuống bằng cách làm hỏng cấu hình trung tâm. Bạn nghĩ gì về việc vô hiệu hóa việc bỏ phiếu tự động của cấu hình và đăng nhập trên mỗi máy và buộc nó phải cập nhật và kiểm tra thủ công nếu tất cả mọi thứ đều ổn? [vâng, tôi cũng sẽ có nagios / giám sát tùy chỉnh tại chỗ ... nhưng vẫn].
pQd

1
Tôi nghĩ rằng sự tin tưởng vào các kỹ thuật quản lý cấu hình của bạn đi cùng với thời gian, nhưng trong thời gian tạm thời, chỉ cần vô hiệu hóa việc bỏ phiếu tự động của các hộp và sử dụng 'cssh' để đăng nhập vào từng loại hộp để chạy 'cfagent -qv' (hoặc bất cứ điều gì!) bạn muốn đẩy cập nhật. Nếu bạn muốn một mẹo hàng đầu để tăng cường sự tự tin, hãy triển khai một máy ảo như một môi trường 'dàn dựng' và đảm bảo tất cả các thay đổi đều được thực hiện trước tiên. Khá dễ dàng nếu bạn giữ cấu hình CFengine hoặc Puppet trong Subversion, chỉ cần sử dụng các nhánh và thẻ.
nixgeek

Tôi cũng sẽ khuyên bạn nên sử dụng SLACK để đơn giản hóa việc cài đặt lại hệ thống, quản lý cấu hình. Nó có sẵn ở đây: sundell.net/~alan/projects/slack
HK_

5

Ngoài cengine và con rối, còn có đầu bếp . Tôi thực sự khuyên bạn nên sử dụng một trong những công cụ này vì mọi thứ sẽ luôn phát triển theo hướng bất ngờ. Điều này giúp quản lý mọi thứ trong một vị trí tập trung.

Điều quan trọng cần nhận ra là rất có thể bạn sẽ không có được mọi thứ nhưng nếu bạn ít nhất có thể đạt được 90% ở đó, thì đó là một sự khởi đầu. Bên cạnh đó, điều đó thật thú vị và sẽ giúp cuộc sống của bạn dễ dàng hơn về lâu dài. Cuối cùng, đó là một kỹ năng tốt để tiến lên.


đầu bếp là một mục gần đây trong cảnh quản lý cấu hình. Nó được thiết kế để được cấu hình bằng cách viết ruby ​​để làm những gì bạn muốn, trái ngược với ngôn ngữ khai báo tùy chỉnh của con rối. Thời gian sẽ cho biết phương pháp nào hoạt động tốt. Tôi hiện đang ngồi trong trại rối.
David Pashley

3

Tôi đang sử dụng cengine từ 5 năm nay để cài đặt debian (từ gỗ cho đến lenny ngày nay). Với etch tôi xây dựng một trình cài đặt debian tùy chỉnh. Nhờ preseed một câu hỏi duy nhất xuất hiện: "tên máy chủ là gì". Sau khi cengine này cấu hình toàn bộ máy chủ (dns + dhcp với dnssec, samba, ntpd, default (Samba) và mật khẩu, ssh, openvpn, apache vhosts, sao lưu bằng rsnapshot trên LVM, webminmodules tùy chỉnh, v.v.).

Ngay cả khi tôi chỉ cài đặt một máy chủ, tôi vẫn sử dụng tập lệnh cengine từ hộp công cụ của mình như thế này:

control:

  Repository  = ( $(CFREPO) )
  IfElapsed = ( 0 )
  Syslog = ( on )
  actionsequence = ( editfiles shellcommands )
  CPTYPE = ( sum )

editfiles:
  { /etc/sysctl.conf
    # don't spam on tty:
    BeginGroupIfNoSuchLine "kernel.printk.*=.*2 4 1 7"
      DeleteLinesMatching "^kernel.printk.*=.*"
      Append "kernel/printk=2 4 1 7"
    EndGroup
    # no E(xplicit?) C(ongestion) N(otification) 
    BeginGroupIfNoSuchLine "net.ipv4.tcp_ecn.*=.*0"
      DeleteLinesMatching "^net.ipv4.tcp_ecn.*=.*"
      Append "net/ipv4/tcp_ecn=0"
    EndGroup
    BeginGroupIfNoSuchLine "net.ipv4.ip_forward.*=.*1"
      DeleteLinesMatching "^net.ipv4.ip_forward.*=.*"
      Append "net/ipv4/ip_forward=1"
    EndGroup
    DefineClasses "configchange_sysctl"
  }

shellcommands:
  configchange_sysctl::
    "/sbin/sysctl -p /etc/sysctl.conf"

# vim: set ts=2:

Tôi thích cfengine, bởi vì các tập lệnh cf2 có phần dễ đọc của con người.

Vì vậy, nó chắc chắn có giá trị để làm việc với các công cụ để quản lý cấu hình tự động.

/ ngực


2

Nó có giá trị ngay cả đối với một trang web nhỏ. Đó là tất cả về sự nhất quán khi bạn phát triển. Và bạn biết rằng trang web của bạn sẽ phát triển. Tốt nhất để bắt đầu trong khi bạn vẫn còn nhỏ. Cengine là tuyệt vời. Đặc biệt là phiên bản 3, có thể xử lý tất cả các trình quản lý gói trên toàn trường, và nó thực sự nhẹ và an toàn và nó "chỉ hoạt động". Con rối chỉ không cung cấp những gì nó tuyên bố. Không thử đầu bếp.

Ưu điểm của cengine so với các loại khác là siêu nhẹ nhưng thực sự có nhiều khả năng hơn. Bảo mật của nó giống như ssh, hơn là các chứng chỉ web được sử dụng bởi con rối. Khi tôi nói với sếp của tôi về cengine, anh ấy nghĩ đó là khoa học viễn tưởng :) Nếu bạn đang tìm kiếm một thứ gì đó tương lai, hãy thử đọc một số tài liệu nghiên cứu của Marc Burgess. Công cụ mát mẻ.


1

Công cụ số một tôi muốn có khi chạy một trang web nhỏ là các bản dựng 'nút nhấn'. Nó làm cho việc vá, cập nhật và xây dựng lại dễ dàng hơn, có thể giải quyết vô số vấn đề khác trong tương lai.

Không có ssh cài đặt đúng trên tất cả các hộp? không curl / wget / vim? Còn các công cụ trong nhà khác mà bạn muốn có trên mỗi hộp thì sao?

Quản lý trung tâm các máy chủ của bạn là một trong những công cụ đầu tiên bạn nên làm việc để giúp những nỗ lực trong tương lai dễ dàng hơn nhiều.


1

Tôi đồng ý với tất cả mọi người ở đây. Bạn nên bắt đầu tìm hiểu và thiết lập một cơ sở hạ tầng làm việc khi bạn không lớn. Bởi vì sau đó bạn được chuẩn bị khi bạn phát triển.

Tùy thuộc vào những gì bạn muốn chạy, tôi sẽ chọn FAI, cengine và pre-seeding cho Debian / Ubuntu. FAI có thể hoạt động với nhiều công cụ khác nhau, vì vậy đây là một khởi đầu tốt cho mọi bản phân phối giống như Debian. Với cấu hình được điều khiển lớp FAI (và cengine), bạn có thể dễ dàng phân chia các cài đặt của mình thành các mô-đun nhỏ, sau đó bạn có thể chọn sử dụng cho từng máy của mình. Bằng cách này, nó sẽ hữu ích ngay cả khi bạn có nhiều máy khác nhau. Nó thực sự hữu ích hơn, vì bạn sẽ ghi lại cài đặt của mình với các tập lệnh này. Và khi bạn cài đặt trên một máy mới, bạn sẽ không quên bất cứ điều gì.

Có, bạn NÊN có một số máy để kiểm tra trước khi bạn triển khai các thay đổi của mình trong bản cài đặt trực tiếp. Nhưng với tập lệnh cấu hình như thế này, bạn sẽ không quên thực hiện bất kỳ bước nào trong quá trình cài đặt trực tiếp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.