19/09/2018, 09:48

Xây dựng cho sản xuất: Ứng dụng web - Tổng quan

Giới thiệu Hướng dẫn gồm 6 phần này sẽ chỉ cho bạn cách xây dựng một thiết lập ứng dụng sản xuất đa máy chủ từ đầu. Thiết lập cuối cùng sẽ được hỗ trợ bởi các bản sao lưu, giám sát và hệ thống ghi nhật ký tập trung, điều này sẽ giúp bạn đảm bảo rằng bạn sẽ có thể phát hiện các vấn đề và khôi phục ...

Giới thiệu

Hướng dẫn gồm 6 phần này sẽ chỉ cho bạn cách xây dựng một thiết lập ứng dụng sản xuất đa máy chủ từ đầu. Thiết lập cuối cùng sẽ được hỗ trợ bởi các bản sao lưu, giám sát và hệ thống ghi nhật ký tập trung, điều này sẽ giúp bạn đảm bảo rằng bạn sẽ có thể phát hiện các vấn đề và khôi phục chúng. Mục tiêu cuối cùng của loạt bài này là xây dựng trên các khái niệm quản trị hệ thống độc lập và giới thiệu cho bạn một số cân nhắc thực tế về việc tạo một thiết lập máy chủ sản xuất.

Nếu bạn quan tâm đến việc xem xét một số khái niệm sẽ được đề cập trong loạt bài này, hãy đọc các hướng dẫn sau:

  • 5 Thiết lập máy chủ chung cho ứng dụng web của bạn
  • 5 cách để cải thiện thiết lập máy chủ ứng dụng web sản xuất của bạn

Trong khi các bài báo liên kết cung cấp các hướng dẫn chung về thiết lập ứng dụng sản xuất, loạt bài này sẽ trình bày cách lập kế hoạch và thiết lập một ứng dụng mẫu từ đầu đến cuối. Hy vọng rằng, điều này sẽ giúp bạn lập kế hoạch và thực hiện môi trường máy chủ sản xuất của riêng bạn, ngay cả khi bạn đang chạy một ứng dụng khác nhau trên một chồng công nghệ hoàn toàn khác nhau. Vì hướng dẫn này bao gồm nhiều chủ đề quản trị hệ thống khác nhau, nên thường sẽ trì hoãn giải thích chi tiết cho các bài viết hỗ trợ bên ngoài cung cấp thông tin bổ sung.

Mục tiêu của chúng tôi

Đến cuối tập hướng dẫn này, chúng ta sẽ có một thiết lập máy chủ sản xuất cho một ứng dụng PHP, WordPress cho các mục đích trình diễn, có thể truy cập thông qua https://www.example.com/. Chúng tôi cũng sẽ bao gồm các máy chủ sẽ hỗ trợ các máy chủ ứng dụng sản xuất. Các thiết lập cuối cùng sẽ trông giống như thế này (DNS riêng và sao lưu từ xa không có hình):

Production Setup

Trong thiết lập này, các máy chủ trong Ứng dụng hộp được coi là thiết yếu cho ứng dụng chạy đúng cách. Ngoài kế hoạch khôi phục và máy chủ sao lưu từ xa, các thành phần còn lại sẽ sao lưu, theo dõi và ghi nhật ký sẽ được thêm vào để hỗ trợ thiết lập ứng dụng sản xuất. Mỗi thành phần sẽ được cài đặt trên một máy chủ Ubuntu 14.04 riêng biệt trong cùng một khu vực DigitalOcean, NYC3 trong ví dụ của chúng tôi, với mạng riêng được kích hoạt.

Tập hợp các máy chủ soạn ứng dụng sẽ được gọi là tên máy chủ sau:

  • lb1: HAProxy Load Balancer, có thể truy cập thông qua https://example.com/
  • app1: Máy chủ ứng dụng Apache và PHP
  • app2: Máy chủ ứng dụng Apache và PHP
  • db1: Máy chủ cơ sở dữ liệu MySQL

Điều quan trọng cần lưu ý là thiết lập kiểu này đã được chọn để chứng minh làm thế nào để các thành phần của một ứng dụng có thể được xây dựng trên nhiều máy chủ; thiết lập của riêng bạn nên được tùy chỉnh dựa trên nhu cầu của riêng bạn. Thiết lập máy chủ cụ thể này có các điểm lỗi duy nhất có thể được loại bỏ bằng cách thêm một bộ cân bằng tải khác (và DNS vòng tròn) và sao chép máy chủ cơ sở dữ liệu hoặc thêm một IP tĩnh trỏ đến cân bằng tải hoạt động hoặc thụ động được trình bày bên dưới mà chúng tôi sẽ trình bày ngắn gọn.

