centos双机热备

作者:Gowcage,创作不易,转载请注明出处(https://blog.csdn.net/gowcage/article/details/131223229)

其中借鉴了许多前辈们的文章资料,也查阅了官方文档手册,加上自己多次部署调试最终汇聚成了这篇文章,主要是记录同时也帮助需要的同学

CentOS双机热备


实现效果:当其中主机挂掉后,备机会升级为主机,两台机指定盘的数据实时同步,且客户端连接的是固定虚拟IP,所以客户端基本无感(可能会掉线一下但马上又上线)

一、环境搭建

----------------
环境:虚拟机VMWare
系统:centos7.x_64
内存:2G
硬盘:30G
heartbeat:3.0.6
DRBD:
----------------

准备两台虚拟机作为主备服务器,servera & serverb,配置相同,规划好ip和分区

分区规划:
  • /root 10G
  • swap 4G
  • /home 5G
  • /wallet 10G
IP规划:
  • servera:192.168.108.132
  • serverb:192.168.108.133
  • vip:192.168.108.199

(以下操作如无特殊说明两台服务器都要执行)

设置hostname

分别设为servera,serverb  
hostnamectl set-hostname servera  
查看hostname:hostnamectl  
或
uname -n

两台服务器相互间防火墙允许或直接关闭防火墙

关闭防火墙:
setenforce 0
sed -i.bak "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config
或者编辑/etc/selinux/config 将SELINUX=enforcing改为SELINUX=disabled
systemctl disable firewalld.service
systemctl stop firewalld.service
iptables --flush

设置/etc/hosts

追加  
192.168.108.132 servera  
192.168.108.133 serverb

设置ssh互信

ssh-keygen -t rsa   #生成公钥一直回车即可
ssh-copy-id -i  .ssh/id_rsa.pub root@serverb
# 会要求你输入serverb的root密码
# 测试:
ssh root@serverb
如果直接连上不用输入密码则为成功

时间同步

安装ntp
首次同步:ntpdate cn.pool.ntp.org
添加定期任务同步时间:
crontab -e
执行完上面指令会用默认编辑器(vi)打开一个任务清单,添加下面指令
0 */2 * * * ntpdate cn.pool.ntp.org   ###每隔2小时

二、heartbeat 安装 & 配置

安装:
1. 下载源码包

http://www.linux-ha.org/wiki/Downloads
Heartbeat 3.0.6
Cluster Glue 1.0.12
Resource Agents 3.9.6

2. 配置基础依赖

yum install -y bzip2 autoconf automake libtool glib2-devel libxml2-devel bzip2-devel libtool-ltdl-devel asciidoc libuuid-devel

3. 安装编译
# 安装Cluster Glue
tar  -jxvf  0a7add1d9996.tar.bz2
cd Reusable-Cluster-Components-glue–0a7add1d9996/
groupadd haclient
useradd -g haclient hacluster
./autogen.sh
./configure --prefix=/usr/local/heartbeat/
make && make install
# 安装Resource Agents
tar -zxf resource-agents-3.9.6.tar.gz
cd resource-agents-3.9.6/
./autogen.sh
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
./configure --prefix=/usr/local/heartbeat/
ln -s /usr/local/heartbeat/lib/* /lib/ # 将生成的动态库 添加快捷方式到/lib下 
ln -s /usr/local/heartbeat/lib/* /lib64/  # 在make过程中需要在lib下找到Cluster Glue的so文件
make && make install
# 安装Heartbeat
tar -jxf 958e11be8686.tar.bz2
cd Heartbeat-3-0-958e11be8686
./bootstrap
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
./configure --prefix=/usr/local/heartbeat/
vi /usr/local/heartbeat/include/heartbeat/glue_config.h
 /*define HA_HBCONF_DIR “/usr/local/heartbeat/etc/ha.d/”*/ #把最后这一行用/**/注释掉    未注释的错误信息/usr/local/heartbeat/include/heartbeat/glue_config.h:105:0: error: "HA_HBCONF_DIR" redefined [-Werror]
make && make install
建立软链接:

ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/
ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/
配置(如无特殊说明,主备机配置一致):

总共有三个文件需要配置:
ha.cf 监控配置文件
haresources 资源管理文件
authkeys 心跳线连接加密文件

# cd到heartbeat目录下执行:
cp doc/{ha.cf,haresources,authkeys} /usr/local/heartbeat/etc/ha.d/
# 拷贝三个模版配置文件到 /usr/local/heartbeat/etc/ha.d 目录下 
1. 配置authkeys
nano /usr/local/heartbeat/etc/ha.d/authkeys

# 该文件表示发送心跳时 机器用于验证的key的hash算法,节点之间必须配置成一致的密码

auth 3
#1 crc
#2 sha1 HI!
3 md5 wallet95!

# auth 3,表示使用id为3的验证算法和密码,3为md5加密,密码为wallet95!

# 更改权限为600
chmod 600 authkeys
2. 配置haresources
nano /usr/local/heartbeat/etc/ha.d/haresources

servera IPaddr::192.168.108.199/24/ens33
# 如果要配合drbd使用后面还要跟上drbd相关的配置(后面还会讲到)
drbddisk::wallet Filesystem::/dev/drbd1::/wallet::ext4 wallet
3. 配置ha.cf
nano /usr/local/heartbeat/etc/ha.d/ha.cf

debugfile /var/log/ha-debug  #表示调试的日志文件 一般测试建议开启
logfile /var/log/ha-log  #表示系统的的日志文件路径
logfacility     local0  #表示使用系统日志与上面只能开启一个
keepalive 2  #主备之间的心跳间隔时间单位:s
deadtime 30  #表示如果连接对方30s还无法连接,表示节点死亡需要考虑vip转移
warntime 10  #表示10s时间未收到心跳时发出警告日志
initdead 60  #有时机器启动后需要一段时间网卡才能正常工作 需要预留一定的时间后,再开始判断心跳检测,60s内连不上都是正常的,60s后再去启动资源
udpport 694  #多播的udp端口
#baud   19200  #串行端口的波特率
#serial /dev/ttyS0      # Linux  #串口的接口名
#serial /dev/cuaa0      # FreeBSD
#serial /dev/cuad0      # FreeBSD 6.x
#serial /dev/cua/a      # Solaris
#bcast  eth0            # Linux #传播心跳的广播网卡信息
#bcast  eth1 eth2       # Linux
#bcast  le0             # Solaris
#bcast  le1 le2         # Solaris
#mcast eth0 225.0.0.1 694 1 0  #多播传送心跳的网卡 多播组 端口 跃点数 是否回环内传送
ucast ens33 192.168.108.132 #设置单播心跳,设置对方的ip地址,此处使用单播
auto_failback on  #表示如果主机停止后,从机接管,设置为on时当主机从新启动后,主机立即接管vip,为off时从机不会释放vip给主机
node    servera  #配置主从的节点信息,要与uname -n保持一致
node    serverb
#############################################
#使用ping模式 有时当主机挂掉或者heartbeat挂掉后vip才会转移  有时出现某个进程挂掉 切换需要使用脚本 
#ping模式用于测试 如果网卡ping不同 某个主机 就认为当前断网 需要转移vip 
#respawn root     /usr/local/heartbeat/libexec/heartbeat/ipfail 表示当ping不通时 自动调用 ipfail这个脚本
#apiauth ipfail gid=haclient uid=hacluster 表示有权限操作ipfail脚本的组和用户
############################################
#ping 10.248.6.63
#ping组的所有主机
#ping_group group1 10.10.10.254 10.10.10.253
#respawn userid /path/name/to/run
#指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的ping node来检测网络连接。如果你的系统是64bit,请注意该文件的路径。
#respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail
#apiauth ipfail gid=haclient uid=hacluster
测试:
# 安装httpd服务器
yum install -y httpd
systemctl start httpd

# 替换默认index.html
cd /usr/share/httpd/noindex/
mv index.html index.html.bak
vim index.html  #为主备服务器添加不同的文字以作区分

e.g.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">	
</head>
<body>
<div>this is master server</div>
</body>
</html>

# 然后通过vip访问index.html查看文本,关掉heartbeat服务,看是否会切换到另一台服务器

#使用heartbeat自带脚本将当前节点切换为备节点
/usr/local/heartbeat/share/heartbeat/hb_standby

#heartbeat的日志在/var/log/目录下
ha-log
ha-debug
# 实时查看日志:
tail -f -n 50 /var/log/ha-log

三、DRBD 安装 & 配置

安装:
1. 安装iptables
yum install iptables-services

# 
iptables -h #查询帮助 
iptables -L -n #列出(filter表)所有规则 
iptables -L -n --line-number #列出(filter表)所有规则,带编号 
iptables -L -n -t nat #列出(nat表)所有规则
iptables -F #清除(filter表)中所有规则 
iptables -F -t nat #清除(nat表)中所有规则 
service iptables save #保存配置(保存配置后必须重启iptables) 
systemctl restart iptables.service #重启

# 根据双机ip情况进行源地址转换(主要来解决广播udp 地址)
# 添加以下规则,可复制到脚本执行(后面的ip为服务器ip)
iptables -t nat -A PREROUTING -d 192.168.108.199 -p udp --dport 2160 -j DNAT --to-destination 192.168.108.132:2160
iptables -t nat -A PREROUTING -d 192.168.108.199 -p tcp --dport 2160 -j DNAT --to-destination 192.168.108.132:2160
iptables -t nat -A PREROUTING -d 192.168.108.199 -p udp --dport 2162 -j DNAT --to-destination 192.168.108.132:2162
iptables -t nat -A PREROUTING -d 192.168.108.199 -p tcp --dport 2162 -j DNAT --to-destination 192.168.108.132:2162
iptables -t nat -A PREROUTING -d 192.168.108.199 -p udp --dport 2166 -j DNAT --to-destination 192.168.108.132:2166
iptables -t nat -A PREROUTING -d 192.168.108.199 -p tcp --dport 2166 -j DNAT --to-destination 192.168.108.132:2166
iptables -t nat -A PREROUTING -d 192.168.108.199 -p tcp --dport 80 -j DNAT --to-destination 192.168.108.132:80
iptables -t nat -A PREROUTING -d 192.168.108.199 -p udp --dport 80 -j DNAT --to-destination 192.168.108.132:80

service iptables save #保存配置(保存配置后必须重启iptables) 
systemctl restart iptables.service #重启

2. 安装DRBD
# centos7安装方式,注意此处有版本区分
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -ivh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum install -y drbd84-utils kmod-drbd84
systemctl enable drbd

# 加载模块
[root@servera home]# modprobe drbd
# 查看模块是否已加上
[root@servera home]# lsmod | grep drbd
drbd                  397041  0 
libcrc32c              12644  4 xfs,drbd,nf_nat,nf_conntrack
配置(如无特殊说明,主备机配置一致):
1. drbd.conf
cat /etc/drbd.conf 
---
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example 
include "drbd.d/global_common.conf"; 
include "drbd.d/*.res";
2. global_common.conf
# 编辑前先备份一份
cp /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf.bak
vim /etc/drbd.d/global_common.conf
---
global {
        usage-count no;  #是否参加DRBD使用统计,默认为yes。官方统计drbd的装机量,改为no

        # Decide what kind of udev symlinks you want for "implicit" volumes
        # (those without explicit volume <vnr> {} block, implied vnr=0):
        # /dev/drbd/by-resource/<resource>/<vnr>   (explicit volumes)
        # /dev/drbd/by-resource/<resource>         (default for implict)
        udev-always-use-vnr; # treat implicit the same as explicit volumes

        # minor-count dialog-refresh disable-ip-verification
        # cmd-timeout-short 5; cmd-timeout-medium 121; cmd-timeout-long 600;
}

common {
        protocol C;  #使用DRBD的同步协议
        handlers {
                # These are EXAMPLE handlers only.
                # They may have severe implications,
                # like hard resetting the node under certain circumstances.
                # Be careful when choosing your poison.

                 pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; e$
                 pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; e$
                 local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /p$
                # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
                # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
                # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
                # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
                # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
                # quorum-lost "/usr/lib/drbd/notify-quorum-lost.sh root";
        }

        startup {
                wfc-timeout 240; 
                degr-wfc-timeout 240;
                outdated-wfc-timeout 240;
                wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
        }

        options {
                # cpu-mask on-no-data-accessible

                # RECOMMENDED for three or more storage nodes with DRBD 9:
                # quorum majority;
                # on-no-quorum suspend-io | io-error;
        }

        disk {
                on-io-error detach;  #配置I/O错误处理策略为分离
                # size on-io-error fencing disk-barrier disk-flushes
                # disk-drain md-flushes resync-rate resync-after al-extents
                # c-plan-ahead c-delay-target c-fill-target c-max-rate
                # c-min-rate disk-timeout
        }
        net {
                # cram-hmac-alg md5;
                # shared-secret "testdrbd";
                # protocol timeout max-epoch-size max-buffers
                # connect-int ping-int sndbuf-size rcvbuf-size ko-count
                # allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
                # after-sb-1pri after-sb-2pri always-asbp rr-conflict
                # ping-timeout data-integrity-alg tcp-cork on-congestion
                # congestion-fill congestion-extents csums-alg verify-alg
                # use-rle
        }
        syncer {
                rate 100M;  #设置主备节点同步时的网络速率
        }
}
3. 创建wallet.res
vi /etc/drbd.d/wallet.res
resource wallet{
        on servera{
                device /dev/drbd1;
                disk /dev/mapper/centos-wallet;
                address 192.168.108.132:7788;
                meta-disk internal;
        }
        on serverb{
                device /dev/drbd1;
                disk /dev/mapper/centos-wallet;
                address 192.168.108.133:7788;
                meta-disk internal;
        }
}
4. 创建DRBD设备并激活wallet资源
# 创建设备
mknod /dev/drbd1 b 147 0
# 创建资源元数据
drbdadm create-md wallet

# 启动服务
service drbd start
# 查看状态
cat /proc/drbd
-----
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2020-04-05 02:58:18

 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:10481308 nr:0 dw:163916 dr:10484517 al:47 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

# 由上面两台主机的DRBD状态查看结果里的ro:Secondary/Secondary表示两台主机的状态 都是备机状态,
# ds是磁盘状态,显示的状态内容为“不一致”,这是因为DRBD无法判断哪一方为主机,
# 应以哪一方的磁盘数据作为标准。

[root@servera ~]# drbdsetup /dev/drbd1 primary --force

#将wallet资源升级为主
drbdadm primary wallet

# 重启后fdisk -l 或 lsblk 查看发现多了个/dev/drbd1分区,先格式化:
mkfs.ext4 /dev/drbd1
# 然后挂载到/wallet下
mount /dev/drbd1 /wallet

# 查看同步状态
[root@servera wallet]# drbdadm status
wallet role:Primary
  disk:UpToDate
  peer role:Secondary
    replication:Established peer-disk:UpToDate
    
[root@servera wallet]# cat /proc/drbd 
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2020-04-05 02:58:18

 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:10481308 nr:0 dw:163916 dr:10484517 al:47 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
    
# ro在主从服务器上分别显示 Primary/Secondary和Secondary/Primary
# ds显示UpToDate/UpToDate 表示主从配置成功

ro:local/peer
ds:local/peer

创建过程中的问题&解决

# 问题解决参考:https://www.cnblogs.com/gdlhz888/p/7098545.html

期间碰到两个问题:

问题1:

[root@servera drbd.d]# drbdadm create-md wallet
open(/dev/mapper/centos-wallet) failed: Device or resource busy
Exclusive open failed. Do it anyways?
[need to type 'yes' to confirm] yes
# Output might be stale, since minor 1 is attached
Device '1' is configured!
Command 'drbdmeta 1 v08 /dev/mapper/centos-wallet internal create-md 1' terminated with exit code 20

解决办法:umount /dev/mapper/centos-wallet

问题2:

[root@servera drbd.d]# drbdadm create-md wallet
md_offset 10733219840
al_offset 10733187072
bm_offset 10732859392

Found xfs filesystem
    10481664 kB data area apparently used
    10481308 kB left usable by current configuration

Device size would be truncated, which
would corrupt data and result in
'access beyond end of device' errors.
You need to either
   * use external meta data (recommended)
   * shrink that filesystem first
   * zero out the device (destroy the filesystem)
Operation refused.

Command 'drbdmeta 1 v08 /dev/mapper/centos-wallet internal create-md' terminated with exit code 40

解决办法:dd if=/dev/zero of=/dev/mapper/centos-wallet bs=1M count=100

问题3:
创建和激活执行完后,重启系统还会导致进入紧急模式,因为创建过程中将/dev/mapper/centos-wallet分区卸载并创建为drbd设备了

解决办法:删除/etc/fstab中 /dev/mapper/centos-wallet这一行(和创建激活步骤中同名的分区)
然后重启 systemctl reboot

测试:
# 上一步挂载好后可以在/wallet下建一些测试文件、目录
# 然后卸载/wallet
[root@servera /]# umount /wallet
# 将servera降为从
[root@servera /]# drbdadm secondary wallet
# 将serverb升为主
[root@serverb /]# drbdadm primary wallet
# 然后挂载drbd1
[root@serverb /]# mount /dev/drbd1 /wallet
# 最后查看serverb下wallet中的文件、目录是否同步。

# 这里卸载遇到个问题:umount: /wallet:目标忙。
# 解决:
[root@servera /]# fuser -mv /wallet
                     用户     进程号 权限   命令
/wallet:             root     kernel mount /wallet
                     root       2201 ..c.. bash
[root@servera /]# kill -9 2201
[root@servera /]# fuser -mv /wallet
                     用户     进程号 权限   命令
/wallet:             root     kernel mount /wallet
[root@servera /]# umount /wallet

特别注意: Secondary节点上不允许对DRBD设备进行任何操作,包括只读,所有的读写操作只能在 Primary节点上进行。
只有当Primary节点挂掉时,Secondary节点才能提升为Primary节点

DRBD常用命令
查看状态
cat /proc/drbd # 高版本已弃用
drbdadm status

角色:primary(主机) secondary(丛机)
手动启用资源
drbdadm up <resource>
手动禁用资源
drbdadm down <resource>
升级资源
drbdadm primary <resource>
降级资源
drbdadm secondary <resource>

放弃本地数据,请求连接主机,同步全部资源
drbdadm --discard-my-data connect all

此时在查看drbd状态会变为WFConnection

servera上执行:
drbdadm connect all

在双机上都查看状态,均连接成功

DRBD状态
角色状态(RO):

Primary主:资源目前为主,并且可能正在被读取或者写入。若不是双主模式被激活,这种角色只可能出现在两节点中的一个上。

Secondary次:资源目前为次。正常接收对等节点的更新(除非运行在断开模式下才不是),但是它既不能被读取也不能被写入。这种角色只能是两节点中的一个。

Unknown未知:资源角色目前未知。本地资源不会出现这种状态,只有对等节点在断开模式下才会出现在这种情况。

##################################################

连接状态(CS):

StandAlone独立的:网络配置不可用。资源还没有被连接或者是被管理断开(使用drbdadm disconnect命令),或者是由于出现认证失败或者是裂脑的情况。

WFConnection.等待和对等节点建立网络连接。

Connected连接:Drbd已经建立连接,数据镜像现在可用,节点处于正常状态。

SyncSource:以本节点为同步源的同步正在进行。

SyncTarget:以本节点为同步目标的同步正在进行。

VerifyS:以本地节点为验证源的线上设备验证正在执行。

VerifyT:以本地节点为目标源的线上设备验证正在执行。

##################################################

磁盘状态(DS):

UpToDate:一致的最新的数据状态,这个状态是正常的状态。

Inconsistent:数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态。

DUnknown:当对等节点网络连接不可用时出现这种状态。

Diskless无盘:本地没有块设备分配给DRBD使用,这就意味着没有可用的后背设备,或者使用drbdadm 命令手工分离或者是底层的I/O错误导致自动分离。

##################################################

绩效指标 - /proc/drbd 第3行

NS(network send 网络发送):net数据以kibyte通过网络连接发送到对等节点

NR(network receive 网络接收):通过网络连接以kibyte接收net数据

DW(disk write 磁盘写入):net数据以kibyte写入本地磁盘

DR(disk read 磁盘读取):net数据以kibyte读取本地磁盘数据

AL(activity log 活动日志):活动日志区的元数据更新

BM(bit map 位图):位图区元数据更新

LO(local count 本地计数):DRBD请求的开放本地I/O子系统的数量

PE(pengding 待定):发送到对等节点但是尚未节点对方回答的请求的数目

UA(unacknowledged 未确认):通过网络连接接收到对等节点的请求,但是尚未得到回复

AP(alllication pending应用程序挂起):数据块I/O请求转发到DRBD,但是DRBD尚未回答

EP(epochs):一定数量的epoch对象,通常为1,使用阻碍或者是没有排序写的方法时可能增加I/O负载。

WO(write order 写入顺序)目前使用的写入顺序的方法:b(barrier障碍)、f(flush 刷新)、d(drain 漏)或者是n(none无)

OOS(out of sync):以kububyte同步当前存储

四、heartbeat和drbd搭配使用

# 另外,为避免误操作,当机器重启后,默认都处于Secondary状态,如要使用drbd设备,
# 需手动把其设置为Primary。
# 当然,我们这里不需要操心,因为我们用heartbeat来自动设置primary和secondary

#主备机配置一致
# /usr/local/heartbeat/etc/ha.d/haresources配置
nano /usr/local/heartbeat/etc/ha.d/haresources
servera IPaddr::192.168.108.199/24/ens33 drbddisk::wallet Filesystem::/dev/drbd1::/wallet::ext4 wallet

# servera 主机名,要和uname -n一致
# drbddisk::wallet
# wallet为资源组名字,要对应上哦 
# 注解: 
# IPaddr::192.168.1.100/24/eth0:用IPaddr脚本配置浮动VIP,eth为实际使用网卡名
# drbddisk::wallet:用drbddisk脚本实现DRBD主从节点资源组的挂载和卸载 
# Filesystem::/dev/drbd1::/wallet::ext4:用Filesystem脚本实现磁盘挂载和卸载
# wallet启动/停止的脚本

cp /etc/ha.d/resource.d/drbddisk /usr/local/heartbeat/etc/ha.d/resource.d/
编写wallet脚本,随着heartbeat启动,heartbeat会自动运行haresources中配置的脚本
#!/bin/sh
# Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
# This file is public domain and comes with NO WARRANTY of any kind

# wallet daemon start/stop script.

PATH="/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin"
export PATH

mode=$1 # start or stop
Wallet_HOME=/wallet/wallet/bin

case "$mode" in
    'start')
    # Start daemon

    echo $echo_n "Starting wallet"
    nohup $Wallet_HOME/AreaServer > /dev/null &
     sleep 3
    nohup $Wallet_HOME/MediaServer > /dev/null &
    sleep 3
    nohup $Wallet_HOME/StreamServer > /dev/null &
    ;;

    'stop')
    # Stop daemon. We use a signal here to avoid having to know the
    # root password.

    echo $echo_n "Stop wallt"
        #Start AreaServer
        TSPpid=`ps -ef|grep /bin/AreaServer|grep -v grep|grep -v tail|awk '{print $2}'`
        if [ $TSPpid ]; then
            kill -9 $TSPpid;
        fi
        sleep 3

        #Start MediaServer
        TSPpid=`ps -ef|grep /bin/MediaServer|grep -v grep|grep -v tail|awk '{print $2}'`
        if [ $TSPpid ]; then
            kill -9 $TSPpid;
        fi
        sleep 3

        #Start StreamServer
        TSPpid=`ps -ef|grep /bin/StreamServer|grep -v grep|grep -v tail|awk '{print $2}'`
        if [ $TSPpid ]; then
            kill -9 $TSPpid;
        fi
