一、     背景知识

本文档将会用到以下两个重要的组件:

a)     DRBD

DRBD的全称为:Distributed Replicated Block Device,意为分布式块设备复制, DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群。DRBD是linux的内核的存储层中的一个分布式存储系统,可用使用DRBD在两台Linux服务器之间共享块设备,共享文件系统和数据,类似于网络RAID-1。

b)     HA

HA是High Available缩写,是双机集群系统简称,指高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。当一个节点不可用或者不能处理客户的请求时,该请求会及时转到另外的可用节点来处理,而这些对于客户端是透明的,客户不必关心要使用资源的具体位置,集群系统会自动完成。

二、     详细配置过程

a)     网络规划

本例的配置使用一个网络端口也能完成,只是现在的服务器都配备了多个网口端口,所以这里我们使用两个网口来使用完成最终的配置。这也有利于将DRBD的同步流量与语音流量区分开来,尽可能减少对语音流量的影响,保证通讯稳定正常。只需用跳线将两个服务器上另一对网口连接起来就可以了,这样也能减少由于交换机故障或者断电带来的风险。如下图,具体配置不在本文体现:

b)     系统分区

DRBD配置时,需要用到一块独立的磁盘空间,因此在系统分区的时候必须采用自定义模式,留出一块未用的磁盘空间。建议用以下分区方案,将硬盘分为/boot(200M),swap(内存的同等大小即可),/(100G),其他磁盘空间不分配,如下图结构。

当然,两个服务器的分区必须一模一样。

还有一点需要注意的是,在Linux系统下每个设备都以文件的形式存在,我们需要知道我们的硬盘的名称,以便后续的配置。所以,分区的时候要记录下硬盘的名称,我这里是sda。

c)     创建新分区

正常安装完系统,建议使用SSH工具(putty或者SecureCRT)统一配置两台服务器,这样可以减少因为操作不同步而导致的配置失败。

在两个服务器上运行fdisk命令来创建新分区:

fdisk /dev/sda      #使用fdisk命令,然后采用以下参数创建新分区:
  • add a new partion (n)
  • Primary (p)
  • Partition number (4)
  • Press enter until returned to fdisk command prompt {accepting defaults}
  • Press “t” to change the partition system ID
  • Press “4” to choose partition number
  • Choose HEX 83 for type
  • Press “w” to save changes

执行完输入‘reboot’,重启两台服务器。

重启之后,还是使用fdisk命令,查看下新的分区表的信息。

fdisk /dev/sda

输入p,打印分区表信息。

查看到类似信息后,说明新分区/dev/sda4已经创建好,退出fdisk命令模式。

格式化新分区

mke2fs –j /dev/sda4

dd if=/dev/zero bs=1M count=1 of=/dev/sda4
sync

d)     安装必要软件(只针对Elastix2.4)

  如果服务器能连外网,直接使用yum install ** 安装是最快、最省事的。

net-snmp-utils

查看net-snmp*组件是否安装

rpm –aq net-snmp*

先卸载 net-snmp-libs-5.3.2.2-20.el5

rpm -e net-snmp-5.3.2.2-20.el5

升级 net-snmp-libs

rpm -Uvh net-snmp-libs-5.3.2.2-22.el5_10.1.x86_64.rpm

安装新版本的net-snmp

rpm -ivh net-snmp-5.3.2.2-22.el5_10.1.x86_64.rpm

安装新版本net-snmp-utils

 rpm -ivh net-snmp-utils-5.3.2.2-22.el5_10.1.x86_64.rpm

heartbeat

安装顺序如下图,

错误可以接受,不影响功能

drbd83 and kmod-drbd83

直接安装

e)     配置DRBD

/etc/hosts (两个服务器一致)

添加两台服务器的host

/etc/drbd.conf  (两个服务器一致)

# /usr/share/doc/drbd83/drbd.conf

global { usage-count no; }
resource repdata { #repdata 可以自定义名称
protocol C;
startup { wfc-timeout 10; degr-wfc-timeout 30; }
disk { on-io-error detach; }
net {
after-sb-0pri discard-younger-primary;
after-sb-1pri discard-secondary;
after-sb-2pri call-pri-lost-after-sb;
cram-hmac-alg "sha1";
shared-secret "Yourownpassword"; #Yourownpassword 可以自定义
}
syncer { rate 100M; }
# set the above to 10M – single network card or 100M if using a
# dedicated (second) network card for DRBD
# make sure the name below matches your host name
on SIP1 { #SIP1根据/etc/hosts
device /dev/drbd0;
disk /dev/sda4;
# if using a second network card – make sure that this is the IP
# of the second card on SIP1 Server
address 192.168.1.1:7788; #根据实际情况,SIP1的IP地址
meta-disk internal;
}
# make sure the name below matches your host name
on SIP2 { #SIP2根据/etc/hosts
device /dev/drbd0;
disk /dev/sda4;
address 192.168.1.2:7788; #根据实际情况,SIP2的IP地址
# if using a second network card – make sure that this is the IP
# of the second card on SIP2 server
meta-disk internal;
}
}

