在Ubuntu上实现PHP-FPM的高可用性,可以通过以下几种方法:
负载均衡器可以将请求分发到多个PHP-FPM实例,从而提高系统的可用性和性能。
安装Nginx:
sudo apt update
sudo apt install nginx
配置Nginx:
编辑Nginx配置文件(通常位于/etc/nginx/sites-available/default),添加负载均衡配置:
upstream php_fpm {
server unix:/var/run/php/php7.4-fpm.sock;
server unix:/var/run/php/php7.5-fpm.sock;
# 添加更多PHP-FPM实例
}
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass php_fpm;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
重启Nginx:
sudo systemctl restart nginx
Keepalived可以提供虚拟IP地址(VIP),当主服务器宕机时,VIP会自动切换到备用服务器。
安装Keepalived:
sudo apt update
sudo apt install keepalived
配置Keepalived:
编辑Keepalived配置文件(通常位于/etc/keepalived/keepalived.conf),添加以下内容:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 42
}
virtual_ipaddress {
192.168.1.100
}
}
virtual_server 192.168.1.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.1.1 80 {
weight 1
TCP_CHECK {
connect_timeout 10
connect_port 80
}
}
real_server 192.168.1.2 80 {
weight 1
TCP_CHECK {
connect_timeout 10
connect_port 80
}
}
}
启动Keepalived:
sudo systemctl start keepalived
sudo systemctl enable keepalived
使用Docker和Docker Compose可以轻松管理多个PHP-FPM实例,并通过负载均衡器进行流量分发。
安装Docker:
sudo apt update
sudo apt install docker.io
安装Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
创建一个docker-compose.yml文件,定义多个PHP-FPM实例:
version: '3'
services:
php-fpm-1:
image: php:7.4-fpm
volumes:
- ./php-fpm-1:/var/www/html
networks:
- php-network
php-fpm-2:
image: php:7.5-fpm
volumes:
- ./php-fpm-2:/var/www/html
networks:
- php-network
networks:
php-network:
driver: bridge
docker-compose up -d
参考前面的Nginx配置示例,将fastcgi_pass指向Docker网络中的PHP-FPM服务。
通过以上方法,可以在Ubuntu上实现PHP-FPM的高可用性。选择适合你业务需求的方法进行部署。