;;

'restart')
# Stop the service and regardless of whether it was
# running or not, start it again.
echo $echo_n "Stop wallet"
    #Start AreaServer
    TSPpid=`ps -ef|grep /bin/AreaServer|grep -v grep|grep -v tail|awk '{print $2}'`
    if [ $TSPpid ]; then
        kill -9 $TSPpid;nohup $Wallet_HOME/AreaServer > /dev/null &
    else
        nohup $Wallet_HOME/AreaServer > /dev/null &
    fi
    sleep 3

    #Start MediaServer
    TSPpid=`ps -ef|grep /bin/MediaServer|grep -v grep|grep -v tail|awk '{print $2}'`
    if [ $TSPpid ]; then
        kill -9 $TSPpid;nohup $Wallet_HOME/MediaServer > /dev/null &
    else
        nohup $Wallet_HOME/MediaServer > /dev/null &
    fi
    sleep 3

    #Start StreamServer
    TSPpid=`ps -ef|grep /bin/StreamServer|grep -v grep|grep -v tail|awk '{print $2}'`
    if [ $TSPpid ]; then
        kill -9 $TSPpid;nohup $Wallet_HOME/StreamServer > /dev/null &
    else
        nohup $Wallet_HOME/StreamServer > /dev/null &
    fi
;;

esac

exit 0

五、脑裂问题 & 解决办法

1. 双方都为StandAlone,且都为primary
当双方都为StandAlone状态时,且都为primary,将数据正常的一方作为主节点,此处假设servera上数据正常,servera为主:
serverb上执行:
umount /wallet
drbdadm secondary wallet
drbdadm --discard-my-data connect all

作者:Gowcage,创作不易,转载请注明出处(https://blog.csdn.net/gowcage/article/details/131223229)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gowcage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值