Tải cân bằng Apache trên một ngân sách?


13

Tôi đang cố gắng tìm hiểu về khái niệm cân bằng tải để đảm bảo tính sẵn có và dự phòng để giữ cho người dùng hài lòng khi có sự cố, thay vì cân bằng tải vì mục đích cung cấp tốc độ phồng cho hàng triệu người dùng.

Chúng tôi đang sử dụng ngân sách và cố gắng bám vào những thứ có sẵn nhiều kiến ​​thức, vì vậy, chạy Apache trên Ubuntu VPS có vẻ giống như chiến lược cho đến khi một công cụ tìm kiếm nổi tiếng nào đó có được chúng tôi ( bao gồm cả thứ bảy, xin lưu ý ).

Ít nhất với tôi, đó là một khu rừng hoàn chỉnh gồm nhiều giải pháp khác nhau. Apaches sở hữu mod_proxy & HAproxy là hai cái mà chúng tôi tìm thấy bằng cách tìm kiếm nhanh trên google, nhưng không có kinh nghiệm về cân bằng tải, tôi không biết cái gì sẽ phù hợp với tình huống của chúng tôi, hoặc chúng tôi sẽ chăm sóc trong khi chọn giải pháp để giải quyết mối quan tâm sẵn có.

Lựa chọn tốt nhất cho chúng ta là gì? Chúng ta nên làm gì để có được tính sẵn sàng cao trong khi vẫn ở trong ngân sách của mình?


2
Btw, vui lòng không thực hiện "dự phòng" bằng cách sử dụng hai máy ảo chạy trên cùng một máy chủ. Điều đó thật ngu ngốc. (Tôi không nói đó là kế hoạch của bạn)
Earlz

có lẽ sử dụng 3 hoặc 4 IP và máy chủ (VPS) chuyên dụng cho máy chủ trong cân bằng tải của bạn, nó sẽ gây ra ý tưởng về tốc độ, nhưng sự thật thì không phải vậy. Cân bằng tải sẽ chọn liên kết để truy cập nếu một liên kết bị hỏng (vì nhiều người dùng truy cập).

@Earlz - Không, đó không phải là kế hoạch. Tôi thực sự muốn truyền bá VM càng xa càng tốt (về mặt địa lý) từ nhau, vì vậy họ thậm chí sẽ không ở trong cùng một trung tâm dữ liệu
Công nghiệp

@Fernando Costa Xin chào! Không chắc ý của bạn là gì, bạn có phiền khi viết câu trả lời và giải thích khái niệm của bạn xa hơn một chút không?
Công nghiệp

Tiền thưởng đang BẬT! Mong muốn được suy nghĩ nhiều hơn về điều này
Công nghiệp

Câu trả lời:


6

Giải pháp tôi sử dụng và có thể dễ dàng thực hiện với VPS là như sau:

  • DNS được khoanh tròn (sp?) Đến 6 địa chỉ IP hợp lệ khác nhau.
  • Tôi có 3 bộ cân bằng tải với cấu hình giống hệt nhau và sử dụng corosync / pacemaker để phân phối 6 địa chỉ ip đồng đều (vì vậy mỗi máy có 2 địa chỉ).
  • Mỗi bộ cân bằng tải có cấu hình nginx + véc ni . Nginx xử lý việc nhận các kết nối và thực hiện viết lại và một số phục vụ tĩnh, và chuyển nó trở lại Varnish để cân bằng tải và lưu vào bộ đệm.

