กำหนด IP หลายรายการให้กับ 1 รายการในไฟล์โฮสต์


29

ฉันมีเว็บเซิร์ฟเวอร์ที่เชื่อมต่อกับฐานข้อมูลภายในผ่าน VPN มี 2 ​​IP (หลักและรอง) ไปยังฐานข้อมูลจากเว็บเซิร์ฟเวอร์ ฉันจะตั้งค่าไฟล์ / etc / hosts ของฉันได้อย่างไรเพื่อที่ว่าหาก IP หลักไม่พร้อมใช้งานจะมีการใช้ IP สำรอง

จะใช้งานได้กับไฟล์โฮสต์ของฉันหรือไม่

141.131.286.1   abc.efg.datastore.com   #primary

141.131.286.237 abc.efg.datastore.com   #secondary

คำตอบ:


26

ไฟล์โฮสต์ไม่มีกลไกดังกล่าว หากคุณแสดง IP สองรายการสำหรับชื่อเดียวกันระบบจะใช้เฉพาะ IP แรกเท่านั้น ดังนั้นจึงไม่มีสิ่งเช่น IP หลักและรอง

นอกจากนี้ไฟล์โฮสต์ไม่จัดการ URL มันจัดการกับชื่อเหมือนชื่อที่ให้ไว้ในคำถาม URL http://host/path/to/resourceที่ประกอบด้วยเส้นทางที่สมบูรณ์และโปรโตคอลเช่น


แก้ไขชื่อและการตั้งชื่อในคำถาม OPs เพื่อขจัดความสับสนเกี่ยวกับ URL / โฮสต์
dmourati

14

คุณไม่สามารถให้ความยืดหยุ่นหรือการทำโหลดบาลานซ์รอบโรบินผ่าน/etc/hostsไฟล์ได้ - มันไม่ได้ออกแบบมาเพื่อจุดประสงค์นั้น

แทน , ตัวเลือกของคุณ ... (โดยเฉพาะเพื่อไม่)

  1. กำหนดค่าเครือข่ายของคุณอย่างถูกต้องเพื่อให้เส้นทางเปลี่ยนไปเมื่อมีการปล่อยลิงก์
  2. ใช้ DNS balancing load balancing (ไม่ใช่ A Good Idea TM ) โดยใช้บริการที่มีการจัดการ (เช่น loaddns.com หรือ dnsmadeeasy.com เป็นต้น)
  3. ใช้ตัวโหลดบาลานซ์ L3 โลคัลสำหรับทราฟฟิกขาออก (HAProxy?) โดยมี back-end ที่กำหนดไว้ตามความจำเป็น
  4. สร้างความยืดหยุ่นในเว็บแอปพลิเคชันของคุณเอง

การปรับสมดุลโหลด DNS แบบวนรอบ DNS มักจะไม่ยืดหยุ่น มีการเลือกหนึ่งรายการและไม่พยายามอื่น
แวดวง Antti Rytsöläปรึกษา

ตัวเลือกอื่นอาจใช้ netcat หรือซอฟต์แวร์อื่นเพื่อส่งต่อการเชื่อมต่อกับ IP จากนั้นเปลี่ยนไปข้างหน้าหาก IP หนึ่งรายการสูญหาย
แวดวง Antti Rytsöläปรึกษา

1
@anttiR DNS RR เพียงอย่างเดียวไม่มีความยืดหยุ่น แต่ใช้ผ่านผู้ให้บริการ DNS ที่มีการจัดการ ฉันได้แก้ไขคำตอบของฉันและยกตัวอย่างให้ชัดเจนขึ้น
Ben Lessani - Sonassi

ฉันสงสัยว่ามันจะทำงานได้ดีกับฐานข้อมูล พวกเขามีแนวโน้มที่จะดึง IP หนึ่งอันและยึดมันไว้ เว็บไซต์อินเทอร์เน็ตในทางกลับกันจะใช้งานได้ดี
วงการ Antti Rytsöläปรึกษา

