在LNMP(Linux, Nginx, MySQL, PHP)环境下实现数据同步,通常涉及以下几个方面:
数据库同步:
文件同步:
缓存同步:
配置主服务器:
编辑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
重启MySQL服务:
sudo systemctl restart mysql
创建复制用户: 在主服务器上创建一个用于复制的用户,并授予相应的权限:
CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
获取二进制日志位置: 在主服务器上执行以下命令,获取当前的二进制日志位置:
SHOW MASTER STATUS;
配置从服务器: 编辑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
重启MySQL服务:
sudo systemctl restart mysql
设置主服务器信息: 在从服务器上执行以下命令,设置主服务器的信息:
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;
检查复制状态: 在从服务器上执行以下命令,检查复制状态:
SHOW SLAVE STATUS\G
配置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;
}
}
配置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:
sudo apt-get install rsync
配置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
创建secrets文件:
创建并编辑/etc/rsyncd.secrets文件,添加用户名和密码:
user:password
设置权限:
sudo chmod 600 /etc/rsyncd.secrets
启动rsync服务:
sudo rsync --daemon
同步文件: 在目标服务器上执行以下命令进行同步:
rsync -avz -e ssh user@source_ip::sync_dir /path/to/local/sync_dir
安装inotify-tools:
sudo apt-get install inotify-tools
编写脚本: 编写一个脚本监控文件变化并同步:
#!/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
运行脚本:
nohup ./sync_script.sh &
安装Redis/Memcached:
sudo apt-get install redis-server
# 或者
sudo apt-get install memcached
配置Redis/Memcached: 根据需要配置Redis或Memcached,确保它们在不同服务器之间可以通信。
同步数据: 使用Redis的发布/订阅功能或Memcached的分布式锁机制来同步数据。
通过以上步骤,你可以在LNMP环境下实现数据同步,提高系统的性能和可用性。