首页主机资讯LNMP在Ubuntu上如何实现数据同步

LNMP在Ubuntu上如何实现数据同步

时间2025-10-04 04:07:03发布访客分类主机资讯浏览736
导读: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,添加以下参数:
    server-id = 1                # 主服务器唯一ID(从服务器需不同)
    log_bin = /var/log/mysql/mysql-bin.log  # 开启二进制日志
    binlog_do_db = your_database_name  # 指定同步的数据库(可选,避免同步无用库)
    
    重启MySQL服务:sudo systemctl restart mysql
    创建复制用户并授权:
    CREATE USER 'replicator'@'%' IDENTIFIED BY 'your_password';
        
    GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
        
    FLUSH PRIVILEGES;
        
    
    获取主服务器二进制日志状态(记录FilePosition值,后续从服务器需要):
    SHOW MASTER STATUS;
        
    
  • 从服务器配置
    编辑从服务器MySQL配置文件,添加:
    server-id = 2                # 从服务器唯一ID
    relay_log = /var/log/mysql/mysql-relay-bin.log  # 开启中继日志
    read_only = 1                # 设置为只读(可选,增强安全性)
    
    重启MySQL服务: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_RunningSlave_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):
    <
        ?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";
        
    ?>
          
    
    示例订阅者脚本(subscriber.php):
    <
        ?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,添加同步模块:
    [website_data]
    path = /var/www/html         # 需要同步的目录
    comment = Website Data
    read only = no               # 允许写入(根据需求设置)
    auth users = sync_user       # 认证用户
    secrets file = /etc/rsyncd.secrets  # 密码文件路径
    
    创建密码文件(仅root可读):
    echo "sync_user:your_password" | sudo tee /etc/rsyncd.secrets
    sudo chmod 600 /etc/rsyncd.secrets
    
    启动rsync服务:sudo systemctl start rsync(默认开机自启)。
  • 客户端同步
    在客户端服务器上执行rsync命令,将服务端文件同步到本地:
    rsync -avz --delete sync_user@server_ip::website_data /var/www/html
    
    可结合crontab设置定时任务(如每小时同步一次):
    crontab -e
    
    添加以下内容:
    0 * * * * rsync -avz --delete sync_user@server_ip::website_data /var/www/html
    
    通过rsync,可实现多台服务器网站文件的实时或定时同步。

4. Nginx负载均衡配合数据同步

当使用多台Web服务器时,可通过Nginx负载均衡将请求分发到不同服务器,同时结合上述数据同步方案(如MySQL主从、rsync)确保数据一致性。

  • Nginx负载均衡配置
    编辑Nginx配置文件/etc/nginx/sites-available/default,添加负载均衡规则:
    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;
    
        }
    
    }
        
    
    重启Nginx服务:sudo systemctl restart nginx
    此时,Nginx会将用户请求分发到web_server1web_server2,配合数据库主从复制和文件同步,实现高可用的数据同步。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: LNMP在Ubuntu上如何实现数据同步
本文地址: https://pptw.com/jishu/719531.html
Ubuntu LNMP中MySQL如何调优 Debian清理后如何更新系统

游客 回复需填写必要信息