一、sersync(873端口)实时同步(单向同步)
需要注意:纯粹的使用rsync做单向同步时,rsync的守护进程是运行在文件推送服务器上,而接收的服务器是运行rsync客户端。使用sersync做文件实时同步刚好相反,用于接收文件的服务器运行rsync守护进程。
sersync主要用于服务器同步,web镜像等功能。基于boost1.43.0,inotify api,rsync command.开
发。目前使用的比较多的同步解决方案是inotify-tools+rsync ,另外一个是google开源项目
Openduckbill(依赖于inotify- tools),这两个都是基于脚本语言编写的。相比较上面两个项目,
本项目优点是:
● sersync是使用c++编写,而且对linux系统文 件系统产生的临时文件和重复的文件操作进
行过滤(详细见附录,这个过滤脚本程序没有实现),所以在结合rsync同步的时候,节
省了运行时耗和网络资源。 因此更快。
●相比较上面两个项目,sersync配置起来很简单,其中bin目录下 已经有基本上静态编译的
2进制文件,配合bin目录下的xml配置文件直接使用即可。
●另外本项目相比较其他脚本开源项目,使用多线程进行同步,尤其在同步较大文件时,能
够保证多个服务器实时保持同步状 态。
●本项目有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则 每
10个小时对同步失败的文件重新同步。
●本项目自带crontab功能,只需在 xml配置文件中开启,即可按您的要求,隔一段时间整体
同步一次。无需再额外配置crontab功能。
●本项目socket与http插件扩展,满足您二次开发的需要。
1对1同步:
目标主机(将服务器上的filesystem同步到本主机)
yum install xinetd rsync -y
vi /etc/xinetd.d/rsync service rsync { disable = no //修改为no,打开 flags = IPv6 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID }
vi /etc/rsyncd.conf uid=root gid=root max connections=36000 use chroot=no log file=/var/log/rsyncd.log pid file=/var/run/rsyncd.pid lock file=/var/run/rsyncd.lock [rsync] //同步模块,可以随意,但一定要和主服务器confxml.xml文件中 // remote行后的name中设置的一致 path=/opt/rsync //指定将服务器的同步内容存放的目录 comment = test files ignore errors = yes read only = no hosts allow = 192.168.1.140 //指定主服务器ip,可以是一个网段 hosts deny = *
启动rsync服务(即开启873端口),可以使用xinetd控制rsync服务如下:
/etc/init.d/xinetd start
也可以直接使用命令:
rsync --daemon 启动rsync服务
在主服务器上:
yum install rsync
tar zxf sersync2.5_64bit_binary_stable_final.tar.gz
cd GNU-Linux-x86/
vi confxml.xml ...//把服务器该目录同步 ...//此处必须和同步模块设置一致
./sersync -o confxml.xml -r -d //-o指定文件,默认为confxml.xml,
// -d 在主服务器上开启sersync守护进程,使sersync在后台运行,开启实时同步
// -r 在开启实时监控的之前对主服务器目录与远程目标机目录进行一次整体同步
1对多:
1对多主机同目录时,只需在新加目标主机上做与上个目标主机一样配置,服务器上只需在confxml.xml中添加一remote行即可。
1对多目标主机,多目录时:
服务器(GNU-Linux-x86目录中建多个confxml.xml,指定多个需要同步的目录):
cp confxml.xml confxmln.xml //配置和1对1同步一致
./sersync2 -o confxmln.xml -r -d
目标主机:/etc/rsyncd.conf中添加多个[],指定目标主机上被同步的目录
vi /etc/rsyncd.conf uid=root gid=root max connections=36000 use chroot=no log file=/var/log/rsyncd.log pid file=/var/run/rsyncd.pid lock file=/var/run/rsyncd.lock [rsync] path=/opt/rsync comment=test rsync ignore errors=yes read only=no hosts allow=192.168.1.140 hosts deny=* [rsync2] path=/opt/rsync2 comment=test rsync ignore errors=yes read only=no hosts allow=192.168.1.140 hosts deny=*
注意iptables和selinux
二、DRBD实现双向同步
http://www.drbd.org
Distributed Replicated BlockDevice(DRBD)是一个用软件实现的、无共享的、服务器之间镜像快设备内容的存储复制解决方案。
数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)
DRBD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。
DRBD的位置处于文件系统以下,比文件系统更加靠近操作系统内核及IO栈。
工具:
drbdadm:高级管理工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta发送指令,
drbdsetup:配置装载进kernel的DRBD模块,平时很少直接用
drbdmeta:管理META数据结构,平时很少直接用。
在DRBD中,资源是特指某复制的存储设备的所有方面。包括资源名称、DRBD设备(/dev/drbdm,这里m是设备最小号,最大号可到147)、磁盘配置(使本地数据可以为DRBD所用)、网络配置(与对方通信)
每个资源有个角色,是Primary或Secondary,下面简称“主”和“备”
主角色的DRBD设备可以不受限制的读和写,比如创建和映射文件系统、对于块设备的raw或直接IO访问。
备角色的DRBD设备接受来自对方的所有修改,但是不能被应用程序读写,甚至只读也不行。
角色可以改变。
drbd(2.6.33即以后版本集成有)处于文件系统下层,最好使用lvm磁盘(可以扩容)
文件系统 EXT4 ——resize2fs
|
drbd ——drbdadm resize
|
lvs ——lvextend 同步的两台主机均得执行lvextend,且大小一致
|
block
必须先从底层扩大,即先扩大lvs
DRBD配置使用过程如下:
A主机:
tar zxf drbd-8.4.3.tar.gz
cd drbd-8.4.3
./configure --enable-spec --with-km //编译成.spec,加入内核模块;执行后根据提示安装相应包 yum install rpm-build libxslt git cp drbd-8.4.3.tar.gz /root/rpmbuild/SOURCES/ rpmbuild -bb drbd-8.4.3/drbd.spec //编译生成drbd 的rpm包 yum install kernel-devel rpmbuild -bb drbd-km.spec //编译生成drbd内核模块
cd rpmbuild/RPMS/x86_64/ //生成有8个rpm包
rpm -ivh drbd-* //全安装
安装完后:
modprobe -l //查看内核模块,出现updates/drbd.ko则成功,否则执行depmod-a加入drbd模块
scp drbd-* [email protected]:~ //将八个包copy到主机B上并安装
------接下来在两台主机A、B分别做如下操作---
创建新分区:
添加新的磁盘
fdisk -cu /dev/vdb pvcreate /dev/vdb1 vgcreate drbdvg /dev/vdb1 lvcreate -l 256 -n drbdlv drbdvg
cat /etc/drbd.conf //需要在/etc/drbd.d/下建立.res文件
两主机均得编辑/etc/drbd.d/drbd.res,内容如下:
resource example { //resource后的example可以自己随便定义 meta-disk internal; device /dev/drbd1; //为同步时,两主机使用的分区名 syncer { verify-alg sha1; } net { allow-two-primaries; } on demo { //on后边为hostname disk /dev/drbd-group/drbd-demo; //指定新建分区路径 address 192.168.0.250:7789; } on remote { //on后为hostname disk /dev/drbd-group/drbd-demo; address 192.168.0.251:7789; } }
drbdadm create-md example
/etc/init.d/drbd start
----------配置完--------------
查看同步设备状态
cat /dev/drbd
将 ty1.org 设置为primary 节点,并同步数据:(在ty1.org 主机执行以下命令)
drbdsetup /dev/drbd1 primary --force
在两台主机上查看同步状态:
watch cat /proc/drbd
数据同步结束后创建文件系统(格式化):
mkfs.ext4 /dev/drbd1
挂载文件系统:
mount /dev/drbd1 /var/www/html
存放数据:
cp -r /etc/* /var/www/html
卸载文件系统:
umount /dev/drbd1
将 ty1.org 设置为secondary 节点:
drbdadm secondary example
将 ty2.org 设置为primary 节点:(在ty2.org 主机执行一下命令)
drbdadm primary example
挂载文件系统,查看数据是否同步:
mount /dev/drbd1 /var/www/html
注意:两台主机上的/dev/drbd1不能同时挂载,只有状态为primary 时,才能被挂载使
用,而此时另一方的状态为secondary。
-----------扩容--------------
同步磁盘扩容(只有lvm才能扩容):
两个主机均得先扩大lvs
lvextend -l +255 /dev/drbdvg/demo //-l指定PE个数,+255扩大255歌PE
然后在primary主机上扩建drbd:
drbdadm resize example
在扩建EXT4文件系统:
resize2fs /dev/drbd1
现在df -h查看已经扩大