ที่จะขึ้นอยู่กับตัวแก้ไขของเครื่องโฮสต์ หากตัวแก้ไข DNS ถูกตั้งค่าเป็นบริการที่ไม่ใช้แคช - หรือทำการสำรวจ DB registrars DB โดยตรงมันจะทำงานได้ แต่ชอบพูดว่าไม่ได้เป็นความคิดที่ดี , เพียงแค่ความคิด
Ben Lessani - Sonassi

3

/ etc / hosts ไม่สนับสนุน round robin แต่คุณสามารถเขียนสคริปต์ bash ง่าย ๆ เพื่อ sed แทนที่รายการที่ติดแท็กด้วยความคิดเห็น #RoundRobin (หรือแท็กอื่น ๆ ที่คุณต้องการใช้เพียงแค่แสดงในบรรทัด grep ในสคริปต์) .

#!/bin/bash
fqdnips=( $(nslookup sub.domain.com|grep Address:|awk -F\  '{ print $2 }'|grep -v '#') )

new=`printf "${fqdnips[@]}"`
old=`grep "#RoundRobin" /etc/hosts|awk -F\  '{ print $1 }'`
sed -i "s/$old/$new/g" /etc/hosts

สคริปต์ข้างต้นจะจับผลลัพธ์ของ nslookup สำหรับ sub.domain.com และเก็บไว้ในอาร์เรย์ จากนั้นจะพิมพ์มูลค่าสูงสุดอันดับสูงสุดเป็น $ new และคว้าค่าที่มีอยู่สำหรับแท็ก #RoundRobin ที่กำหนดใน / etc / hosts ... สุดท้ายจะทำการแทนที่ sed

รายการไฟล์ / etc / hosts จะมีลักษณะเช่นนี้

127.0.0.1        localhost
::1              localhost
11.12.13.14      sub.domain.com      #RoundRobin

สุดท้ายให้วางสคริปต์นี้ไว้ใน crontab ของรูทเพื่อรันทุก ๆ ชั่วโมงและตอนนี้คุณจะมี / etc / host round-robin

สิ่งนี้มีประโยชน์อย่างยิ่งหากคุณมีเพจที่เข้ารหัสซึ่งดึงข้อมูลบางอย่างจาก API และการค้นหา DNS สำหรับเซิร์ฟเวอร์ API ทำให้เวลาในการแฮงค์สคริปต์ของหน้าเว็บหยุดทำงานเป็นจำนวนมาก ... ทำให้ซีพียูใช้งานได้สูง ดูเหมือนจะเป็นหน้าเรียบง่าย เพื่อหลีกเลี่ยงการค้นหา DNS ที่มีค่าใช้จ่ายสูง (โดยเฉพาะหากไซต์ของคุณกำลังทำหลายร้อยรายการต่อนาทีสำหรับการรับส่งข้อมูลจำนวนมาก) คุณควรใช้ / etc / hosts เพื่อแก้ปัญหา FQDN ของเซิร์ฟเวอร์ API ระยะไกล สิ่งนี้จะลดการใช้งาน CPU อย่างมากสำหรับการดึงข้อมูล API และสร้างหน้า


การแคช DNS จะไม่ช่วยบรรเทากรณีที่คุณค้นหาหลายร้อยครั้งต่อนาทีใช่หรือไม่
Xalorous

ฉันไม่ได้ควบคุมเซิร์ฟเวอร์ DNS นั่นคือสิ่งที่ฉันสามารถตั้งค่าบนเว็บเซิร์ฟเวอร์ CentOS ได้หรือไม่
Satalink


0

ใช่มันจะได้ผล

อย่างไรก็ตามกลไกการค้นหาจะดำเนินการตามรายการจนกว่าจะพบการแข่งขัน

ดังนั้นในขณะที่คำตอบของคำถามตามที่เขียนคือใช่มันจะเป็นสิ่งที่ท้าทาย แต่ไม่มีอะไรผ่านไม่ได้

ลองนี้: แต่ละที่อยู่ IP เหล่านั้นจำเป็นต้องมีชื่อแตกต่างกัน


