การปรับใช้ linux อัตโนมัติและการจัดการการกำหนดค่าในระดับเล็ก - คุ้มหรือไม่


24

ฉันเกี่ยวกับการปรับใช้ ~ 25 เซิร์ฟเวอร์ที่ใช้Debian เครื่องจะมีบทบาทแตกต่างกัน - เว็บเซิร์ฟเวอร์, จาวาแอพเซอร์, พร็อกซี่, กล่อง MySQL สภาพแวดล้อมอาจไม่เติบโตมากนักในอนาคต - อาจเพิ่มเซิร์ฟเวอร์อีก 2-5 แห่งในอีก 2 ปีข้างหน้า

ฉันอาจจะใช้faiสำหรับการติดตั้งระบบ แต่ฉันไม่แน่ใจว่าควรเพิ่มการจัดการการกำหนดค่าส่วนกลางแบบcfengineหรือหุ่นกระบอกด้วยขนาดเล็กเช่นนั้นหรือไม่

การจัดการการกำหนดค่าเหมาะสมกับสภาพแวดล้อมขนาดนี้หรือไม่?

คำตอบ:


29

ฉันขอแนะนำให้ใช้การผสมของการเตรียมเมล็ดพันธุ์ล่วงหน้าแบบเดเบียนซึ่งคุณให้ไฟล์ข้อความสำหรับติดตั้งเพื่อตอบคำถามทุกข้อที่ถามและหุ่นกระบอก

เหตุผลในการใช้การคิดล่วงหน้าแทนที่จะเป็น FAI คือคุณไม่ต้องตั้งค่ารูปภาพก่อนและจัดการกับการอัปเดตให้ทันสมัยอยู่เสมอ คุณจะจบลงด้วยการติดตั้งคล้ายกับสิ่งที่คุณจะมีถ้าคุณทำพวกเขาทั้งหมดด้วยมือ เมื่อคุณติดตั้งรีลีสใหม่คุณจะต้องอัปเดตไฟล์กำหนดค่าด้วยการเปลี่ยนแปลงแทนที่จะต้องสร้างอิมเมจใหม่

เครื่องมือการจัดการการกำหนดค่ามีประโยชน์อย่างยิ่งโดยที่คุณมีเซิร์ฟเวอร์หลายตัวที่ทำงานเหมือนกันและคุณต้องการให้มันเหมือนกันเช่นคลัสเตอร์เว็บเซิร์ฟเวอร์ อย่างไรก็ตามมันยังมีประโยชน์สำหรับการกำหนดค่าการติดตั้งพื้นฐานของเซิร์ฟเวอร์ทั้งหมด คุณจะต้องการติดตั้งแพคเกจเฉพาะบนเซิร์ฟเวอร์ทั้งหมดของคุณเช่น ntpd และ MTA คุณจะต้องการเปลี่ยนไฟล์กำหนดค่าบนเซิร์ฟเวอร์ทั้งหมดของคุณ ประโยชน์เพิ่มเติมคือคุณสามารถเก็บรายการของคุณในรูปแบบการโค่นล้มและเก็บบันทึกสิ่งที่เปลี่ยนแปลงบนเซิร์ฟเวอร์และใครทำและทำไม การจัดการการกำหนดค่าสามารถช่วยชีวิตในกรณีที่เซิร์ฟเวอร์ล้มเหลวและคุณจำเป็นต้องสร้างใหม่อย่างรวดเร็ว ติดตั้งระบบปฏิบัติการ (โดยใช้ FAI หรือการคาดการณ์ล่วงหน้า) ติดตั้งหุ่นเชิดแล้วออกไปจากนั้นสร้างขึ้นใหม่เหมือนเดิม เห็นได้ชัดว่าคุณจะต้องสำรองข้อมูลไว้

การจัดการการกำหนดค่าต้องใช้ความทุ่มเทเพื่อให้แน่ใจว่าคุณทำการเปลี่ยนแปลงโดยใช้เพียงอย่างเดียวและจะมีการตั้งค่าใช้จ่ายล่วงหน้า แต่เมื่อคุณมีการตั้งค่าการทำงานคุณจะไม่เสียใจ

