在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環境下實現數據同步,提高系統的性能和可用性。