溫馨提示×

LNMP在Ubuntu上如何實現數據同步

小樊
49
2025-09-29 07:07:19
欄目: 智能運維

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,配合數據庫主從復制和文件同步,實現高可用的數據同步。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女