Điểm:2

Ổ đĩa / khối lượng GlusterFS bị treo sau khi truy cập nhanh các tệp phiên PHP từ bộ chứa PHP Docker

lá cờ in

2021-10-05 CÂU HỎI VÀ VĂN BẢN CẬP NHẬT SAU KHI PHÂN TÍCH THÊM, GIẢM TỚI TỐI THIỂU

Mô tả ngắn

Một cụm Nomad / Consul đang chạy, với Traefik (với cấu hình tối thiểu) là một tác vụ hệ thống trên mỗi máy khách Nomad. Có 3 máy chủ du mục, 3 máy chủ lãnh sự, 3 máy khách du mục và 3 máy chủ Gluster tại thời điểm này. Thiết lập rất giống với điều này bài viết về setup cụm Nomad/Consul

Hình ảnh và trang web cơ bản hoạt động tốt.

Vấn đề

Tôi đã bắt đầu chuyển trang web dựa trên PHP lớn hơn đầu tiên (với số lượng tải phụ thuộc trang lớn hơn trên trang web) sang cụm này và đang gặp sự cố kỳ lạ mà tôi đã xác định chính xác nhưng không thể giải quyết đúng cách.

Các nhiệm vụ tải tốt và đăng ký trong Consul, Traefik và Nomad. Các trang nhỏ (với ít phụ thuộc) hoạt động tốt.

Bất cứ khi nào một trang có quá nhiều tải phụ thuộc, Apache sẽ chặn các kết nối cụ thể đó.

Khi tôi mở một cửa sổ trình duyệt Ẩn danh mới và truy cập url, trang chính và tải khoảng 10-15 phần phụ thuộc. Những cái khác ở trạng thái chờ xử lý trong trình duyệt. Trạng thái trình duyệt tiếp tục 'quay' (như đang tải). Đóng cửa sổ và mở một cửa sổ mới cho phép tôi lặp lại quy trình.

Tôi đã xác định vấn đề là thư mục phiên PHP được ánh xạ (thông qua Docker) tới một thư mục trên giá treo GlusterFS.

Việc di chuyển ánh xạ âm lượng sang một thư mục khác được lưu trữ dựa trên cùng một máy chủ sẽ loại bỏ sự cố và trang web sẽ tải như bình thường.

Phần kết luận: Sự tương tác giữa các khối Docker và giá treo Gluster đang gây ra sự cố khi 'tải nặng'. Chỉ với một vài yêu cầu, mọi thứ đều hoạt động tốt. Với rất nhiều yêu cầu truy cập tệp phiên PHP, mọi thứ bị đình trệ và không phục hồi.

Câu hỏi: Điều này có thể do sự cố cấu hình Gluster hoặc cách cấu hình ngàm trong /etc/fstab. Xin hãy giúp khắc phục vấn đề này!

SỰ CÔ LẬP

Thư mục phiên PHP được đặt thành /var/php_session trong các hình ảnh Cấu hình PHP và được ánh xạ trong Nomad/Docker tới /data/storage/test/php_sessions.

Các /data/storage/test/php_sessions thư mục được sở hữu bởi người dùng 20000 để đảm bảo rằng tất cả các nút có quyền truy cập vào cùng một phiên PHP:

client:/data/storage/test$ ls -ln .
drwxr-xr-x 2 20000 20000 6 ngày 5 tháng 10 14:53 php_sessions
drwxr-xr-x 2 20000 20000 6 ngày 5 tháng 10 14:53 tải lên

Khi thay đổi ánh xạ âm lượng du mục (trong /etc/nomad/nomad.hcl) từ:

khách hàng {

  host_volume "phiên kiểm tra" {
    đường dẫn = "/data/storage/test/php_sessions"
    chỉ đọc = sai
  }

}

đến

khách hàng {

  host_volume "phiên kiểm tra" {
    đường dẫn = "/tmp/php_sessions"
    chỉ đọc = sai
  }

}

(Và đảm bảo /tmp/php_sessions cũng thuộc sở hữu của người dùng 20000)

Mọi thứ hoạt động trở lại.

Dữ liệu chi tiết (Thêm theo yêu cầu)

nội dung của /etc/fstab:

LABEL=cloudimg-rootfs / ext4 mặc định 0 1
LABEL=UEFI /boot/efi vfat mặc định 0 1
gluster-01,gluster-02,gluster-03:/storage /data/storage glusterfs _netdev,defaults,direct-io-mode=disable,rw