Arch này có những ưu điểm sau, theo ý kiến ​​thiên vị của tôi:

  1. corosync / pacemaker sẽ phân phối lại các địa chỉ IP trong trường hợp một trong các LB bị lỗi.
  2. nginx có thể được sử dụng để phục vụ SSL, một số loại tệp trực tiếp từ hệ thống tệp hoặc NFS mà không cần sử dụng bộ đệm (video lớn, âm thanh hoặc tệp lớn).
  3. Varnish là một bộ cân bằng tải rất tốt hỗ trợ trọng lượng, kiểm tra sức khỏe phụ trợ và thực hiện một công việc nổi bật là proxy ngược.
  4. Trong trường hợp cần nhiều LB hơn để xử lý lưu lượng, chỉ cần thêm nhiều máy vào cụm và địa chỉ IP sẽ được cân bằng lại giữa tất cả các máy. Bạn thậm chí có thể làm điều đó tự động (thêm và loại bỏ cân bằng tải). Đó là lý do tại sao tôi sử dụng 6 ips cho 3 máy, để cho không gian phát triển.

Trong trường hợp của bạn, việc có các VPS tách biệt về mặt vật lý là một ý tưởng tốt, nhưng làm cho việc chia sẻ ip trở nên khó khăn hơn. Mục tiêu là có khả năng chống lỗi, hệ thống dự phòng và một số cấu hình để cân bằng tải / kết thúc HA làm rối tung nó thêm một điểm lỗi (như một bộ cân bằng tải duy nhất để nhận tất cả lưu lượng truy cập).

Tôi cũng biết bạn đã hỏi về apache, nhưng những ngày đó chúng tôi có các công cụ cụ thể phù hợp hơn với công việc (như nginx và véc ni). Để lại apache để chạy các ứng dụng trên phần phụ trợ và phục vụ nó bằng các công cụ khác (không phải apache không thể cân bằng tải tốt hoặc đảo ngược proxy, đó chỉ là một câu hỏi về việc giảm tải các phần khác nhau của công việc cho nhiều dịch vụ hơn để mỗi phần có thể làm tốt đó là chia sẻ).


Xin chào một lần nữa Coredump. Có bao nhiêu máy sẽ cần tối thiểu để thực hiện điều này trong một kịch bản trong thế giới thực?
Công nghiệp

Bạn cần ít nhất 2 VPS để làm cho nó hoạt động ở mức tối thiểu. Cả VPS đều có thể chạy nginx + véc ni mà không gặp vấn đề gì nhiều. Hai VPS PHẢI ở trên các máy chủ khác nhau, nếu có thể với các nguồn cung cấp năng lượng khác nhau và với mạng đến từ các thiết bị chuyển mạch khác nhau, vì vậy nếu một bên thất bại, bạn vẫn có te khác.
coredump

Chào bạn lần nữa nhé. Cảm ơn vi đa trả lơi. Tôi sẽ cố gắng đọc qua các hướng dẫn và hướng dẫn về cách thiết lập tính năng này và dùng thử trong môi trường ảo trong mạng LAN của tôi và xem cách xử lý chuyển đổi dự phòng. Hiện tại, có vẻ như chắc chắn rằng giải pháp này là tốt nhất cho lâu dài ngay cả khi nó sẽ cho tôi một vài sợi tóc màu xám trước khi nó hoạt động như dự định ...
Công nghiệp

@industrial Đó là cách tốt nhất để học :) Bắt đầu bằng cách lắp ráp một bộ cân bằng tải với nginx + véc ni, sau đó bạn lo lắng với phần cụm.
coredump

6

HAproxy là một giải pháp tốt. Các cấu hình là khá thẳng về phía trước.

Bạn sẽ cần một ví dụ VPS khác để ngồi trước ít nhất 2 VPS khác. Vì vậy, để cân bằng tải / thất bại, bạn cần tối thiểu 3 VPS

