在CentOS上使用LNMP(Linux, Nginx, MySQL, PHP)堆棧時,實現數據同步通常涉及以下幾個方面:
以下是一些常見的方法來實現這些同步:
rsync是一個非常強大的文件同步工具,可以在本地或遠程服務器之間同步文件。
# 安裝rsync
sudo yum install rsync
# 同步文件
rsync -avz /path/to/source/ user@remote_host:/path/to/destination/
你可以將這個命令添加到cron作業中,定期執行。
GlusterFS和Ceph是分布式文件系統,可以在多臺服務器之間共享和同步文件。
# 安裝GlusterFS
sudo yum install glusterfs-server glusterfs-fuse
# 啟動GlusterFS服務
sudo systemctl start glusterd.service
# 創建卷
sudo gluster volume create myvol transport tcp server1:/gluster/brick1 server2:/gluster/brick2 force
# 啟動卷
sudo gluster volume start myvol
MySQL和MariaDB支持主從復制,可以實現讀寫分離和數據備份。
配置主服務器:
編輯/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 mysqld
創建一個用于復制的用戶:
CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
查看主服務器的狀態:
SHOW MASTER STATUS;
記錄File和Position的值。
配置從服務器:
編輯/etc/my.cnf或/etc/mysql/my.cnf文件,添加以下內容:
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = your_database_name
read_only = 1
重啟MySQL服務:
sudo systemctl restart mysqld
配置從服務器連接到主服務器:
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;
Galera Cluster是一個多主復制解決方案,可以實現實時數據同步。
安裝Galera Cluster:
sudo yum install galera-4 galera-40 galera-api-40
配置MySQL:
編輯/etc/my.cnf或/etc/mysql/my.cnf文件,添加以下內容:
[mysqld]
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://server1,server2,server3
wsrep_node_address=server1
wsrep_node_name=server1
wsrep_sst_method=xtrabackup-v2
重啟MySQL服務:
sudo systemctl restart mysqld
根據你的具體需求和服務器架構,可以選擇適合的同步方法。對于文件同步,rsync是一個簡單有效的工具;對于數據庫同步,主從復制和Galera Cluster都是不錯的選擇。確保在生產環境中進行充分的測試,以避免數據丟失或不一致。