LNMP在Ubuntu上如何实现数据同步
导读:LNMP在Ubuntu上的数据同步实现方法 1. MySQL主从复制(数据库层面同步) MySQL主从复制是LNMP架构中最核心的数据库同步方案,通过主服务器(Master)记录二进制日志(binlog),从服务器(Slave)重放日志实现...
LNMP在Ubuntu上的数据同步实现方法
1. MySQL主从复制(数据库层面同步)
MySQL主从复制是LNMP架构中最核心的数据库同步方案,通过主服务器(Master)记录二进制日志(binlog),从服务器(Slave)重放日志实现数据一致性。
- 主服务器配置:
编辑MySQL配置文件/etc/mysql/mysql.conf.d/mysqld.cnf
,添加以下参数:
重启MySQL服务:server-id = 1 # 主服务器唯一ID(从服务器需不同) log_bin = /var/log/mysql/mysql-bin.log # 开启二进制日志 binlog_do_db = your_database_name # 指定同步的数据库(可选,避免同步无用库)
sudo systemctl restart mysql
。
创建复制用户并授权:
获取主服务器二进制日志状态(记录CREATE USER 'replicator'@'%' IDENTIFIED BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%'; FLUSH PRIVILEGES;
File
和Position
值,后续从服务器需要):SHOW MASTER STATUS;
- 从服务器配置:
编辑从服务器MySQL配置文件,添加:
重启MySQL服务:server-id = 2 # 从服务器唯一ID relay_log = /var/log/mysql/mysql-relay-bin.log # 开启中继日志 read_only = 1 # 设置为只读(可选,增强安全性)
sudo systemctl restart mysql
。
配置复制线程:
启动从服务器复制:CHANGE MASTER TO MASTER_HOST='master_ip', # 主服务器IP MASTER_USER='replicator', # 主服务器创建的复制用户 MASTER_PASSWORD='your_password', MASTER_LOG_FILE='mysql-bin.000001', # 主服务器记录的File值 MASTER_LOG_POS=123; # 主服务器记录的Position值
START SLAVE;
。
验证同步状态(Slave_IO_Running
和Slave_SQL_Running
均为Yes
表示成功):
通过以上步骤,从服务器会实时同步主服务器的数据库变更。SHOW SLAVE STATUS\G;
2. Redis发布订阅(实时数据同步)
Redis的发布订阅(Pub/Sub)功能可实现应用层数据的实时同步,适用于需要低延迟的场景(如聊天室、实时通知)。
- 安装Redis及PHP扩展:
在Ubuntu上安装Redis服务器和PHP Redis客户端:sudo apt update sudo apt install redis-server php-redis sudo systemctl restart redis-server php-fpm
- 应用层实现发布订阅:
使用PHP编写发布者(publisher.php)和订阅者(subscriber.php)脚本。发布者向指定频道发送消息,订阅者监听频道并处理消息(如更新缓存、同步数据库)。
示例发布者脚本(publisher.php):
示例订阅者脚本(subscriber.php):< ?php require 'vendor/autoload.php'; use Redis; $redis = new Redis(); $redis-> connect('127.0.0.1', 6379); $channel = 'data_sync_channel'; $message = json_encode(['table' => 'users', 'action' => 'update', 'id' => 1]); $redis-> publish($channel, $message); echo "Message published to $channel\n"; ?>
运行订阅者脚本后,发布者发送的消息会被实时接收并处理。< ?php require 'vendor/autoload.php'; use Redis; $redis = new Redis(); $redis-> connect('127.0.0.1', 6379); $channel = 'data_sync_channel'; $redis-> subscribe([$channel], function ($redis, $channel, $message) { $data = json_decode($message, true); // 根据消息内容同步数据(如更新数据库、缓存) echo "Received message: $message\n"; } ); ?>
3. rsync文件同步(网站文件层面同步)
rsync是Linux下高效的文件同步工具,可实现LNMP网站文件(如HTML、CSS、PHP脚本)的多服务器同步。
- 安装rsync:
在所有需要同步的服务器上安装rsync:sudo apt update sudo apt install rsync
- 配置rsync服务端:
编辑rsync配置文件/etc/rsyncd.conf
,添加同步模块:
创建密码文件(仅root可读):[website_data] path = /var/www/html # 需要同步的目录 comment = Website Data read only = no # 允许写入(根据需求设置) auth users = sync_user # 认证用户 secrets file = /etc/rsyncd.secrets # 密码文件路径
启动rsync服务:echo "sync_user:your_password" | sudo tee /etc/rsyncd.secrets sudo chmod 600 /etc/rsyncd.secrets
sudo systemctl start rsync
(默认开机自启)。 - 客户端同步:
在客户端服务器上执行rsync命令,将服务端文件同步到本地:
可结合crontab设置定时任务(如每小时同步一次):rsync -avz --delete sync_user@server_ip::website_data /var/www/html
添加以下内容:crontab -e
通过rsync,可实现多台服务器网站文件的实时或定时同步。0 * * * * rsync -avz --delete sync_user@server_ip::website_data /var/www/html
4. Nginx负载均衡配合数据同步
当使用多台Web服务器时,可通过Nginx负载均衡将请求分发到不同服务器,同时结合上述数据同步方案(如MySQL主从、rsync)确保数据一致性。
- Nginx负载均衡配置:
编辑Nginx配置文件/etc/nginx/sites-available/default
,添加负载均衡规则:
重启Nginx服务:upstream lnmp_cluster { server web_server1_ip:80; server web_server2_ip:80; # 可添加更多服务器 } server { listen 80; server_name your_domain.com; location / { proxy_pass http://lnmp_cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
sudo systemctl restart nginx
。
此时,Nginx会将用户请求分发到web_server1
和web_server2
,配合数据库主从复制和文件同步,实现高可用的数据同步。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: LNMP在Ubuntu上如何实现数据同步
本文地址: https://pptw.com/jishu/719531.html