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"
}
}
}
}