• drbd



    介绍:

      Distributed Replicated Block Device(DRBD)是基于块设备在不同的高可用服务器对之间同步和镜像数据的软件,通过它可以实现在网络中的两台服务器之间基于块设备级别的实时或异步镜像或同步复制,其实就类似于rsync+inotify这样的架构项目软件。只不过drbd是基于文件系统底层的,即block层级同步,而rsync+inotify是在文件系统之上的实际物理文件的同步,因此,drdb的效率更高,效果更好

      提示:上面提到的块设备可以是磁盘分区、LVM逻辑卷、整块磁盘等

     DRBD部署:

    环境:

    Master:
        OS:Centos6.5
        IP:
            eth0:172.16.50.199    #服务器管理IP
            eth1:10.0.0.1   
        Hostname:drbd-master
     
    Backup:
        OS:Centos6.5
        IP:
            eth0:172.16.50.193   #服务器管理IP
            eth1:10.0.0.2
            Hostname:drbd-backup
     
    hosts:
        echo "10.0.0.1 drbd-master" >> /etc/hosts
        echo "10.0.0.2 drbd-backup" >> /etc/hosts
    
    #准备工作
    [root@drbd-master /]# /etc/init.d/iptables stop #关闭防火墙
    [root@drbd-master /]# setenforce 0 #关闭selinx
    [root@drbd-master /]# ntpdate time.windows.com #时间同步
    

      

    安装软件

    #加一块硬盘,master 512M,backup 1G
    
    #master分区
    [root@drbd-master ~]# fdisk /dev/sdb
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First cylinder (1-512, default 1): 
    Using default value 1
    Last cylinder, +cylinders or +size{K,M,G} (1-512, default 512): +384
    
    Command (m for help): p
    
    Disk /dev/sdb: 536 MB, 536870912 bytes
    64 heads, 32 sectors/track, 512 cylinders
    Units = cylinders of 2048 * 512 = 1048576 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x99e8115a
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1         385      394224   83  Linux
    
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 2
    First cylinder (386-512, default 386): 
    Using default value 386
    Last cylinder, +cylinders or +size{K,M,G} (386-512, default 512): 
    Using default value 512
    
    Command (m for help): w
    The partition table has been altered!
    第一个分区384,第二个剩下的全部,格式化第一个分区,第二个不要动
    
    [root@drbd-master ~]# partprobe 
    [root@drbd-master ~]# mkfs.ext4 /dev/sdb1  #格式化
    [root@drbd-master ~]# tune2fs -c -1 /dev/sdb1 
    
    #backup分区
    [root@drbd-backup ~]# fdisk /dev/sdb 
    #跟上面差不多,第一个分区784,第二个剩下的全部,格式化第一个分区,第二个不要动
    
    #安装
    #编译安装
    [root@drbd-master ~]# wget http://www.drbd.org/download/drbd/8.4/archive/drbd-8.4.4.tar.gz
    [root@drbd-master ~]# tar zxf drbd-8.4.4.tar.gz 
    [root@drbd-master ~]# cd drbd-8.4.4
    [root@drbd-master drbd-8.4.4]# ./configure --prefix=/usr/local/drbd8.4.4 --with-km --with-heartbeat --sysconfdir=/etc//drbd
    
    #--with-km 开启内核模块 Enable kernel module
    #--with-heartbeat 开启heartbeat Enable Heartbeat integration
    #--sysconfdir 指定配置文件路径
    
    [root@drbd-master drbd-8.4.4]# make KDIR=/usr/src/kernels/2.6.32-696.18.7.el6.x86_64/
    [root@drbd-master drbd-8.4.4]# make install
    
    
    #报错解决
    
    1.configure: error: Cannot build utils without flex, either install flex or pass the --without-utils option.
    解决方法:yum -y install flex
    
    2.make: *** [check-kdir] Error 1
    #看看/usr/src/kernel有没有,有的话就用,没有就yum -y install kernel-devel kernel-headers
    #以上步骤两个都要做
    

      

      

    相关配置列表说明

    主机名称                         drbd-master                            drbd-backup
    管理IP                          172.16.50.199                          172.16.50.193
    DRBD管理名称                     data                                   data
    DRBD挂载目录                     /data                                  /data
    DRBD逻辑设备                     /dev/drbd0                             /dev/drbd0
    DRBD对接IP                      eth1:10.0.0.1                           eth1:10.0.0.2
    DRBD存储设备                     /dev/sdb1                              /dev/sdb1
    DRBD Meta设备                    /dev/sdb2[0]                          /dev/sdb2[0]
    NFS导出目录                      /data                                  /data
    

      

    配置drbd加载到内核模块

    [root@drbd-master drbd-8.4.4]# modprobe drbd
    
    [root@drbd-master ~]# depmod
    说明:在编译并准备好一个Linux内核加载模块后,modprobe前必须先执行命令depmod,此命令会生成新的modules.dep。
    
    [root@drbd-master drbd-8.4.4]# lsmod |grep drbd
    drbd                  327018  0 
    libcrc32c               1246  1 drbd
    
    #报错解决
    
    FATAL: Module drbd not found.
    
    原因:这是因为系统默认的内核并不支持此模块,所以需要更新内核
    更新内核的方法:
    
    #解决办法
    yum -y install kernel kernel-devel kernel-headers
    然后重启
    

      

      

    配置文件参数讲解及实际配置

    #刚才我们已经指定了配置文件地址
    
    [root@drbd-master drbd-8.4.4]# ls /etc/drbd/
    bash_completion.d  drbd.conf  drbd.d  ha.d  rc.d  udev  xen
    
    [root@drbd-master drbd]# cat drbd.conf 
    global {
    	usage-count no;      #全局配置,允不允许官方统计你的安装
    }
    
    common {
    	syncer {
    		rate 100M;       #同步速度
    		verify-alg crc32c;  #验证方法      
    	}
    }
    
    #primary for drbd1
    resource data {            
    	protocol C;       #确保两个数据的一个协议,C
    	
    	disk {
    		on-io-error detach;      #磁盘出现io错误的处理
    	}
    	on drbd-master {              #机器名字
    		device /dev/drbd0;       #drbd设备
    		disk /dev/sdb1;             #对应分区,刚才我们新建的db1
    		address 10.0.0.1:7788;   #地址、端口
    		meta-disk /dev/sdb2[0];  #数据分区
    	}
    	on drbd-backup {
    		device /dev/drbd0;
    		disk /dev/sdb1;
    		address 10.0.0.2:7788;
    		meta-disk /dev/sdb2[0];
    	}
    }
    #两个都要做
    

      

      

    主从同步配置

    1.初始化
    [root@drbd-master drbd]# drbdadm create-md data
    Writing meta data...
    initializing activity log
    NOT initializing bitmap
    New drbd meta data block successfully created.
    #成功
    
    2.启动服务
    [root@drbd-master drbd]# mkdir -p /usr/local/drbd8.4.4/var/run/drbd
    [root@drbd-master drbd]# drbdadm up data  #配置的数据名,drbd.conf里
    [root@drbd-master /]# cat /proc/drbd 
    version: 8.4.4 (api:1/proto:86-101)
    GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@drbd-master, 2018-01-18 12:41:57
     0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
        ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:262128
    #两边都是Secondary/Secondary即可,表示两端都是从,处于无主(primary)的状态
    
    
    #报错解决
    [root@drbd-master drbd]# drbdadm up data
    0: Failure: (119) No valid meta-data signature found.
    
    	==> Use 'drbdadm create-md res' to initialize meta-data area. <==
    
    Command 'drbdsetup attach 0 /dev/sdb1 /dev/sdb2 0 --on-io-error=detach --resync-rate=100M' terminated with exit code 10
    
    #可能会出现这个问题,有可能是前面分区没有更新,所以删掉分区重新分区,重启即可
    
    #同步DRBD数据到对端server,使数据保持一致
    指定一个要同步的资源,同步到数据对端
    [root@drbd-master /]# drbdadm -- --overwrite-data-of-peer primary data  #--overwrite-data-of-peer 覆盖对端数据,本地作为主,
    root@drbd-master data]# cat /proc/drbd 
    version: 8.4.4 (api:1/proto:86-101)
    GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@drbd-master, 2018-01-18 12:41:57
     0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
        ns:262143 nr:0 dw:15 dr:263141 al:2 bm:16 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
    #master端已经变成主(Primary)
    
    
    #注意事项:1.如果为空硬盘,可以随便执行操作不需要考虑数据
                      2.如果两边数据不一样,就一定要注意同步数据的方向
                      3.一个资源只能在一端执行同步数据到对端的命令
    
    
    #挂载测试数据库
    #master
    [root@drbd-master /]# mkdir /data
    [root@drbd-master drbd]# mount /dev/drbd0 /data/
    [root@drbd-master /]# cd /data/
    [root@drbd-master data]# touch  `seq 10`
    [root@drbd-master data]# ls
    1  10  2  3  4  5  6  7  8  9  lost+found
    
    #backup
    [root@drbd-backup ~]# mount /dev/drbd0 /data/
    mount: you must specify the filesystem type
    #这里backup不让挂载,因为drbd在挂载它,所以备节点无法使用
    [root@drbd-backup data]# drbdadm down data
    [root@drbd-backup data]# mount /dev/sdb1 /data/
    

      


  • 相关阅读:
    Python学习笔记013_正则表达式
    Python学习笔记012_网络_异常
    Python学习笔记011_模块_标准库_第三方库的安装
    Python学习笔记010_迭代器_生成器
    PHP extract() 函数
    php 获取客户端IP
    php array_walk
    PHP array_map()
    PHP call_user_func
    类的更新----MVC设计模式
  • 原文地址:https://www.cnblogs.com/wazy/p/8297684.html
Copyright © 2020-2023  润新知