Một vài điều cần suy nghĩ cũng là:

  1. Chấm dứt SSL. Nếu bạn sử dụng HTTPS: // kết nối đó sẽ chấm dứt tại bộ cân bằng tải, phía sau bộ cân bằng tải, nó sẽ vượt qua tất cả lưu lượng truy cập qua một kết nối không được mã hóa.

  2. Lưu trữ tập tin. Nếu người dùng tải lên một hình ảnh thì nó đi đâu? Có phải nó chỉ ngồi trên một máy? Bạn cần một cách nào đó để chia sẻ tệp ngay lập tức giữa các máy - bạn có thể sử dụng dịch vụ S3 của Amazon để lưu trữ tất cả các tệp tĩnh của mình hoặc bạn có thể có một VPS khác hoạt động như một máy chủ tệp, nhưng tôi sẽ khuyên dùng S3 vì nó rẻ và cực kỳ rẻ.

  3. thông tin phiên. mỗi máy trong cấu hình cân bằng tải của bạn cần có khả năng truy cập thông tin phiên của người dùng, vì bạn không bao giờ biết họ sẽ đánh máy nào.

  4. db - bạn có máy chủ db riêng không? nếu bạn chỉ có một máy ngay bây giờ, làm thế nào để đảm bảo máy mới của bạn sẽ có quyền truy cập vào máy chủ db - và nếu đó là máy chủ db VPS riêng biệt, thì nó dự phòng đến mức nào. Không nhất thiết phải có mặt trước web có tính sẵn sàng cao và một điểm thất bại duy nhất với một máy chủ db, bây giờ bạn cũng cần xem xét sao chép db và quảng cáo nô lệ.

Vì vậy, tôi đã ở trong đôi giày của bạn, đó là rắc rối với một trang web có vài trăm lượt truy cập mỗi ngày cho một hoạt động thực sự. Nó trở nên phức tạp nhanh chóng. Hy vọng rằng đã cho bạn một số thực phẩm cho suy nghĩ :)


2
Nếu bạn chỉ đặt một VPS cân bằng tải duy nhất ở phía trước thì bạn vẫn có một điểm thất bại duy nhất!
JamesRyan

@JamesRyan - Yep tôi cũng nghĩ về điều đó, điểm thất bại duy nhất là loại có mùi. Bạn có bất kỳ khuyến nghị về những gì để làm thay thế?
Công nghiệp

+1 HAProxy cực kỳ dễ sử dụng.
Antoine Benkemoun

3

Phiếu bầu của tôi dành cho Linux Virtual Server là bộ cân bằng tải. Điều này làm cho giám đốc LVS có một điểm thất bại cũng như một nút cổ chai, nhưng

  1. Theo tôi, vấn đề thắt cổ chai không phải là vấn đề; bước chuyển hướng LVS là lớp 3 và cực kỳ rẻ (tính toán).
  2. Điểm duy nhất của sự thất bại nên được xử lý bằng cách có một giám đốc thứ hai, với hai người được kiểm soát bởi Linux HA .

Chi phí có thể được giữ bằng cách có giám đốc thứ nhất ở trên cùng một máy với nút LVS đầu tiên và giám đốc thứ hai trên cùng một máy với nút LVS thứ hai. Các nút thứ ba và tiếp theo là các nút thuần túy, không có hàm ý LVS hoặc HA.

Điều này cũng cho phép bạn tự do chạy bất kỳ phần mềm máy chủ web nào bạn thích, vì việc chuyển hướng đang diễn ra bên dưới lớp ứng dụng.


Xin chào MadHatter. Đây là một giải pháp tôi chưa bao giờ nghe nói trước đây. Cần phải đọc lên trên nó!
Công nghiệp

Làm việc tốt cho tôi, cảm thấy tự do để trở lại với câu hỏi!
MadHatter

Tại nơi làm việc của tôi, chúng tôi sử dụng lvs rộng rãi để cân bằng tải và một khi được cấu hình tôi chưa bao giờ thấy một giám đốc nào gặp vấn đề. Như người thợ săn điên nói rằng bản thân việc cân bằng tải không cần nhiều tài nguyên. Chúng tôi sử dụng lvs kết hợp với xung và piranha để cung cấp cơ chế chuyển đổi dự phòng và giao diện web để chỉnh sửa cấu hình. Nó chắc chắn đáng xem.
Sẽ

