LNMP(Linux+Nginx+MySQL+PHP)是常见的Web应用架构,要实现高可用性需要从多个层面进行设计。以下是完整的LNMP高可用架构实现方案:
# 在两台服务器上安装Keepalived
apt-get install keepalived # Ubuntu/Debian
yum install keepalived # CentOS/RHEL
# 主服务器配置(/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 1111
}
virtual_ipaddress {
192.168.1.100
}
}
# 备用服务器配置
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
}
-- 主服务器配置
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
-- 从服务器配置
CHANGE MASTER TO
MASTER_HOST='master_host',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
START SLAVE;
# my.cnf配置
[mysqld]
plugin-load-add=group_replication.so
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address="node1:33061"
group_replication_group_seeds="node1:33061,node2:33061,node3:33061"
group_replication_bootstrap_group=off
# my.cnf配置
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="my_galera_cluster"
wsrep_cluster_address="gcomm://node1,node2,node3"
wsrep_node_name="node1"
wsrep_node_address="node1_ip"
# 安装DRBD
apt-get install drbd8-utils # Ubuntu/Debian
yum install drbd kmod-drbd # CentOS/RHEL
# 配置/etc/drbd.conf
resource r0 {
protocol C;
disk { on-io-error detach; }
on node1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.1:7788;
meta-disk internal;
}
on node2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.2:7788;
meta-disk internal;
}
}
# 在所有节点上安装
apt-get install glusterfs-server
# 配置存储池
gluster peer probe node2
gluster peer probe node3
# 创建卷
gluster volume create gv0 replica 3 node1:/data node2:/data node3:/data
gluster volume start gv0
会话保持:使用Redis集中存储会话
// php.ini配置
session.save_handler = redis
session.save_path = "tcp://redis-server:6379"
代码部署:使用自动化部署工具(Ansible, SaltStack)
备份策略:
测试验证:
通过以上方案组合,可以构建一个高可用的LNMP架构,确保Web服务在单点故障时仍能持续可用。具体实施方案应根据业务需求、预算和技术能力进行选择和调整。