配置DRBD

drbdadm create-md repdata        #两个服务器都运行, repdata与/etc/drbd.conf的一致 

service drbd start  #两个服务器都开启drbd

查看两个服务器的drbd状态

此时,你会看到两个服务器现在都处在secondary的状态下。接下来我们需要将主服务器设置为primary。

drbdadm invalidate repdata    #在备用服务器上运行

drbdadm primary repdata   #在主服务器上运行

现在再次在主服务器运行‘cat /proc/drbd’命令,你将会看到主服务器已经处在primary状态了,而且正在处于数据同步状态

在备用服务器上运行‘cat /proc/drbd’命令时,备用服务器处在Secondary状态,也处在数据同步状态

整个同步过程需要一点时间,等到同步结束后,我们可以看到两台服务器都处ds:uptodate/uptodate, 这也表明两台服务器已完全同步。

同步完成后,在主服务器上格式化并挂载/dev/drbd0,输入以下命令:

mkfs.ext3 /dev/drbd0
mkdir /repdata #repdata要与之前的/etc/drbd.conf配置文件中的名称要一致,不建议改动
mount /dev/drbd0 /repdata

并在/repdata目录下生成几个测试文件,用于测试DRBD功能

for i in {1..5};do dd if=/dev/zero of=/repdata/file$i bs=1M count=100;done    #将生成file1 file2 file3 file4 file5这5个文件

接下来,我们要手动把备服务器设置为primary状态,然后在备用服务器上格式化并/dev/drbd0,最后验证在主服务器/repdata中生成的文件是否同步过来。

在主服务器上,输入以下命令把primary状态变成secondary

umount /repdata      #输入这条命令之前,需要退出这个目录。
drbdadm secondary repdata

在备用服务器上,输入以下命令把DRBD状态设置为primary

mkdir /repdata
drbdadm primary repdata
mount /dev/drbd0 /repdata

然后进入/repdata目录,查看文件,将会看到类似画面:

说明主服务生成的文件已经同步过来了。

现在我们在备用服务器上继续做反向的测试,运行以下命令:

rm /repdata/file2       #删除/repdata/目录下的file
dd if=/dev/zero of=/repdata/file6 bs=100M count=2 #在/repdata下新生成一个file6

接着,我们切换回两个服务器的状态。

在备用服务器上,输入以下命令:

umount /repdata/    #输入这条命令之前,记得退出/repdata目录
drbdadm secondary repdata

在主服务器上,输入以下命令:

drbdadm primary repdata
mount /dev/drbd0 /repdata

在主服务器上,进入/repdata目录,并查看文件,将看到类似如下画面:

到此为止,我们已经在两个服务器上设置了DRBD分区,配置了基本功能,并通过了实际测试的验证。

迁移Elastix相关的目录到同步区域

在主服务上通过运行以下命令将相关的文件转移到/repdata(在两个服务器上同步),然后移除旧文件,并设置相应软链接

cd /repdata
tar -zcvf etc-asterisk.tgz /etc/asterisk/
tar -zxvf etc-asterisk.tgz
tar -zcvf var-lib-asterisk.tgz /var/lib/asterisk/
tar -zxvf var-lib-asterisk.tgz
tar -zcvf usr-lib-asterisk.tgz /usr/lib/asterisk/
tar -zxvf usr-lib-asterisk.tgz
tar -zcvf var-www.tgz /var/www/
tar -zxvf var-www.tgz
tar -zcvf var-spool-asterisk.tgz /var/spool/asterisk/
tar -zxvf var-spool-asterisk.tgz
tar -zcvf var-lib-mysql.tgz /var/lib/mysql/
tar -zxvf var-lib-mysql.tgz
tar -zcvf var-log-asterisk.tgz /var/log/asterisk/
tar -zxvf var-log-asterisk.tgz
tar -zcvf tftpboot.tgz /tftpboot/
tar -zxvf tftpboot.tgz
rm -rf /etc/asterisk/
rm -rf /var/lib/asterisk/
rm -rf /usr/lib/asterisk/
rm -rf /var/spool/asterisk/
rm -rf /var/lib/mysql/
rm -rf /var/log/asterisk/
rm -rf /tftpboot/
rm -rf /var/www
ln -s /repdata/etc/asterisk/ /etc/asterisk
ln -s /repdata/var/lib/asterisk/ /var/lib/asterisk
ln -s /repdata/usr/lib/asterisk/ /usr/lib/asterisk
ln -s /repdata/var/spool/asterisk/ /var/spool/asterisk
ln -s /repdata/var/lib/mysql/ /var/lib/mysql
ln -s /repdata/var/log/asterisk/ /var/log/asterisk
ln -s /repdata/var/www /var/www
ln -s /repdata/tftpboot /tftpboot