1

Làm thế nào về chuỗi này?

vòng robin dns> haproxy trên cả hai máy> nginx để phân tách các tệp tĩnh> apache

Cũng có thể sử dụng ucarp hoặc heartbeat để đảm bảo haproxy luôn trả lời. Stunnel sẽ ngồi trước haproxy nếu bạn cũng cần SSL


1

Bạn có thể muốn xem xét sử dụng phần mềm phân cụm thích hợp. Bộ cụm của RedHat (hoặc CentOS) hoặc ClusterWare của Oracle . Chúng có thể được sử dụng để thiết lập các cụm thụ động chủ động và có thể được sử dụng để khởi động lại các dịch vụ và thất bại giữa các nút khi có vấn đề nghiêm trọng. Đây thực chất là những gì bạn đang tìm kiếm.

Tất cả các giải pháp cụm này được bao gồm trong các giấy phép HĐH tương ứng, vì vậy bạn có thể mát mẻ về chi phí. Chúng yêu cầu một số cách lưu trữ được chia sẻ - có thể là NFS mount hoặc đĩa vật lý được truy cập bởi cả hai nút với hệ thống tệp được phân cụm. Một ví dụ về cái sau sẽ là các đĩa SAN có nhiều quyền truy cập máy chủ được cho phép, được định dạng bằng OCFS2 hoặc GFS . Tôi tin rằng bạn có thể sử dụng đĩa chia sẻ VMWare cho việc này.

Phần mềm cụm được sử dụng để xác định 'dịch vụ' chạy trên các nút mọi lúc hoặc chỉ khi nút đó là 'hoạt động'. Các nút giao tiếp thông qua nhịp tim, và cũng giám sát các dịch vụ đó. Họ có thể khởi động lại chúng nếu nhận thấy lỗi và khởi động lại nếu không thể sửa được.

Về cơ bản, bạn sẽ định cấu hình một địa chỉ IP 'được chia sẻ' mà lưu lượng truy cập sẽ được hướng đến. Sau đó, apache và bất kỳ dịch vụ cần thiết nào khác cũng có thể được định nghĩa và chỉ chạy trên máy chủ hoạt động. Đĩa được chia sẻ sẽ được sử dụng cho tất cả nội dung web của bạn, mọi tệp được tải lên và thư mục cấu hình apache của bạn. (với httpd.conf, v.v.)

Theo kinh nghiệm của tôi, điều này hoạt động rất tốt.

  • Không cần phải lấy vòng DNS hoặc bất kỳ bộ cân bằng tải đơn điểm nào khác - mọi thứ đều đạt một IP / FQDN.
  • Các tệp người dùng đã tải lên đi vào bộ lưu trữ được chia sẻ đó và do đó, đừng quan tâm nếu máy của bạn bị hỏng.
  • Các nhà phát triển tải nội dung lên IP / FQDN duy nhất mà không cần đào tạo bổ sung và luôn cập nhật nếu không thành công.
  • Quản trị viên có thể lấy máy ngoại tuyến, vá lỗi, khởi động lại, v.v ... Sau đó không thực hiện được nút hoạt động. Làm một nâng cấp mất thời gian chết tối thiểu.
  • Nút lỗi thời đó có thể được giữ nguyên trong một thời gian, khiến cho quá trình quay lại trở thành một quá trình dễ dàng không kém. (Nhanh hơn so với ảnh chụp nhanh VMWare)
  • Các thay đổi đối với cấu hình của Apache được chia sẻ, do đó không có gì lạ xảy ra trong quá trình chuyển đổi dự phòng, bởi vì một quản trị viên đã quên thực hiện các thay đổi trên hộp ngoại tuyến.


--Christopher Karel


1