Puppet เป็นเครื่องมือทันสมัยสองอย่างที่คุณกล่าวถึง ฉันแนะนำให้กับทุกคนจริงๆ การกำหนดค่าเป็นภาษาที่ประกาศได้และง่ายต่อการสร้างโครงสร้างที่สูงขึ้น นอกจากนี้ยังมีชุมชนขนาดใหญ่มากรอบ ๆ และมีคนยินดีให้ความช่วยเหลือในรายชื่อผู้รับจดหมายหรือช่องทาง IRC


ขอบคุณสำหรับคำใบ้เกี่ยวกับการเตรียมเมล็ด ฉันกำลังดูเอกสารเกี่ยวกับมันตอนนี้
pQd

ฝ้ายเป็นคนแก่ ฉันจะไม่แนะนำที่นี่ ให้ล่วงหน้า + หุ่นกระบอก ftw
womble

เราใช้ FAI และ cfengine เรามีเครื่องจักรประมาณ 1,000 เครื่องและใช้งานได้ดีมาก มันน่าสังเกตว่าคุณสามารถ ssh เข้าไปในเครื่องในขณะที่มันสร้างขึ้นเองเพื่อที่จะทำให้การเขียนสคริปต์ไมโครง่ายขึ้นมาก
James

แฟนเก่าของหนาน? NO! ฝ้ายเป็นหินที่แข็งและมีประสบการณ์มากกว่า 10 ปี ลองดูรายชื่อผู้ใช้ FAI ที่ยาวยาวที่fai-project.org/reports
Thomas Lange

คำแนะนำที่ดีเราใช้วิธีการที่คล้ายกันและใช้งานได้ดี อย่างไรก็ตามฉันจะไม่ยกเลิก FAI FAI ไม่ใช้รูปภาพสำหรับการติดตั้ง (SystemImager ทำเช่นนั้น) คุณต้องตั้งค่าไดเรกทอรีราก nfs ขั้นต่ำที่ใช้สำหรับเรียกใช้ตัวติดตั้ง FAI กระบวนการติดตั้งนั้นเป็นไปโดยอัตโนมัติด้วยไฟล์การกำหนดค่าและดำเนินการ hooks ต่าง ๆ ที่ผู้ใช้กำหนด ข้อได้เปรียบเหนือการคาดการณ์ล่วงหน้าคือแนวคิดของคลาส FAI ทำให้ง่ายต่อการจัดการเซิร์ฟเวอร์หลาย ๆ เครื่อง (และแม้แต่เวิร์กสเตชัน) ที่มีบทบาทที่แตกต่างกัน
JooMing

10

ฉันขอแนะนำ CFengine สำหรับสภาพแวดล้อมที่มีมากกว่า 2-3 กล่องและสถานที่ที่คุณมีแนวคิด 'แม่แบบ' หรือเซิร์ฟเวอร์ที่มีบทบาทเฉพาะ

ทำไม? เพียงแค่ใส่มันลดความผิดพลาดคุณมีเครื่องมือที่จะช่วยให้มั่นใจว่าการอนุญาตของไฟล์ / ไดเรกทอรีถูกต้องทุกที่ในสภาพแวดล้อมและเมื่อคุณเปิดตัวเซิร์ฟเวอร์เพิ่มเติมเครื่องมือจะจัดการทุกอย่างอย่างแน่นอนและไม่เคยทำผิดพลาดใด ๆ

ตรงกันข้ามกับแม้แต่ผู้ดูแลระบบที่มีความชำนาญเปิดตัวเว็บเซิร์ฟเวอร์เมื่อสิ้นสุดการกะเวลาสิบสองชั่วโมงเมื่อสิ่งต่าง ๆ เกิดความผิดพลาดขึ้น .... พวกเขามีแนวโน้มที่จะจำไฟล์การกำหนดค่าเล็ก ๆ ที่น่ารังเกียจซึ่งต้องไปใน / etc / random / location / foo / bar ไม่เช่นนั้นแอปพลิเคชันจะไม่สามารถทำสิ่งที่สำคัญกว่าได้อย่างเงียบ ๆ เช่นลูกค้าที่เรียกเก็บเงิน :)