在主服务器上运行以下命令关掉相关服务

service mysqld stop
service asterisk stop
service httpd stop
service elastix-portknock stop
service elastix-updaterd stop

如果看到有个服务类似..port-knock的处于fail状态,那是正常的。

接下来,我们将手动切换两个服务器的DRBD状态,然后在备用服务器上删除旧文件,并建立相关软链接。

在主服务器上

umount /repdata   #注意先退出/repdata目录
drbdadm secondary repdata

在备用服务器上

drbdadm primary repdata
mount /dev/drbd0 /repdata

在备用服务器上,你现在可以看到/repdata的文件已经同步过来了。所以现在我们运行以下命令来,移除旧文件和生成软链接:

rm -rf /etc/asterisk/
rm -rf /var/lib/asterisk/
rm -rf /usr/lib/asterisk/
rm -rf /var/spool/asterisk/
rm -rf /var/lib/mysql/
rm -rf /var/log/asterisk/
rm -rf /var/www/
rm -rf /tftpboot/
ln -s /repdata/etc/asterisk/ /etc/asterisk
ln -s /repdata/var/lib/asterisk/ /var/lib/asterisk
ln -s /repdata/usr/lib/asterisk/ /usr/lib/asterisk
ln -s /repdata/var/spool/asterisk/ /var/spool/asterisk
ln -s /repdata/var/lib/mysql/ /var/lib/mysql
ln -s /repdata/var/log/asterisk/ /var/log/asterisk
ln -s /repdata/var/www /var/www
ln -s /repdata/tftpboot /tftpboot

并关掉相关服务

service mysqld stop
service asterisk stop
service httpd stop
service elastix-portknock stop
service elastix-updaterd stop

所有这一切搞定后,我们切换回正常的DRBD状态,即主服务器为primary,备用服务器为secondary

在备用服务器上:

umount /repdata
drbdadm secondary repdata

在主服务器上:

drbdadm primary repdata
mount /dev/drbd0 /repdata

配置heartbeat

heartbeat会监控两个节点,并通过运行一些脚本让一些服务恢复工作状态。我们要做的是,在两台服务器上把一些服务禁用掉,让他们在系统启动时不自动启动,而是让heartbeat通过识别哪个服务器是primary来管理这些服务是否启动。

1.关闭服务

在两台服务器上运行以下命令:

chkconfig asterisk off
chkconfig mysqld off
chkconfig httpd off
chkconfig elastix-portknock off
chkconfig elastix-updaterd off
service mysqld stop
service asterisk stop
service httpd stop
service elastix-portknock stop
service elastix-updaterd stop

可能回收到一些fail,那是因为有些服务在前面的操作中已经关闭了,只要确认这些服务都是关闭状态就可以了。

2. /etc/ha.d/ha.cf

两个服务器上编辑一样的内容,如下

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
bcast eth0
auto_failback on
node SIP1
node SIP2

3. /etc/ha.d/authkeys

两个服务器上编辑一样的内容,如下

auth 1
1 sha1 Yourownpassword

修改文件权限

chmod 600 /etc/ha.d/authkeys

4. /etc/ha.d/haresources

SIP1 drbddisk::repdata Filesystem::/dev/drbd0::/repdata::ext3 IPaddr::10.16.20.2/24/eth0:0 mysqld asterisk httpd elastix-portknock elastix-updaterd  #注意,必须写在一行

主服务器上

service heartbeat start

备用服务器上

service heartbeat start

最后重启两台服务器,整个配置就完成了。

三、     有用的命令

下面几个命令可以查看DRBD的同步状态和当前角色,基本上记住一个就够了。

cat /proc/drbd

Run on either node – provides a detailed status of your DRBD replication and current role

drbd-overview

Run on either node – provides a very quick to read status of your DRBD replication and current role