1
ไม่มันไม่ทำงาน การเกิดขึ้นครั้งที่สองของค่าใน / etc / hosts จะไม่ถูกใช้ และถ้าเขาเปลี่ยนชื่อที่อยู่ IP ที่สองด้วยชื่อโฮสต์ที่แตกต่างกันตอนนี้เขาต้องทำอะไรบางอย่างในแอปของเขาที่จะทำสมดุลภาระ นั่นจะแพงและกระบองเมื่อ DNS หรือ DNS + Load Balancer เป็นคำตอบที่ถูกต้อง
Xalorous

0

วิธีง่ายๆในการทำให้สิ่งนี้เกิดขึ้นก็คือเพียงแค่ใช้บริการ DNS สาธารณะเช่น AWS Route53 คุณสามารถป้อนที่อยู่ IP ได้หลายรายการต่อเรคคอร์ดที่มีลำดับความสำคัญ

abc.efg.datastore.com

10 141.131.286.1  
20 141.131.286.237 

ตราบใดที่ไม่มีใบรับรองเกี่ยวข้องกับเรื่องนี้ก็ยังใช้งานได้และไม่ขัดต่อบรรทัดฐานหรือแนวปฏิบัติที่ดีที่สุด

NSLookup หรือการค้นหาโดเมนอื่น ๆ จะส่งคืนทั้งที่อยู่ แอปของคุณต้องสามารถจัดการกับสิ่งนี้ได้ และใช่โดเมนจะต้องเป็นโดเมนที่จดทะเบียนต่อสาธารณะไม่ใช่แค่ชื่อโฮสต์ท้องถิ่น


เบราว์เซอร์จะสามารถจัดการกับสิ่งนี้ได้หากไม่มี 10 มันจะย้อนกลับมาในวันที่ 20 มันขึ้นอยู่กับแอพพลิเคชั่นและควรเป็นจุดที่คุณตรวจสอบความพร้อมใช้งาน - หากคุณต้องการตั้งค่าบางอย่างที่ซับซ้อนกว่า และมีราคาแพงด้วยการปรับสมดุลภาระ
bortran

Aบันทึกไม่มีฟิลด์ลำดับความสำคัญ บริการ DNS ที่เชื่อถือได้บางรายการมีการถ่วงน้ำหนักการบันทึก แต่ทำได้โดยน่าจะเป็นรวมถึงหรือไม่รวมบันทึก
Matt Nordhoff

0

ติดตั้งง่ายโปรดทำตามคำแนะนำ:

  1. ติดตั้ง dnsmasq
  2. แก้ไข /etc/resolv.conf และตั้ง "nameserver 127.0.0.1" เป็น DNS ตัวแรก
  3. เพิ่ม DNS ปกติเป็นทางเลือก (เช่น google one) "nameserver 8.8.8.8" เป็นบรรทัดที่สอง
  4. ตรวจสอบให้แน่ใจว่ามีสองระเบียนที่จำเป็นอยู่ในไฟล์ / etc / hosts ของคุณ
  5. ตอนนี้ตรวจสอบกับโฮสต์ คำสั่งabc.efg.datastore.com

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

1
IP stack ตรวจสอบไฟล์โฮสต์โดยอัตโนมัติก่อนปรึกษา DNS ฉันเชื่อว่ามันเป็นส่วนหนึ่งของการกำหนด IP แต่ฉันรู้ว่า Windows และ Linux ทั้งคู่ทำตามรูปแบบนี้ เขาไม่ต้องการ dnsmasq และถ้าเขาเปลี่ยน /etc/resolv.conf ด้วยวิธีนี้เขาจะสูญเสียการเชื่อมต่อกับเซิร์ฟเวอร์ DNS ที่แท้จริงของเขา
Xalorous

ไม่เป็นความจริงเขาสามารถใส่หลายบรรทัดเพื่อ resolv.conf ดังนั้นบรรทัดถัดไปจึงสามารถ "nameserver 8.8.8.8" ตัวอย่างเช่น + nscd สำหรับการแคชเร็กคอร์ดที่มีอยู่วิธีการนี้แก้ปัญหาที่อธิบายไว้อย่างแน่นอน
Ihor Kolodyuk

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

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