温馨提示×

LNMP环境下如何实现数据同步

小樊
50
2025-08-11 02:46:03
栏目: 编程语言

在LNMP(Linux, Nginx, MySQL, PHP)环境下实现数据同步,通常涉及以下几个方面:

  1. 数据库同步

    • 主从复制:配置MySQL的主从复制,将主服务器的数据实时复制到从服务器。主服务器处理写操作,从服务器处理读操作,从而提高性能和可用性。
    • 读写分离:通过配置Nginx或PHP代码,将读请求分发到从服务器,写请求发送到主服务器。
  2. 文件同步

    • rsync:使用rsync工具定期同步文件目录,确保Web服务器上的文件与数据库服务器或其他服务器上的文件保持一致。
    • inotify:利用Linux的inotify机制监控文件变化,实时同步文件。
  3. 缓存同步

    • Redis/Memcached:如果使用Redis或Memcached作为缓存,可以配置它们在不同服务器之间同步数据。

数据库同步

主从复制配置

  1. 配置主服务器: 编辑MySQL配置文件(通常是/etc/my.cnf/etc/mysql/my.cnf),添加以下内容:

    [mysqld]
    server-id = 1
    log_bin = /var/log/mysql/mysql-bin.log
    binlog_do_db = your_database_name
    
  2. 重启MySQL服务

    sudo systemctl restart mysql
    
  3. 创建复制用户: 在主服务器上创建一个用于复制的用户,并授予相应的权限:

    CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
    FLUSH PRIVILEGES;
    
  4. 获取二进制日志位置: 在主服务器上执行以下命令,获取当前的二进制日志位置:

    SHOW MASTER STATUS;
    
  5. 配置从服务器: 编辑MySQL配置文件,添加以下内容:

    [mysqld]
    server-id = 2
    relay_log = /var/log/mysql/mysql-relay-bin.log
    log_bin = /var/log/mysql/mysql-bin.log
    replicate_do_db = your_database_name
    
  6. 重启MySQL服务

    sudo systemctl restart mysql
    
  7. 设置主服务器信息: 在从服务器上执行以下命令,设置主服务器的信息:

    CHANGE MASTER TO
    MASTER_HOST='master_ip',
    MASTER_USER='replicator',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=123;
    START SLAVE;
    
  8. 检查复制状态: 在从服务器上执行以下命令,检查复制状态:

    SHOW SLAVE STATUS\G
    

读写分离

  1. 配置Nginx: 使用Nginx的upstream模块配置读写分离:

    upstream backend {
        server master_ip write;
        server slave_ip read;
    }
    
    server {
        listen 80;
        server_name example.com;
    
        location / {
            proxy_pass http://backend;
        }
    }
    
  2. 配置PHP代码: 在PHP代码中根据操作类型(读或写)选择不同的数据库连接:

    $write_db = new PDO('mysql:host=master_ip;dbname=your_database_name', 'username', 'password');
    $read_db = new PDO('mysql:host=slave_ip;dbname=your_database_name', 'username', 'password');
    
    // 写操作
    $write_db->exec("INSERT INTO table_name (column) VALUES ('value')");
    
    // 读操作
    $stmt = $read_db->query("SELECT * FROM table_name");
    

文件同步

使用rsync

  1. 安装rsync

    sudo apt-get install rsync
    
  2. 配置rsync: 创建一个rsync配置文件(例如/etc/rsyncd.conf),配置同步目录和权限:

    [sync_dir]
    path = /path/to/sync_dir
    comment = Sync Directory
    read only = no
    list = yes
    auth users = user
    secrets file = /etc/rsyncd.secrets
    
  3. 创建secrets文件: 创建并编辑/etc/rsyncd.secrets文件,添加用户名和密码:

    user:password
    
  4. 设置权限

    sudo chmod 600 /etc/rsyncd.secrets
    
  5. 启动rsync服务

    sudo rsync --daemon
    
  6. 同步文件: 在目标服务器上执行以下命令进行同步:

    rsync -avz -e ssh user@source_ip::sync_dir /path/to/local/sync_dir
    

使用inotify

  1. 安装inotify-tools

    sudo apt-get install inotify-tools
    
  2. 编写脚本: 编写一个脚本监控文件变化并同步:

    #!/bin/bash
    inotifywait -m -r -e modify,attrib,close_write,move,create,delete /path/to/source_dir |
    while read path action file; do
        rsync -avz /path/to/source_dir/ user@target_ip:/path/to/target_dir/
    done
    
  3. 运行脚本

    nohup ./sync_script.sh &
    

缓存同步

Redis/Memcached

  1. 安装Redis/Memcached

    sudo apt-get install redis-server
    # 或者
    sudo apt-get install memcached
    
  2. 配置Redis/Memcached: 根据需要配置Redis或Memcached,确保它们在不同服务器之间可以通信。

  3. 同步数据: 使用Redis的发布/订阅功能或Memcached的分布式锁机制来同步数据。

通过以上步骤,你可以在LNMP环境下实现数据同步,提高系统的性能和可用性。

0