เครื่องมือเช่น CFengine ยังเป็นวิธีที่ยอดเยี่ยมในการอัปเดตความปลอดภัยทั่วทั้งสภาพแวดล้อม การทิ้งการกำหนดค่า Nagios (NRPE) ลงในกล่องทั้งหมดก็เป็นสิ่งที่ทำได้เช่นกัน ไม่ว่าคุณจะจัดการกับห้ากล่องหรือห้าร้อยกล่องคุณจะประหยัดเวลาด้วย CFengine

อาจเป็นเรื่องที่น่าสังเกตว่าสภาพแวดล้อมของฉันมีขนาดใหญ่ขึ้นเล็กน้อย แต่ฉันได้ปรับใช้ CFengine สำหรับสภาพแวดล้อมที่เล็กกว่าที่คุณทราบดังนั้นคำแนะนำ!

คำถามต่อไปของคุณอาจเป็น CFengine vs Puppet? นั่นเป็นการตัดสินใจที่ยากขึ้นและฉันไป CFengine ตลอดเวลาเนื่องจากในช่วงแรก ๆ มีหุ่นบางตัวที่ยังไม่บรรลุนิติภาวะโดยเฉพาะการบันทึกข้อผิดพลาด .... วันนี้ฉันไม่แน่ใจจริงๆ - ลองเล่นดูไหม? มองย้อนกลับไปสู่ปัญหาที่เฉพาะเจาะจงของฉันกับหุ่นพวกเขาใบรับรอง SSL ที่เกี่ยวข้องกับความเจ็บปวดยังคงจำได้เวลาที่ผมใช้เวลา 3 ชั่วโมงวินิจฉัยเซิร์ฟเวอร์ <-> ปัญหาการเชื่อมต่อของลูกค้าใน irc.freenode.net/#puppet กับบางหนัก RTFM และ RTFS เท่านั้นที่จะหา ข้อผิดพลาดไม่ถูกบันทึกและลุคพูดว่า "อ่ายากมากที่จะแก้ไข" และไม่เคยทำ :(


จุดดี. ปัญหาคือในกรณีของฉันสิ่งต่าง ๆ จะมีความเชี่ยวชาญสูงจำนวนเทมเพลต [เนื่องจากการซ้ำซ้อน] อาจจะอยู่ที่ n / 2 [โดยที่ n คือจำนวนเซิร์ฟเวอร์ทั้งหมด]
pQd

1
นั่นไม่ใช่เรื่องเลวร้ายกลุ่ม WWW ส่วนใหญ่ของฉันคือ n + 2 หากไม่ใช่ n / 2 และคุณสามารถยืดหยุ่นได้มากกับ CFengine ในการปรับใช้โหนดที่อยู่เบื้องหลังโหลดบาลานซ์ของคุณเช่น HAproxy มันทำงานได้อย่างสมบูรณ์แบบในการจัดการ IPVS และสิ่งที่รักษาไว้เช่นกัน :-) ถึงแม้จะมีข้อกำหนดซ้ำซ้อน n / 2 ฉันต้องการเดิมพันคุณมีไฟล์กำหนดค่าที่เหมือนกันหรือคล้ายกันในสภาพแวดล้อมของคุณหรือไม่? จำไว้ว่าด้วย CFengine คุณมีเครื่องมือ 'editfiles' สำหรับทำสิ่งต่าง ๆ เช่นไฟล์ config "templated" ที่มีบางอย่างเช่นIPจากนั้นค้นหาและแทนที่ด้วยข้อมูลที่ถูกต้อง ;)
nixgeek

@astinus ขอบคุณสำหรับความคิดเห็นของคุณ ฉันยังกลัวที่จะทำให้การผลิตของฉันแย่ลงด้วยการขันสกรูในโครงสร้างส่วนกลาง คุณคิดอย่างไรเกี่ยวกับการปิดใช้งานการลงคะแนนโดยอัตโนมัติของการกำหนดค่าและการบันทึกบนเครื่องแต่ละเครื่องและบังคับให้อัปเดตและตรวจสอบด้วยตนเองว่าทุกอย่างเรียบร้อยดีหรือไม่ [ใช่ฉันจะมีการตรวจสอบ nagios / กำหนดเองเช่นกัน ... แต่ยังคง]
pQd