/etc/init.d/drbd status

Run on either node – provides a very quick to read status of your DRBD replication connection state,current role and includes mount directory

drbdadm cstate repdata

Run on either node – reports back the resource (repdata) connection state

Elastix 2.4 双服务器热备搭建文档的更多相关文章

  1. ArcSDE Redhat Linux下双机热备部署文档

    http://www.gisall.com/html/47/122747-3867.html ArcSDE系统环境: 操作系统:Red Hat Enterprise Linux AS/ES 5.5 ( ...

  2. Nginx系列篇四:Nginx+keepalived搭建一个高可用的双机双主热备

    建议:先阅读Nginx+keepalived主从配置,因为此篇是接着上篇开始的 上一篇我们简单的介绍了主从配置及其缺点,我们看一下双主热备配置: 2台Nginx+keepalived互为主备,各自绑定 ...

  3. Mysql双主热备+LVS+Keepalived高可用操作记录

    MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...

  4. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变

    [Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...

  5. MySQL双主热备问题处理

    1. Slave_IO_Running: No mysql> show slave status\G *************************** 1. row *********** ...

  6. mysql双主热备

    先搭建mysql主从模式,主从请参考mysql 主从笔记 然后在在配置文件里添加如下配置 1 log_slave_updates= #双主热备的关键参数.默认情况下从节点从主节点中同步过来的修改事件是 ...

  7. 使用Keepalived实现Nginx的自动重启及双主热备高可用

    1.概述 之前我们使用Keepalived实现了Nginx服务的双机主备高可用,但是有几个问题没有解决,今天一起探讨一下. 1)在双机主备机制中,Keepalived服务如果宕了,会自动启用备机进行服 ...

  8. Mysql + keepalived 实现双主热备读写分离【转】

    Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论   架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...

  9. Mysql双主热备+LVS+Keepalived高可用部署实施手册

    MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...

随机推荐

  1. grep用法详解:grep与正则表达式

    首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串.vim.grep.awk .sed 都支 ...

  2. Android 二次打包(封装)AAR实用指南

    前言 上次文章Android SDK开发与使用的那些事儿说到如何在aar里集成导入的aar,也就是二次封装aar的问题,一带而过,难免不过瘾.在封装这条路上也遇到了不少坑,现在将此方法详细记录下来. ...

  3. Fragment 重叠 遮盖问题

    1.导致Fragment 重叠 和遮盖的原因 主要还是因为Fragment的状态保存机制,当系统内存不足时,Fragment的主Activity被回收,Fragment的实例并没有随之被回收. Act ...

  4. gitlab一次代码回滚引起的bug...

    问题描述:线上问题有一个bug,挺严重的.在线下排查后发现是一个之前的同事添加的代码影响的,为了不影响之前的业务,代码回滚了. 但是 过了几天,测人人员测试之后说这个问题又复现了,然后再次看,发现还是 ...

  5. laravel model relationship

    laravel支持多种模型之间的relation,对应着模型间的one2one, one2many,many2many,hasManyThrough,Polymorphic, many2many po ...

  6. Excel开发之旅(三)——添加侧边工具栏

    1. 添加自定义用户控件:选择项目添加新建项用户控件.修改文件名,点击添加即可. 2. 重复步骤1,再添加3个自定义控件,接下来我们在自定义用户控件上面添加一些工具箱组件 3. 由于我们添加的是侧边工 ...

  7. 沉淀再出发:使用python进行机器学习

    沉淀再出发:使用python进行机器学习 一.前言 使用python进行学习运算和机器学习是非常方便的,因为其中有很多的库函数可以使用,同样的python自身语言的特点也非常利于程序的编写和使用. 二 ...

  8. zbrush书法文字硬边雕刻

    方法的重点在与边缘环的操作以及模型网格的数量. 1.通过ZAppLink功能可以把制作的文字书法映射到模型上去. 2.遮罩,按照颜色强度遮罩. 3.分组,按照颜色分组.单独显示文字部分的分组.按Ctr ...

  9. 超强windows10稳定Nginx绿色环境,可无限自定义PHP和mysql版本、同时运行N个版本

    转载自互联网, 小编发现最近PHPWAMP集成环境的作者Lccee,又更新了phpwamp8.8.8.8n版本 phpwamp8.8.8.8n一共集成了12个PHP版本和3个mysql版本,并且可以高 ...

  10. linux下Python3的安装

    linux平台下,需要gcc和openssl-devel的依赖包,所以没有的话需要先安装: yum -y install gcc*   yum -y install openssl-devel 然后将 ...