Lỗi 1897517 - php-fpm không thể ghi vào socket của redis
php-fpm không thể ghi vào ổ cắm của redis
Liên kếtHệ thốngIDRiêng tưPriorityTrạng tháiTóm tắtCập nhật lần cuốiRed Hat Bugzilla18751380mediumĐÓNG CỬAphp-fpm không thể ghi vào ổ cắm của redis (Fedora)Red Hat Product ErrataRHBA-2022. 76910 Không Không Không KhôngTrong bài viết này, chúng ta sẽ tìm hiểu lý do tại sao sử dụng kết nối liên tục là một phương pháp hay và cách thiết lập khung Symfony để sử dụng kết nối liên tục trên máy chủ Redis
Tại sao sử dụng các kết nối liên tục?Máy chủ Redis được thiết kế để xử lý nhiều thao tác mỗi giây khiến nó trở thành một ứng cử viên sáng giá cho công cụ lưu trữ bộ đệm dữ liệu
Nhưng kết nối với máy chủ là một hoạt động tốn kém và do đó tốc độ kết nối nên được giữ ở mức thấp nhất có thể
Một giải pháp là sử dụng proxy như Twemproxy hoặc bạn có thể sử dụng các kết nối liên tục để chúng được PHP sử dụng lại để phục vụ nhiều yêu cầu
Sử dụng các kết nối liên tục với PHP chỉ hoạt động nếu
- bạn đang sử dụng PHP không an toàn theo luồng
- quy trình PHP không bị hủy khi yêu cầu đã được phục vụ
Điều này là bắt buộc nếu bạn đang sử dụng
Tính năng này không có sẵn trong các phiên bản luồng. Sau đó, pconnect và popen hoạt động giống như các giá trị tương đương không liên tục của chúng
Cái này dễ kiểm tra. Bạn có thể sử dụng CLI hoặc phương pháp phpinfo() để tìm hiểu. Bài viết StackOverflow này mô tả các phương pháp này. https. // stackoverflow. com/câu hỏi/5799843/find-if-the-install-php-is-threadsafe-or-nonthreadsafe
Quá trình PHP của tôi có bị hủy sau khi yêu cầu đã được phục vụ không?Điều này phụ thuộc vào thiết lập của bạn. Về cơ bản, với Apache, bạn có thể đang sử dụng
- mod_php (mặc định)
- CGI
- PHP-FPM
- …
PHP-FPM là cái tôi thích nhất. Với thiết lập này, một nhóm các quy trình PHP được bắt đầu và mỗi quy trình chờ Apache gửi yêu cầu để xử lý. Khi yêu cầu đã được phục vụ, thì quá trình sẽ chờ một yêu cầu khác. Vì vậy, nó không bị giết và do đó có thể sử dụng các kết nối liên tục tới Redis
Cách thiết lập SymfonySymfony cho phép bạn dễ dàng sử dụng Redis làm bộ điều hợp bộ đệm. Bạn chỉ cần đặt Redis DSN như được giải thích trong tài liệu. h
Nhưng cài đặt mặc định của bộ điều hợp này sử dụng các kết nối không liên tục theo giá trị mặc định của liên tục theo tài liệu. https. // giao hưởng. com/doc/current/components/cache/adapters/redis_adapter. html
Vì vậy, bạn cần sử dụng bộ điều hợp tùy chỉnh.
services:app.my_custom_redis_provider:
class: Redis
factory: [‘Symfony\Component\Cache\Adapter\RedisAdapter’, ‘createConnection’]
arguments:
— ‘%env(REDIS_URL)%’
— {persistent: 1, timeout: 15}
Thời gian chờ 15 giây được coi là thời gian chờ tốt nhưng bạn có thể thay đổi thời gian này để phù hợp với nhu cầu của mình. Hãy cẩn thận với thời gian chờ bằng 0 vì nó có thể tạo ra sự cố (https. //github. com/phpredis/phpredis/issues/1265)
Và sau đó tạo một nhóm sử dụng nhà cung cấp này
framework:cache:
pools:
cache.my_redis:
adapter: cache.adapter.redis
provider: app.my_custom_redis_provider
Nếu bạn muốn sử dụng thiết lập này cho nhóm mặc định cache.app và cache.system thì bạn cần
framework:cache:
app: cache.my_redis
system: cache.my_redisHãy cẩn thận
Sử dụng các kết nối liên tục đến Redis có nghĩa là kết nối không bị đóng cho đến khi quá trình PHP chết. Vì vậy, nếu nhóm PHP-FPM của bạn tạo ra nhiều quy trình PHP thì những quy trình này có thể tạo ra nhiều kết nối hơn so với khả năng xử lý của máy chủ Redis của bạn và điều này sẽ gây ra lỗi đạt được số lượng máy khách tối đa
Để cài đặt tiện ích mở rộng PECL cho nhiều phiên bản PHP, hãy lặp lại cài đặt tiện ích mở rộng PECL cho từng phiên bản PHP
Tiện ích mở rộng PHP này cung cấp cho khách hàng quyền truy cập vào máy chủ Redis. Bản thân nó không phải là Redis. Redis là một máy chủ cung cấp kho lưu trữ khóa/giá trị. Khi bạn cài đặt tiện ích mở rộng Redis PHP, nó sẽ cho phép PHP giao tiếp với máy chủ Redis. Đọc thêm về cách cài đặt máy chủ Redis
Cài đặt tiện ích mở rộng Redis trên PHP 7. X
Trong các ví dụ được hiển thị, thay thế "7. X" bằng phiên bản PHP của ứng dụng của bạn (ví dụ: "7. 0")
Để cài đặt tiện ích mở rộng PHP Redis trên PHP 7. 0, 7. 1, 7. 2, 7. 3 hoặc 7. 4, SSH vào máy chủ của bạn với quyền root và chạy các lệnh sau
sudo apt-get -y install gcc make autoconf libc-dev pkg-config sudo pecl7.X-sp install redisKhi được nhắc với những điều sau đây
enable igbinary serializer support? [no] : enable lzf compression support? [no] :nhấn Enter để chấp nhận mặc định cả hai lần
Sau khi cài đặt, hãy tạo tệp cấu hình cho tiện ích mở rộng và khởi động lại PHP bằng cách chạy các lệnh sau với quyền root
Khi nói đến tốc độ, không có máy chủ Redis nào sánh kịp. Là một máy chủ cơ sở dữ liệu NoSQL, nó cung cấp tốc độ lưu trữ và truy xuất dữ liệu tuyệt vời. Bên cạnh đó, Redis có các chức năng nổi bật giúp làm việc liền mạch với các dữ liệu khác nhau, kể cả những dữ liệu phức tạp. Tính dễ sử dụng và các chức năng phức tạp của Redis không chỉ làm cho nó nổi bật mà còn cho phép tiêu chuẩn hóa ngày càng tăng của nó như một cơ sở dữ liệu chính cho người dùng cá nhân và doanh nghiệp
Dưới đây, chúng tôi sẽ hướng dẫn chi tiết các bước giúp bạn cài đặt Redis trên Ubuntu 20. 04 phần mềm. Trong hướng dẫn này, bạn sẽ nhận được tất cả thông tin cần thiết từ cài đặt đến định cấu hình máy chủ Redis bên ngoài để sử dụng làm trình xử lý phiên cho ứng dụng PHP chạy trên Ubuntu 20. 04
Bắt đầu
Để thực hiện các bước, bạn sẽ cần hai máy chủ cơ sở dữ liệu (giọt nhỏ) khác nhau nằm trong cùng một trung tâm dữ liệu có bật mạng riêng. Bao gồm các
Một máy chủ web PHP chạy LAMP và LEMP trên Ubuntu 20. 04 – chúng tôi sẽ gọi máy chủ này là web
Thứ hai, làm sạch Ubuntu 20. 04 nơi Redis sẽ được cài đặt – chúng tôi sẽ gọi máy chủ này là Redis
Bước 1 - Cài đặt Redis Server
Bước đầu tiên của chúng tôi là cài đặt máy chủ Redis trên Ubuntu 20. 04. Sau khi hoàn tất, hãy đảm bảo rằng máy chủ đang hoạt động trên Redis Droplet của chúng tôi
Trong hướng dẫn này, chúng tôi sẽ sử dụng Kho lưu trữ gói cá nhân (PPA). Chúng tôi thực sự khuyên bạn nên sử dụng PPA vì lý do bảo mật. So với các kho lưu trữ của bên thứ ba khác, PPA ổn định, dễ cài đặt và trên hết, kho lưu trữ được thiết kế cho người dùng Ubuntu. PPA cho phép bạn có sẵn phiên bản phần mềm mới nhất, ngay cả đối với phần mềm bạn không tìm thấy trong kho chính thức của Ubuntu
Sử dụng PPA từ một nguồn trái phép là một điều tối kỵ. Đảm bảo rằng bạn chỉ nhận được PPA từ các nguồn xác thực và đã được xác minh. Bạn có thể thêm kho lưu trữ PPA bằng lệnh
1
sudo add - apt - kho lưu trữppa. chris - lea / return - máy chủ
Nhấn phím Enter để xác nhận. Sau khi xác nhận, chúng tôi sẽ cập nhật bộ đệm của trình quản lý gói bằng lệnh sau
1
sudo apt - nhận cập nhật
Tiếp theo, chúng ta sẽ cài đặt Redis bằng lệnh
1
sudo apt - nhận cài đặt trả về - máy chủ
Khi bạn thực hiện lệnh, bạn sẽ cài đặt Redis trên máy chủ của mình. Hãy kiểm tra cài đặt bằng lệnh
1
return - cli ping
Khi bạn nhấn lệnh, bạn sẽ thấy một phiên bản Redis đang chạy trên máy chủ cục bộ trên cổng 6379. Ngoài ra, sẽ có một phản hồi tên là PONG. Nếu bạn thấy những điều này, điều đó có nghĩa là bạn đã hoàn thành bước đầu tiên thành công. Để có hướng dẫn chi tiết về cài đặt và bảo mật Redis, bạn có thể xem hướng dẫn của chúng tôi Cách cài đặt và bảo mật Redis trên Ubuntu 18. 04
Tiếp theo, hãy chuyển sang bước tiếp theo- định cấu hình Redis
Bước 2 - Trả lại cấu hình để chấp nhận kết nối bên ngoài
Mục tiêu chính của việc định cấu hình Redis là chấp nhận các kết nối đến từ bên ngoài. Tại sao? . Nói một cách đơn giản hơn, bạn sẽ có quyền truy cập từ bên trong máy chủ mà bạn đã cài đặt Redis. localhost, and there is a restriction to connect from anywhere else. In simpler terms, you´ll have access from inside the server where you have installed Redis.
Trước tiên, hãy xem thông tin chi tiết về giao diện mạng của bạn bằng cách sử dụng lệnh ifconfig .
1
sudoifconfig
Bạn sẽ nhận được đầu ra dưới đây
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
eth0 Link encap. Ethernet HWaddr 04. 01. 63. 7e. a4. 01
inet addr. 188. 166. 77. 33188.166.77.33 Truyền hình. 188. 166. 127. 255188.166.127.255 Mặt nạ. 255. 255. 192. 0
inet6 addr. fe80. . 601. 63ff. fe7e. a401 / 64 Phạm vi. Liên kết
LÊN PHÁT SÓNG CHẠY ĐA NĂNG MTU. 1500 Số liệu. 1
RX gói. 3497 lỗi. 0 rớt. 0 bị tràn. 0 khung. 0
TX gói. 3554 lỗi. 0 rớt. 0 bị tràn. 0 nhà cung cấp dịch vụ. 0
va chạm. 0 txqueuelen. 1000
RX byte. 4895060 (4. 8 MB) TX byte. 619070 (619. 0 KB)
eth1 Link encap. Ethernet HWaddr 04. 01. 63. 7e. a4. 02
inet addr. 10. 133. 14. 9 Truyền hình. 10. 133. 255. 255 Mặt nạ. 255. 255. 0. 0
inet6 addr. fe80. . 601. 63ff. fe7e. a402 / 64 Phạm vi. Liên kết
LÊN PHÁT SÓNG CHẠY ĐA NĂNG MTU. 1500 Số liệu. 1
RX gói. 8 lỗi. 0 rớt. 0 bị tràn. 0 khung. 0
TX gói. 7 lỗi. 0 rớt. 0 bị tràn. 0 nhà cung cấp dịch vụ. 0
va chạm. 0 txqueuelen. 1000
RX byte. 648 (648. 0 B) TX byte. 578 (578. 0 B)
Tại giao diện eth1, bạn sẽ tìm thấy inet_addr . Ở đây chúng ta có 10. 133. 14. 9 . Chúng tôi sẽ sử dụng địa chỉ IP này trong các bước sắp tới để kết nối máy chủ redis từ máy chủ web.
Bước 3—Ràng buộc Localhost
Bạn có thể tự do sử dụng trình chỉnh sửa mã mà mình chọn (Atom và Visual Studio Code là những mã phổ biến nhất)
Bây giờ, hãy mở tệp / etc / return / trả về. conf và tìm dòng chứa định nghĩa bind . Bạn nên thêm địa chỉ IP mạng riêng của mình vào dòng.
1
sudo vim / vv / trả lại / trả lại. conf
/etc/returns/returns. conf
1
ràng buộc localhost 10. 133. 14
Bạn có thể thấy localhost , thay vì 127. 0. 0. 1 . Đừng lo, bạn chỉ cần thêm địa chỉ IP riêng của mình. Tiếp theo, khởi động lại dịch vụ Redis để áp dụng các thay đổi. Sử dụng lệnh bên dưới để khởi động lại máy chủ redis.
1
sudo dịch vụ trả về - máy chủ khởi động lại
Đối với những người dùng đã cài đặt Redis bằng ứng dụng một cú nhấp chuột, bạn sẽ thực hiện theo lệnh được đề cập bên dưới để khởi động lại máy chủ của mình
1
sudo dịch vụ return khởi động lại
Khi bạn khởi động lại máy chủ redis, bất kỳ máy chủ nào có trong cùng một mạng riêng sẽ tự động kết nối với phiên bản Redis này mà không cần phải thực hiện riêng lẻ
Bước 4— Thiết lập mật khẩu máy chủ trở lại
Bạn có thể bỏ qua bước này nếu đang sử dụng bản cài đặt Redis cho mục đích thực hành hoặc đào tạo. Tuy nhiên, bạn nên thiết lập mật khẩu cho máy chủ redis nếu muốn thêm một lớp bảo mật bổ sung cho cài đặt Redis của mình. Hãy để chúng tôi sửa đổi tệp cấu hình giống như chúng tôi đã làm ở bước trước. Sử dụng lệnh để chỉnh sửa
1
sudo vim / vv / trả lại / trả lại. conf
Bỏ ghi chú dòng chứa requirepass và đặt mật khẩu mạnh.
/etc/returns/returns. conf
1
requirepassStrongPassword
Khởi động lại dịch vụ Redis để phản ánh những thay đổi bạn đã thực hiện. Sử dụng lệnh để khởi động lại
1
sudo dịch vụ trả về - máy chủ khởi động lại
Bước 5 - Trả lại kết nối và kiểm tra xác thực
Trong bước này, chúng tôi sẽ kết nối với dịch vụ Redis từ bên trong máy redis để đảm bảo rằng tất cả các thay đổi được thực hiện đều hoạt động trơn tru như mong đợi. Để kết nối, sử dụng lệnh bên dưới
1
return - cli - h 10. 133. 14. 9
Ở đây, ngay cả khi bạn bỏ qua việc đề cập đến tên máy chủ, nó vẫn sẽ chạy. Mục đích chính của chúng tôi là đảm bảo dịch vụ Redis chấp nhận các kết nối một cách liền mạch
1
10. 133. 14. 9. 6379>
Có thể bạn gặp lỗi AUTH khi cố truy cập dữ liệu từ mật khẩu đã xác định.
1
10. 133. 14. 9. 6379> phím *
Đầu ra của bạn sẽ trông giống như thế này
1
2
ĐẦU RA.
(lỗi) NOAUTH Xác thực bắt buộc.
Để xác thực, hãy chạy lệnh AUTH cùng với mật khẩu bạn đã xác định trong /< /a> etc / return / return< /a>. Tệp conf .
1
10. 133. 14. 9. 6379> AUTH StrongPassword
Tiếp theo, chạy lại lệnh
1
10. 133. 14. 9. 6379> phím *
Lần này, bạn sẽ nhận được phản hồi OK thay vì lỗi. Bạn sẽ nhận được đầu ra như dưới đây
1
2
ĐẦU RA.
(trống danh sách hoặc đặt)
Đầu ra danh sách trống hoặc đặt có nghĩa là máy chủ Redis trống. Đó là bởi vì chúng tôi chưa định cấu hình máy chủ web dưới dạng trình xử lý phiên.
Ghi chú. Trước khi tiếp tục, hãy đảm bảo phiên SSH được mở và kết nối với redis-cli. Trong các bước sắp tới, chúng tôi sẽ quay lại lời nhắc redis-cli để xác minh xem dữ liệu phiên có được lưu trữ đúng cách hay không sau khi chúng tôi thực hiện các thay đổi cần thiết đối với máy chủ web
Bước 6 - Cài đặt Redis Extension trên Web Server
Các bước tiếp theo sẽ được thực hiện trên máy chủ web. Chúng ta cần cài đặt PHP Redis extension cho PHP để kết nối với Redis server
Trước tiên, hãy cập nhật bộ đệm của trình quản lý gói của bạn bằng cách chạy lệnh
1
sudo apt - nhận cập nhật
Tiếp theo, cài đặt gói php5 - redis .
1
sudo apt - nhận cài đặt php5 - return
Bạn đã sẵn sàng để kết nối với Redis
Bước 7 - Quay lại Thiết lập làm Trình xử lý phiên mặc định trên Máy chủ Web
PHP có trình xử lý phiên mặc định. Trong bước này, chúng tôi sẽ chỉnh sửa php. ini trên máy chủ web để thay đổi cài đặt mặc định. php. ini vị trí tệp phụ thuộc vào ngăn xếp hiện tại.
Đối với ngăn xếp LAMP trên Ubuntu 20. 04, sử dụng. / vv / php5 / apache2 / php. trong .
Đối với ngăn xếp LEMP trên Ubuntu 20. 04, đường dẫn thường là / etc / php5 / fpm / php. trong .
Nếu bạn không chắc chắn về vị trí của php chính của mình. ini , hãy sử dụng hàm phpinfo() . Đặt đoạn mã sau vào tệp có tên info. php bên trong thư mục gốc web của bạn.
1
2