在Linux环境下,有几种主流的高可用数据同步方案可供选择:
DRBD (Distributed Replicated Block Device)
GlusterFS
Ceph
Rsync + Lsyncd
# Ubuntu/Debian
sudo apt-get install drbd8-utils
# CentOS/RHEL
sudo yum install drbd kmod-drbd
编辑/etc/drbd.d/global_common.conf
:
global {
usage-count no;
}
common {
protocol C;
handlers {
pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
}
}
创建资源配置文件/etc/drbd.d/r0.res
:
resource r0 {
device /dev/drbd0;
disk /dev/sdb1;
meta-disk internal;
on node1 {
address 192.168.1.100:7788;
}
on node2 {
address 192.168.1.101:7788;
}
}
# 在两个节点上执行
sudo drbdadm create-md r0
sudo drbdadm up r0
# 在主节点(node1)上执行
sudo drbdadm primary --force r0
# 查看同步状态
sudo drbdadm status r0
# Ubuntu/Debian
sudo apt-get install glusterfs-server
# CentOS/RHEL
sudo yum install glusterfs-server
sudo systemctl start glusterd
sudo systemctl enable glusterd
# 在节点1上执行
sudo gluster peer probe node2
# 验证对等状态
sudo gluster peer status
sudo gluster volume create gv0 replica 2 node1:/data/brick1/gv0 node2:/data/brick1/gv0
sudo gluster volume start gv0
sudo mount -t glusterfs node1:/gv0 /mnt/glusterfs
sudo apt-get install rsync lsyncd # Debian/Ubuntu
sudo yum install rsync lsyncd # CentOS/RHEL
ssh-keygen -t rsa
ssh-copy-id user@remote-server
编辑/etc/lsyncd.conf
:
settings {
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd-status.log",
statusInterval = 20
}
sync {
default.rsync,
source = "/data/",
target = "user@remote-server:/backup/",
rsync = {
archive = true,
compress = true,
verbose = true,
rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"
}
}
sudo systemctl start lsyncd
sudo systemctl enable lsyncd
# CentOS/RHEL
sudo yum install pacemaker corosync pcs
# Ubuntu/Debian
sudo apt-get install pacemaker corosync cluster-glue
编辑/etc/corosync/corosync.conf
:
totem {
version: 2
cluster_name: mycluster
transport: udpu
interface {
ringnumber: 0
bindnetaddr: 192.168.1.0
mcastport: 5405
ttl: 1
}
}
quorum {
provider: corosync_votequorum
two_node: 1
}
nodelist {
node {
ring0_addr: node1
nodeid: 1
}
node {
ring0_addr: node2
nodeid: 2
}
}
logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: yes
}
sudo systemctl start corosync
sudo systemctl start pacemaker
sudo pcs resource create drbd0 ocf:linbit:drbd drbd_resource=r0 op monitor interval=60s
sudo pcs resource master ms-drbd0 drbd0 master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
监控同步状态
cat /proc/drbd
或 drbd-overview
gluster volume status
/var/log/lsyncd.log
常见问题处理
定期测试故障转移
DRBD适合:
GlusterFS/Ceph适合:
Rsync+Lsyncd适合:
根据您的具体业务需求、性能要求和预算,选择最适合的高可用数据同步方案。