1
ฉันคิดว่าความมั่นใจในเทคนิคการจัดการการกำหนดค่าของคุณมาพร้อมกับเวลา แต่ในระหว่างนั้นเพียงปิดการใช้งานการสำรวจความคิดเห็นอัตโนมัติและใช้ 'cssh' เพื่อเข้าสู่ระบบในแต่ละชั้นของกล่องเพื่อเรียกใช้ 'cfagent -qv' (หรืออะไรก็ตาม!) คุณต้องการที่จะผลักดันการปรับปรุง หากคุณต้องการคำแนะนำขั้นสูงสุดสำหรับการเพิ่มความมั่นใจให้ปรับใช้เครื่องเสมือนเป็นสภาพแวดล้อม 'การจัดเตรียม' และตรวจสอบให้แน่ใจว่าการเปลี่ยนแปลงทั้งหมดผ่านครั้งแรก ค่อนข้างง่ายถ้าคุณเก็บการกำหนดค่า CFengine หรือ Puppet ไว้ในการโค่นล้มเพียงใช้กิ่งและแท็ก
nixgeek

ฉันจะแนะนำให้ใช้ SLACK เพื่อการติดตั้งระบบที่ง่ายดาย (อีกครั้ง) การจัดการการกำหนดค่า มีให้ที่นี่: sundell.net/~alan/projects/slack
HK_

5

นอกจาก cfengine และหุ่นเชิดแล้วยังมีพ่อครัวอีกด้วย ฉันขอแนะนำอย่างยิ่งให้ใช้หนึ่งในเครื่องมือเหล่านี้เพราะทุกสิ่งจะเติบโตไปในทิศทางที่ไม่คาดคิด สิ่งนี้จะช่วยจัดการสิ่งต่าง ๆ ในตำแหน่งที่ตั้งส่วนกลาง

สิ่งสำคัญที่ต้องจดจำคือโอกาสที่คุณจะไม่ได้รับทุกสิ่ง แต่ถ้าอย่างน้อยก็สามารถได้ 90% นั่นก็เป็นการเริ่มต้น นอกจากนี้มันสนุกและจะทำให้ชีวิตของคุณง่ายขึ้นในระยะยาว สุดท้ายมันเป็นทักษะที่ดีที่จะก้าวไปข้างหน้า


chef เป็นรายการล่าสุดในฉากการจัดการการกำหนดค่า มันถูกออกแบบมาให้กำหนดค่าโดยการเขียนทับทิมเพื่อทำสิ่งที่คุณต้องการเมื่อเทียบกับภาษาที่กำหนดเองของหุ่นกระบอก เวลาจะบอกได้ว่าวิธีใดทำงานได้ดี ฉันกำลังนั่งอยู่ในค่ายหุ่น
David Pashley

3

ฉันใช้ cfengine ตั้งแต่ 5 ปีในการติดตั้งเดเบียน (จากไม้ไปจนถึงเงินในปัจจุบัน) ด้วยการกัดฉันสร้าง debian-installer แบบกำหนดเอง ขอบคุณที่คาดเดาคำถามเดียวขึ้นมา: "ชื่อโฮสต์คืออะไร" หลังจาก cfengine นี้กำหนดค่าเซิร์ฟเวอร์ทั้งหมด (dns + dhcp ด้วย dnssec, samba, ntpd, ผู้ใช้เริ่มต้น (Samba) และรหัสผ่าน, ssh, openvpn, apache vHosts, สำรองข้อมูลด้วย rsnapshot บน LVM, webminmodules แบบกำหนดเอง ฯลฯ )

แม้เมื่อฉันติดตั้งเซิร์ฟเวอร์เดียวฉันก็ใช้ cfengine-สคริปต์จากกล่องเครื่องมือของฉันเช่นนี้:

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:

ฉันชอบ cfengine เพราะสคริปต์ cf2 นั้นอ่านได้ค่อนข้างมนุษย์

ดังนั้นมันจึงคุ้มค่าที่จะทำงานกับเครื่องมือสำหรับการจัดการการกำหนดค่าอัตโนมัติ

/ Thorsten


2

