一、sersync(873端口)实时同步(单向同步)


需要注意:纯粹的使用rsync做单向同步时,rsync的守护进程是运行在文件推送服务器上,而接收的服务器是运行rsync客户端。使用sersync做文件实时同步刚好相反,用于接收文件的服务器运行rsync守护进程。

rhel下文件的同步:sersync实时同步和drbd双向同步_drbdadm


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>
        <localpath watch="/opt/tongbu">                    //把服务器该目录同步
            <remote ip="192.168.0.197" name="rsync"/>      //此处必须和同步模块设置一致
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
    ...


./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,向drbdsetupdrbdmeta发送指令,

       drbdsetup:配置装载进kernelDRBD模块,平时很少直接用

       drbdmeta:管理META数据结构,平时很少直接用。

   在DRBD中,资源是特指某复制的存储设备的所有方面。包括资源名称、DRBD设备(/dev/drbdm,这里m是设备最小号,最大号可到147)、磁盘配置(使本地数据可以为DRBD所用)、网络配置(与对方通信)

   每个资源有个角色,是PrimarySecondary,下面简称“主”和“备”

主角色的DRBD设备可以不受限制的读和写,比如创建和映射文件系统、对于块设备的raw或直接IO访问。

   备角色的DRBD设备接受来自对方的所有修改,但是不能被应用程序读写,甚至只读也不行。

角色可以改变。



drbd2.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/         //生成有8rpm

rhel下文件的同步:sersync实时同步和drbd双向同步_sersync实时同步_02

rpm -ivh drbd-*                  //全安装

安装完后:

modprobe -l         //查看内核模块,出现updates/drbd.ko则成功,否则执行depmod-a加入drbd模块

rhel下文件的同步:sersync实时同步和drbd双向同步_sersync实时同步_03

scp drbd-* root@192.168.1.11:~       //将八个包copy到主机B上并安装


------接下来在两台主机AB分别做如下操作---

创建新分区:        

添加新的磁盘

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

rhel下文件的同步:sersync实时同步和drbd双向同步_linux文件同步_04


数据同步结束后创建文件系统(格式化):

mkfs.ext4 /dev/drbd1

rhel下文件的同步:sersync实时同步和drbd双向同步_drbd_05


挂载文件系统:

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扩大255PE

然后在primary主机上扩建drbd

drbdadm resize example

在扩建EXT4文件系统:

resize2fs /dev/drbd1

现在df -h查看已经扩大