Cân bằng tải tối ưu có thể rất tốn kém và phức tạp. Cân bằng tải cơ bản chỉ cần đảm bảo rằng mỗi máy chủ đang phục vụ số lượng truy cập gần như nhau bất cứ lúc nào.

Phương pháp cân bằng tải đơn giản nhất là cung cấp nhiều bản ghi A trong DNS. Theo mặc định, địa chỉ IP sẽ được cấu hình theo phương pháp luân chuyển vòng. Điều này sẽ dẫn đến việc người dùng được phân phối tương đối đồng đều trên các máy chủ. Điều này hoạt động tốt cho các trang web không quốc tịch. Một phương pháp phức tạp hơn một chút là cần thiết khi bạn có một trang web trạng thái.

Để xử lý các yêu cầu trạng thái, bạn có thể sử dụng chuyển hướng. Cung cấp cho mỗi máy chủ web một địa chỉ thay thế, chẳng hạn như www1, www2, www3, v.v. Chuyển hướng kết nối www ban đầu đến địa chỉ thay thế của máy chủ. Bạn có thể kết thúc với các vấn đề đánh dấu theo cách này, nhưng chúng nên được phân tán đều trên các máy chủ.

Cách khác, sử dụng một đường dẫn khác để chỉ ra máy chủ nào đang xử lý phiên trạng thái sẽ cho phép các phiên ủy quyền đã chuyển máy chủ sang máy chủ gốc. Đây có thể là một vấn đề khi phiên cho máy chủ bị lỗi đến máy chủ đã tiếp quản từ máy chủ bị lỗi. Tuy nhiên, dù sao thì việc chặn phần mềm phân cụm trạng thái sẽ bị thiếu. Do bộ nhớ đệm trình duyệt, bạn có thể không gặp nhiều phiên thay đổi máy chủ.

Việc chuyển đổi dự phòng có thể được xử lý bằng cách cấu hình máy chủ để chiếm địa chỉ IP của máy chủ bị lỗi. Điều này sẽ giảm thiểu thời gian chết nếu máy chủ bị lỗi. Nếu không có phần mềm phân cụm, các phiên trạng thái sẽ bị mất nếu máy chủ bị lỗi.

Nếu không có failover, người dùng sẽ gặp phải sự chậm trễ cho đến khi trình duyệt của họ không chuyển sang địa chỉ IP tiếp theo.

Sử dụng các dịch vụ Restful thay vì các phiên có trạng thái sẽ loại bỏ các vấn đề phân cụm ở mặt trước. Vấn đề phân cụm ở phía lưu trữ vẫn sẽ được áp dụng.

Ngay cả với các bộ cân bằng tải trước các máy chủ, bạn có thể sẽ có DNS vòng tròn phía trước chúng. Điều này sẽ đảm bảo tất cả các bộ cân bằng tải của bạn được sử dụng. Họ sẽ thêm một lớp khác để bạn thiết kế, với độ phức tạp bổ sung và một điểm thất bại khác. Tuy nhiên, họ có thể cung cấp một số tính năng bảo mật.

Giải pháp tốt nhất sẽ phụ thuộc vào các yêu cầu liên quan.

Việc triển khai các máy chủ hình ảnh để phục vụ nội dung như hình ảnh, tệp CSS và nội dung tĩnh khác có thể giảm tải cho các máy chủ ứng dụng.


1

Tôi thường sử dụng một cặp máy OpenBSD giống hệt nhau:

  • Sử dụng RelayD để cân bằng tải, giám sát máy chủ web và xử lý máy chủ web bị lỗi
  • Sử dụng CARP cho tính sẵn sàng cao của các bộ cân bằng tải.

OpenBSD nhẹ, ổn định và khá an toàn - Hoàn hảo cho các dịch vụ mạng.

Để bắt đầu, tôi khuyên bạn nên thiết lập layer3. Nó tránh thiết lập tường lửa phức tạp (PF). Dưới đây là một ví dụ /etc/relayd.conf tệp hiển thị thiết lập bộ cân bằng tải chuyển tiếp đơn giản với giám sát các máy chủ web phụ trợ:

