Gán nhiều IP cho 1 mục trong tệp máy chủ


29

Tôi có một máy chủ web kết nối với cơ sở dữ liệu nội bộ thông qua VPN. Có 2 IP (chính và phụ) vào cơ sở dữ liệu từ máy chủ web. Làm cách nào tôi có thể thiết lập tệp / etc / hosts của mình để nếu IP chính không khả dụng thì IP phụ sẽ được sử dụng?

Điều này sẽ làm việc cho tập tin máy chủ của tôi?

141.131.286.1   abc.efg.datastore.com   #primary

141.131.286.237 abc.efg.datastore.com   #secondary

Câu trả lời:


26

Các tập tin máy chủ không cung cấp cơ chế như vậy. Nếu bạn liệt kê hai IP cho cùng một tên, chỉ IP đầu tiên sẽ được sử dụng. Vì vậy, không có thứ gọi là IP chính và phụ.

Ngoài ra, tệp máy chủ không xử lý URL. Nó chỉ xử lý tên giống như tên được cung cấp trong câu hỏi. Một URL chứa đường dẫn và giao thức hoàn chỉnh như http://host/path/to/resource.


Chỉnh sửa tiêu đề và đặt tên trong câu hỏi OP để loại bỏ sự nhầm lẫn về URL / máy chủ lưu trữ.
dmourati

14

Bạn không thể cung cấp khả năng phục hồi hoặc cân bằng tải vòng qua /etc/hoststệp - nó không được thiết kế cho mục đích đó.

Thay vào đó , các tùy chọn của bạn là ... (không theo thứ tự cụ thể)

  1. Định cấu hình mạng của bạn đúng cách để các tuyến thay đổi khi liên kết bị hủy
  2. Sử dụng cân bằng tải vòng tròn DNS (không phải là ý tưởng tốt TM ) bằng cách sử dụng dịch vụ được quản lý (ví dụ: loaddns.com hoặc dnsADEeasy.com, v.v.)
  3. Sử dụng bộ cân bằng tải L3 cục bộ cho lưu lượng ra (HAProxy?) Với các back-end được xác định là cần thiết
  4. Xây dựng khả năng phục hồi vào chính ứng dụng web của bạn

Cân bằng tải vòng tròn DNS thường không đàn hồi. Một cái được chọn và những cái khác không được thử.
Antti Rytsölä Circles Tham khảo

Một tùy chọn khác có thể là sử dụng netcat hoặc phần mềm khác để chuyển tiếp kết nối tới IP. Sau đó thay đổi chuyển tiếp nếu một IP bị mất.
Antti Rytsölä Circles Tham khảo

1
@anttiR DNS RR một mình không có khả năng phục hồi, nhưng được sử dụng thông qua một nhà cung cấp dịch vụ DNS được quản lý. Tôi đã chỉnh sửa câu trả lời của mình và đưa ra một số ví dụ để rõ ràng hơn.
Ben Lessani - Sonassi

Tôi nghi ngờ nó sẽ làm việc tuyệt vời với cơ sở dữ liệu. Họ có xu hướng tìm nạp một IP và bám vào nó. Một trang web internet mặt khác sẽ làm việc tuyệt vời.
Antti Rytsölä Circles Tham khảo

Điều đó phụ thuộc vào bộ giải quyết của máy chủ. Nếu trình phân giải DNS được đặt thành một dịch vụ không lưu trong bộ nhớ cache - hoặc thăm dò trực tiếp DNS đăng ký DB, thì nó sẽ hoạt động. Nhưng như tôi đã nói, nó không phải là một ý tưởng tốt , nó chỉ là một ý tưởng .
Ben Lessani - Sonassi

3

/ vân vân .

#!/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

Kịch bản trên lấy đầu ra của nslookup cho sub.domain.com và lưu trữ nó trong một mảng. Sau đó, nó in giá trị cao nhất lên $ new và lấy giá trị hiện tại cho thẻ #RoundRobin được gán trong / etc / hosts ... cuối cùng, nó thực hiện thay thế sed

/ etc / hosts tập tin nhập sẽ như thế này

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

Cuối cùng, đặt tập lệnh này vào crontab của root để chạy mỗi giờ hoặc lâu hơn và bây giờ bạn sẽ có một vòng tròn / etc / host.

Điều này đặc biệt hữu ích nếu bạn có một trang được mã hóa đang lấy một số dữ liệu từ API và việc tra cứu DNS cho máy chủ API đang gây ra nhiều thời gian treo trong quá trình thực thi tập lệnh của trang ... dẫn đến mức tiêu thụ cpu cao cho những gì khác dường như là một trang đơn giản Để tránh việc tra cứu DNS tốn kém (đặc biệt nếu trang web của bạn đang thực hiện hàng trăm lượt truy cập mỗi phút cho lưu lượng truy cập lớn), bạn nên sử dụng / etc / hosts để giải quyết FQDN của máy chủ API từ xa. Điều này sẽ giảm đáng kể việc sử dụng CPU để lấy dữ liệu API và tạo trang.


Sẽ không lưu bộ nhớ đệm làm giảm bớt trường hợp của bạn hàng trăm lần tra cứu mỗi phút?
Xalious 18/12/18