Dockerfile cho hình ảnh trang web:

TỪ php:7.4.1-Apache
ENV APACHE_DOCUMENT_ROOT /var/www/htdocs
WORKDIR /var/www

CHẠY docker-php-ext-install mysqli pdo_mysql

# Làm cho gốc Apache có thể cấu hình được
CHẠY sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
CHẠY sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

# Nghe trên cổng 1080 theo mặc định cho người dùng không root
CHẠY sed -ri 's/Nghe 80/Nghe 1080/g' /etc/apache2/ports.conf
CHẠY sed -ri 's/:80/:1080/g' /etc/apache2/sites-enabled/*

# Sử dụng cấu hình riêng
SAO CHÉP dữ liệu/000-default.conf /etc/apache2/sites-enabled/

# Kích hoạt ini sản xuất
CHẠY cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini

CHẠY a2enmod viết lại && a2enmod remoteip

SAO CHÉP --from=composer:latest /usr/bin/composer /usr/local/bin/composer
SAO CHÉP --chown=www-data:www-data . /var/www

CHẠY /usr/local/bin/composer --no-cache --no-ansi --no-interaction cài đặt

# Cuối cùng thêm các thay đổi bảo mật
SAO CHÉP data/changes.ini /usr/local/etc/php/conf.d/

Tệp du mục bị loại bỏ thành phần gây ra sự cố: với kế hoạch công việc Nomad sau đây:

công việc "kiểm tra" {
  trung tâm dữ liệu = ["dc1"]

  nhóm "dàn thử nghiệm" {
    đếm = 1

    mạng {
      cổng "php_http" {
        đến = 1080
      }
    }

    tập "phiên kiểm tra" {
      gõ = "máy chủ"
      chỉ đọc = sai
      nguồn = "phiên kiểm tra"
    }

    tập "tải lên thử nghiệm" {
      gõ = "máy chủ"
      chỉ đọc = sai
      nguồn = "tải lên thử nghiệm"
    }

    dịch vụ {
      name = "dàn thử nghiệm"
      cổng = "php_http"

      thẻ = [
        "traefik.enable=true",
        "traefik.http.routers.test.php_staging.rule=Host(`staging.xxxxxx.com`)",
      ]

      kiểm tra {
        gõ = "tcp"
        cổng = "php_http"
        khoảng thời gian = "5s"
        hết thời gian = "2 giây"
      }
    }

    nhiệm vụ "kiểm tra" {
      trình điều khiển = "docker"
      người dùng = "20000"

      cấu hình {
        image = "docker-repo:5000/test/test:latest"
        cổng = ["php_http"]
      }

      volume_mount {
        khối lượng = "phiên kiểm tra"
        đích = "/var/php_sessions"
        chỉ đọc = sai
      }

      volume_mount {
        volume = "tải lên thử nghiệm"
        đích = "/var/tải lên"
        chỉ đọc = sai
      }

      mẫu {
        dữ liệu = <<EOF
1.2.3.4
EOF

        đích = "local/trusted-proxies.lst"
      }
    }
  }
}
Ярослав Рахматуллин avatar
Bạn đang mô tả một môi trường phức tạp và một sự cố khó tái tạo vì chúng tôi không có quyền truy cập vào ứng dụng PHP cụ thể của bạn. Những câu hỏi như thế này thật khó để trả lời. Để tăng cơ hội nhận được câu trả lời, hãy thử giới hạn phạm vi của câu hỏi hoặc mô tả tiêu chí thành công cho câu trả lời.Bằng mọi giá, tôi có một số ý tưởng về nguyên nhân của vấn đề. Vui lòng cung cấp data/000-default.conf và tổng quan ngắn gọn/tối thiểu về cách bạn đã thiết lập traefik, du mục và lãnh sự (thậm chí nhiều hơn là chỉ các tệp cấu hình đã được đề cập).
Paul avatar
lá cờ in
Cảm ơn @ЯÑоÑлð°Ð²ð Ð°Ñ Ð¼Ñ°ÑÑлð»Ð¸Ð½, tôi đã cô lập vấn đề thêm. Nguyên nhân là do thư mục phiên PHP trong hình ảnh được ánh xạ tới một thư mục trên ổ đĩa GlusterFS trên máy chủ. Hy vọng bây giờ ai đó có thể cho tôi biết làm thế nào để khắc phục điều này!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.