# $OpenBSD: relayd.conf,v 1.13 2008/03/03 16:58:41 reyk Exp $
#
# Macros
#

# The production internal load balanced address
intralbaddr="1.1.1.100"

# The interface on this load balancer with the alias for the intralbaddr address
intralbint="carp0"

# The list of web/app servers serving weblbaddress
intra1="1.1.1.90"
intra2="1.1.1.91"

# Global Options
#
# interval 10
timeout 1000
# prefork 5

log updates

# The "relaylb" interface group is assigned to the intralbint carp interface
# The following forces a demotion in carp if relayd stops
demote relaylb

#
# Each table will be mapped to a pf table.
#
table <intrahosts> { $intra1 $intra2 }

# Assumes local webserver that can provide a sorry page
table <fallback> { 127.0.0.1 }

#
# Relay and protocol for HTTP layer 7 loadbalancing and SSL acceleration
#
http protocol httprelay {
        return error
        header append "$REMOTE_ADDR" to "X-Forwarded-For"
        header append "$SERVER_ADDR:$SERVER_PORT" to "X-Forwarded-By"
        # header change "Connection" to "close"

        # Various TCP performance options
        tcp { nodelay, sack, socket buffer 65536, backlog 128 }

#       ssl { no sslv2, sslv3, tlsv1, ciphers HIGH }
#       ssl session cache disable
}

relay intra-httprelay {
        listen on $intralbaddr port 80
        protocol httprelay

        # Forward to hosts in the intrahosts table using a src/dst hash
        # The example shows use of a page with dynamic content to provide
        # application aware site checking.  This page should return a 200 on success,
        # including database or appserver connection, and a 500 or other on failure
        forward to <intrahosts> port http mode loadbalance \
                check http "/nlbcheck.asp" code 200

}

Xin chào Paul, Cảm ơn vì ví dụ thực hành của bạn! Bạn đã hài lòng với độ tin cậy của giải pháp của bạn?
Công nghiệp

Rất vui. Tôi đã sử dụng OpenBSD cho tất cả các loại nhiệm vụ mạng (tường lửa, máy chủ DNS, máy chủ web, bộ cân bằng tải, v.v.) trong khoảng 12 năm nay và chất lượng ổn định của mỗi bản phát hành thật đáng kinh ngạc. Một khi nó được thiết lập, nó chỉ chạy. Giai đoạn = Stage.
Paul Doom

0

Bạn đã cho EC2 với cloudfoundry hoặc có thể cây đậu đàn hồi hay chỉ là một đồng bằng cũ AWS autoscaling một ý nghĩ. Tôi đã sử dụng nó và nó có tỷ lệ khá tốt và có thể co giãn có thể mở rộng / xuống mà không cần sự can thiệp của con người.

Cho rằng bạn nói rằng bạn không có kinh nghiệm về cân bằng tải, tôi sẽ đề xuất các tùy chọn này vì chúng yêu cầu "chiên" não tối thiểu để đứng dậy và chạy.

Nó có thể là một cách sử dụng tốt hơn thời gian của bạn.


Nhóm các trang web StackOverflow được sử dụng poundcho đến gần đây khi tôi tin rằng họ đã triển khai nginx. Lưu ý rằng nginx có thể được triển khai để thay thế Apache hoặc chỉ là một lối vào cho Apache.
Michael Dillon

Chào Ankur. Cảm ơn vì đã trả lời. Amazon chắc chắn là một tùy chọn mà chúng tôi đã xem xét, tuy nhiên dường như có cùng mức độ tích cực như phản hồi tiêu cực có sẵn trên EC2 khi nói đến việc xây dựng các ứng dụng quan trọng trong kinh doanh trên chúng ...
Công nghiệ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.