Tôi không kiểm soát máy chủ DNS, đó có phải là thứ tôi có thể thiết lập trên máy chủ web CentOS không?
Satalink


0

Vâng, nó sẽ làm việc.

Tuy nhiên, cơ chế tìm kiếm chỉ đơn giản là thực hiện danh sách cho đến khi tìm thấy kết quả khớp.

Vì vậy, trong khi câu trả lời cho câu hỏi như đã viết là CÓ, nó sẽ là một thách thức. Nhưng không có gì không thể vượt qua.

Hãy thử điều này: Mỗi địa chỉ IP đó thực sự cần phải có các tên khác nhau.


1
Không, nó sẽ không hoạt động. Sự xuất hiện thứ hai của một giá trị trong / etc / hosts sẽ không bao giờ được sử dụng. Và nếu anh ta đổi tên địa chỉ IP thứ hai bằng một tên máy chủ khác, bây giờ anh ta phải làm gì đó trong ứng dụng của mình để thực hiện cân bằng tải. Điều đó sẽ rất tốn kém và là một loại bùn, khi DNS hoặc DNS + Load Balancer là câu trả lời đúng.
Xalious 18/12/18

0

Cách dễ dàng để thực hiện điều này là chỉ cần sử dụng dịch vụ DNS công cộng, như AWS Route53. Bạn có thể nhập nhiều địa chỉ IP cho mỗi bản ghi A với mức độ ưu tiên

abc.efg.datastore.com

10 141.131.286.1  
20 141.131.286.237 

Miễn là không có chứng chỉ nào liên quan đến việc này thì nó vẫn hoạt động và thậm chí không chống lại bất kỳ quy tắc hay thông lệ tốt nhất nào.

NSLookup hoặc các truy vấn tên miền khác sẽ trả về cả hai địa chỉ. Ứng dụng của bạn cần có khả năng xử lý việc này. Và vâng, tên miền cần phải được đăng ký công khai, không chỉ là tên máy chủ cục bộ.


Các trình duyệt sẽ có thể xử lý việc này, nếu 10 không khả dụng thì nó sẽ dự phòng vào ngày 20. Nó chắc chắn phụ thuộc vào ứng dụng và đó cũng là điểm bạn kiểm tra tính khả dụng - nếu bạn muốn thiết lập một thứ gì đó phức tạp hơn và đắt tiền với cân bằng tải.
bortran

Ahồ sơ không có lĩnh vực ưu tiên. Một số dịch vụ DNS có thẩm quyền có trọng số kỷ lục, nhưng điều đó được thực hiện bằng cách xác suất bao gồm hoặc loại trừ các hồ sơ.
Matt Nordhoff

0

Dễ dàng cài đặt, vui lòng làm theo hướng dẫn:

  1. cài đặt dnsmasq
  2. chỉnh sửa /etc/resolv.conf và đặt "máy chủ tên 127.0.0.1" làm DNS đầu tiên
  3. thêm DNS bình thường thay thế (ví dụ google một) "máy chủ tên 8.8.8.8" làm dòng thứ hai
  4. đảm bảo hai bản ghi cần thiết có trong tệp / etc / hosts của bạn
  5. Bây giờ hãy kiểm tra với máy chủ lệnh abc.efg.datastore.com

    sẽ phản hồi hai bản ghi với RR-DNS để nếu một nút trong danh sách bị hỏng - ứng dụng của bạn sẽ được kết nối với một bản ghi khác

1
Ngăn xếp IP tự động kiểm tra tập tin máy chủ trước khi tư vấn DNS. Tôi tin rằng đó là một phần của định nghĩa IP, nhưng tôi biết rằng cả Windows và Linux đều theo mô hình này. Anh ta không cần dnsmasq và nếu anh ta thay đổi /etc/resolv.conf theo cách này, anh ta sẽ mất kết nối với máy chủ DNS thực sự của mình.
Xalious 18/12/18

không đúng sự thật, ông có thể đưa nhiều dòng để resolv.conf nên dòng tiếp theo có thể được "nameserver 8.8.8.8", ví dụ, + nscd cho bộ nhớ đệm ghi hiện có, phương pháp này chính xác giải quyết vấn đề đó đã được mô tả
Ihor Kolodyuk

Đó không phải là những gì bạn bảo anh ta làm. Bạn nói với anh ta để đặt máy chủ tên của mình để loopback. Bạn KHÔNG nói thêm loopback như một máy chủ tên. Nhưng nếu máy chủ không chạy được đặt tên hoặc thậm chí nếu nó không và nó không nghe trên loopback, thì các truy vấn dns đến địa chỉ đó sẽ không được trả lời. Chỉ cần thêm địa chỉ vào tệp máy chủ sẽ cho phép chúng được giải quyết, nhưng nếu chúng có cùng tên máy chủ, chỉ tên đầu tiên sẽ được sử dụng và chúng tôi sẽ quay lại từ đầu. Câu trả lời là trong việc thiết lập một máy chủ ảo trong DNS với các bí danh có trọng số hoặc ở phía trước cơ sở dữ liệu với bộ cân bằng tải.
Xalious 21/12/18

Đó chính xác là tôi đã nói với anh ta, dnsmasq đang hoạt động như một proxy máy chủ tên. Cách tiếp cận này hoạt động.
Ihor Kolodyuk
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.