Các thành phần sẽ hỗ trợ các máy chủ ứng dụng sẽ được gọi là các tên máy chủ sau đây:

  • sao lưu: Máy chủ sao lưu Bacula
  • giám sát: Máy chủ giám sát Nagios
  • ghi nhật ký: Elasticsearch, Logstash, Kibana (ELK) ngăn xếp cho khai thác tập trung

Ngoài ra, ba thành phần hỗ trợ sau không được mô tả trong biểu đồ:

  • ns1: Máy chủ định danh BIND chính cho DNS riêng
  • ns2: Máy chủ định danh BIND phụ cho DNS riêng
  • remotebackups: Máy chủ từ xa, nằm trong một vùng khác, để lưu trữ các bản sao lưu của Bacula trong trường hợp xảy ra thảm họa vật lý trong trung tâm dữ liệu sản xuất - ===

Chúng tôi cũng sẽ phát triển các kế hoạch phục hồi cơ bản cho các lỗi trong các thành phần khác nhau của ứng dụng.

Khi chúng tôi đạt được mục tiêu thiết lập của mình, chúng tôi sẽ có tổng cộng 10 máy chủ. Chúng tôi sẽ tạo tất cả chúng cùng một lúc (điều này đơn giản hóa những thứ như thiết lập DNS), nhưng bạn có thể tạo mỗi thứ nếu cần. Nếu bạn dự định sử dụng bản sao lưu DigitalOcean làm giải pháp sao lưu của mình, ngoài hoặc thay cho Bacula, hãy đảm bảo chọn tùy chọn đó khi tạo các Giọt của bạn.

Tính khả dụng cao (Tùy chọn)

Một điểm thất bại duy nhất là khi một phần cơ sở hạ tầng của bạn đi xuống có thể làm cho toàn bộ trang web hoặc dịch vụ của bạn không khả dụng. Nếu bạn muốn giải quyết các điểm lỗi duy nhất bạn thiết lập này, bạn có thể làm cho nó có sẵn cao bằng cách thêm một cân bằng tải khác. Các dịch vụ có sẵn cao sẽ tự động chuyển sang hệ thống sao lưu hoặc thụ động trong trường hợp có lỗi. Có hai cân bằng tải trong một thiết lập sẵn sàng cao bảo vệ chống lại thời gian chết bằng cách đảm bảo rằng một cân bằng tải luôn luôn thụ động có sẵn để chấp nhận lưu lượng nếu cân bằng tải hoạt động không có sẵn.

Có một số cách để thực hiện thiết lập tính khả dụng cao. Để tìm hiểu thêm, hãy đọc phần này của Cách sử dụng IP nổi.

Mạng riêng ảo (Tùy chọn)

Nếu bạn muốn bảo mật thông tin liên lạc mạng giữa các máy chủ của mình, bạn có thể cân nhắc thiết lập VPN. Bảo đảm việc truyền mạng bằng mã hóa đặc biệt quan trọng khi dữ liệu được truyền qua Internet. Một lợi ích khác của việc sử dụng VPN là danh tính của máy chủ được xác thực bằng quy trình xác thực khóa, điều này sẽ bảo vệ các dịch vụ của bạn khỏi các nguồn trái phép.

Nếu bạn đang tìm kiếm một giải pháp VPN nguồn mở, bạn có thể muốn xem xét Tinc hoặc OpenVPN. Trong trường hợp đặc biệt này, Tinc, sử dụng định tuyến lưới, là giải pháp tốt hơn. Bạn có thể tìm thấy hướng dẫn về cả hai giải pháp VPN tại đây:

  • Làm thế nào để cài đặt Tinc và thiết lập một VPN cơ bản trên Ubuntu 14.04
  • Làm thế nào để an toàn giao thông giữa VPS bằng cách sử dụng OpenVPN

Điều kiện tiên quyết

Mỗi máy chủ Ubuntu 14.04 phải có siêu người dùng không phải root, có thể được thiết lập bằng cách làm theo hướng dẫn sau: Thiết lập máy chủ ban đầu với Ubuntu 14.04. Tất cả các lệnh sẽ được chạy như người dùng này, trên mỗi máy chủ.

Chúng tôi sẽ giả định rằng bạn có một số kiến ​​thức về các khái niệm bảo mật cơ bản về Linux, mà chúng tôi sẽ không đề cập chi tiết. Nếu bạn cần một lớp bảo mật Linux nhanh, hãy đọc bài viết này: 7 biện pháp bảo mật để bảo vệ máy chủ của bạn.

Tên miền

Chúng tôi sẽ giả định rằng ứng dụng của bạn sẽ được phân phát qua tên miền, chẳng hạn như "example.com". Nếu bạn chưa sở hữu, hãy mua một từ một công ty đăng ký tên miền.