มันจะต้องคุ้มค่าสำหรับเว็บไซต์เล็ก ๆ มันคือทั้งหมดที่เกี่ยวกับความมั่นคงในขณะที่คุณเติบโต และคุณรู้ว่าเว็บไซต์ของคุณกำลังจะเติบโต ดีที่สุดที่จะเริ่มต้นในขณะที่คุณยังเล็ก Cfengine ยอดเยี่ยม โดยเฉพาะอย่างยิ่งเวอร์ชัน 3 ซึ่งสามารถจัดการผู้จัดการแพคเกจทั้งหมดทั่วทั้งสนามและมีน้ำหนักเบาและปลอดภัยอย่างแท้จริงและ "ใช้งานได้จริง" หุ่นกระบอกไม่ได้ส่งมอบสิ่งที่อ้างสิทธิ์ ยังไม่ได้ลองเชฟ

ข้อดีของ cfengine เหนือคนอื่น ๆ คือมันเบามาก แต่จริงๆแล้วมีความสามารถมากกว่า ความปลอดภัยมันเหมือน ssh ไม่ใช่ใบรับรองเว็บที่ใช้โดยหุ่นเชิด เมื่อฉันบอกหัวหน้าของฉันเกี่ยวกับ cfengine เขาคิดว่ามันเป็นนิยายวิทยาศาสตร์ :) หากคุณกำลังมองหาสิ่งที่ล้ำสมัยลองอ่านบทความวิจัยของ Marc Burgess สิ่งที่เย็น.


1

เครื่องมืออันดับหนึ่งที่ฉันหวังว่าจะมีเมื่อใช้งานไซต์เล็ก ๆ คืองานสร้าง 'ปุ่มกด' มันทำให้การแก้ไขปรับปรุงและสร้างใหม่ได้ง่ายขึ้นซึ่งสามารถแก้ไขปัญหาอื่น ๆ มากมายในอนาคต

ไม่มี ssh ติดตั้งอย่างถูกต้องในทุกช่อง ไม่มี curl / wget / vim? คุณมีเครื่องมืออื่น ๆ อะไรบ้างในแต่ละกล่อง

การมีศูนย์กลางการจัดการเซิร์ฟเวอร์ของคุณเป็นหนึ่งในเครื่องมือแรกที่คุณควรทำงานเพื่อให้ง่ายขึ้นในอนาคต


1

ฉันเห็นด้วยกับทุกคนที่นี่ คุณควรเริ่มเรียนรู้และตั้งค่าโครงสร้างพื้นฐานการทำงานเมื่อคุณไม่ใหญ่ เพราะเมื่อนั้นคุณพร้อมที่จะเติบโต

ฉันจะไปหา FAI, cfengine และ pre-seeding สำหรับ Debian / Ubuntu ทั้งนี้ขึ้นอยู่กับสิ่งที่คุณต้องการเรียกใช้ ฝ้ายสามารถทำงานกับเครื่องมือที่แตกต่างกันมากมายดังนั้นจึงเป็นการเริ่มต้นที่ดีสำหรับการแจกจ่ายแบบเดเบียน ด้วยการกำหนดค่าที่ควบคุมคลาส FAI (และ cfengine) คุณสามารถแบ่งการติดตั้งเป็นโมดูลขนาดเล็กได้ง่ายซึ่งคุณสามารถเลือกสิ่งที่จะใช้สำหรับเครื่องแต่ละเครื่องของคุณ ด้วยวิธีนี้มันจะมีประโยชน์แม้ว่าคุณจะมีเครื่องที่แตกต่างกัน มันมีประโยชน์มากกว่าจริง ๆ เพราะคุณจะบันทึกการติดตั้งของคุณด้วยสคริปต์เหล่านี้ และเมื่อคุณติดตั้งบนเครื่องใหม่คุณจะไม่ลืมอะไรเลย

ใช่คุณควรมีเครื่องบางเครื่องที่จะทำการทดสอบก่อนที่จะนำไปใช้ในการติดตั้งแบบสด แต่ด้วยสคริปต์การกำหนดค่าเช่นนี้คุณจะไม่ลืมที่จะทำขั้นตอนใด ๆ ในการติดตั้งแบบสด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.