Một khi bạn có tên miền của bạn lựa chọn, bạn có thể làm theo hướng dẫn này để sử dụng nó với DNS DigitalOcean: Làm thế nào để trỏ đến máy chủ tên DigitalOcean từ đăng ký tên miền phổ biến.

Ngoài việc làm cho trang web của bạn dễ tiếp cận hơn (so với địa chỉ IP), cần có tên miền để đạt được lợi ích xác thực tên miền và xác thực danh tính bằng cách sử dụng chứng chỉ SSL, cũng cung cấp mã hóa để liên lạc giữa ứng dụng của bạn với người dùng.

Chứng chỉ SSL

TLS / SSL cung cấp khả năng xác thực mã hóa và tên miền giữa ứng dụng của bạn và người dùng của nó, vì vậy chúng tôi sẽ sử dụng chứng chỉ SSL trong thiết lập của mình. Trong ví dụ của chúng tôi, bởi vì chúng tôi muốn người dùng truy cập trang web của chúng tôi tại "www.example.com", đó là những gì chúng tôi sẽ chỉ định làm Tên thường gặp của chứng chỉ (CN). Chứng chỉ sẽ được cài đặt trên máy chủ HAProxy, lb1, vì vậy bạn có thể muốn tạo các khóa chứng chỉ và CSR ở đó để thuận tiện.

Nếu bạn yêu cầu chứng chỉ cung cấp xác thực danh tính, bạn có thể nhận chứng chỉ SSL miễn phí bằng cách sử dụng Let's Encrypt hoặc mua chứng chỉ từ Cơ quan cấp chứng chỉ thương mại. Để biết chi tiết về tùy chọn Hãy mã hóa, vui lòng đọc Cách cài đặt chứng chỉ SSL từ Cơ quan cấp chứng chỉ thương mại. Bỏ qua Cài đặt chứng chỉ trên máy chủ web phần.

Ngoài ra, bạn cũng có thể sử dụng chứng chỉ SSL tự ký, có thể được tạo bằng lệnh này:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/www.example.com.key -out ~/www.example.com.crt

Các bước để đạt được mục tiêu của chúng tôi

Bây giờ chúng ta có một phác thảo về thiết lập ứng dụng sản xuất của mình, hãy tạo một kế hoạch chung để đạt được mục tiêu của chúng ta.

Các thành phần bao gồm ứng dụng là quan trọng nhất, vì vậy chúng tôi muốn những thành phần đó hoạt động sớm. Tuy nhiên, vì chúng tôi đang có kế hoạch sử dụng giải pháp địa chỉ dựa trên tên của các kết nối mạng riêng của mình, chúng ta nên thiết lập DNS trước.

Khi DNS của chúng tôi đã sẵn sàng, để có được mọi thứ và chạy, chúng tôi sẽ thiết lập các máy chủ bao gồm ứng dụng. Bởi vì cơ sở dữ liệu được yêu cầu bởi ứng dụng và ứng dụng được yêu cầu bởi trình cân bằng tải, chúng tôi sẽ thiết lập các thành phần theo thứ tự sau:

  1. Máy chủ cơ sở dữ liệu
  2. Máy chủ ứng dụng
  3. Cân bằng tải

Khi chúng tôi đã trải qua các bước thiết lập ứng dụng của mình, chúng tôi sẽ có thể đưa ra một kế hoạch phục hồi cho các tình huống khác nhau. Kế hoạch này sẽ hữu ích trong việc xác định chiến lược sao lưu của chúng tôi.

Sau khi chúng tôi có các kế hoạch phục hồi khác nhau của mình, chúng tôi sẽ muốn hỗ trợ nó bằng cách thiết lập sao lưu. Theo đó, chúng ta có thể thiết lập giám sát để đảm bảo máy chủ và dịch vụ của chúng tôi ở trạng thái OK. Cuối cùng, chúng tôi sẽ thiết lập khai thác tập trung để chúng tôi có thể giúp chúng tôi xem nhật ký của mình, khắc phục sự cố và xác định xu hướng.

Phần kết luận

Với kế hoạch chung của chúng tôi đã sẵn sàng, chúng tôi sẵn sàng triển khai thiết lập ứng dụng sản xuất của mình. Hãy nhớ rằng thiết lập này, trong khi hoàn toàn chức năng, là một ví dụ mà bạn sẽ có thể thu thập thông tin hữu ích từ, và sử dụng những gì bạn đã học để cải thiện thiết lập ứng dụng của riêng bạn.

Tiếp tục với hướng dẫn tiếp theo để bắt đầu với việc thiết lập ứng dụng: Xây dựng cho sản xuất: Ứng dụng web - Triển khai.

0