作者: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/haresourcesservera 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.cfdebugfile /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:80service 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:181: 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:Primarydisk:UpToDatepeer role:Secondaryreplication: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:181: 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 10732859392Found xfs filesystem10481664 kB data area apparently used10481308 kB left usable by current configurationDevice 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 /walletroot       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状态会变为WFConnectionservera上执行:
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 PATHmode=$1 # start or stop
Wallet_HOME=/wallet/wallet/bincase "$mode" in'start')# Start daemonecho $echo_n "Starting wallet"nohup $Wallet_HOME/AreaServer > /dev/null &sleep 3nohup $Wallet_HOME/MediaServer > /dev/null &sleep 3nohup $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 AreaServerTSPpid=`ps -ef|grep /bin/AreaServer|grep -v grep|grep -v tail|awk '{print $2}'`if [ $TSPpid ]; thenkill -9 $TSPpid;fisleep 3#Start MediaServerTSPpid=`ps -ef|grep /bin/MediaServer|grep -v grep|grep -v tail|awk '{print $2}'`if [ $TSPpid ]; thenkill -9 $TSPpid;fisleep 3#Start StreamServerTSPpid=`ps -ef|grep /bin/StreamServer|grep -v grep|grep -v tail|awk '{print $2}'`if [ $TSPpid ]; thenkill -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 AreaServerTSPpid=`ps -ef|grep /bin/AreaServer|grep -v grep|grep -v tail|awk '{print $2}'`if [ $TSPpid ]; thenkill -9 $TSPpid;nohup $Wallet_HOME/AreaServer > /dev/null &elsenohup $Wallet_HOME/AreaServer > /dev/null &fisleep 3#Start MediaServerTSPpid=`ps -ef|grep /bin/MediaServer|grep -v grep|grep -v tail|awk '{print $2}'`if [ $TSPpid ]; thenkill -9 $TSPpid;nohup $Wallet_HOME/MediaServer > /dev/null &elsenohup $Wallet_HOME/MediaServer > /dev/null &fisleep 3#Start StreamServerTSPpid=`ps -ef|grep /bin/StreamServer|grep -v grep|grep -v tail|awk '{print $2}'`if [ $TSPpid ]; thenkill -9 $TSPpid;nohup $Wallet_HOME/StreamServer > /dev/null &elsenohup $Wallet_HOME/StreamServer > /dev/null &fi
;;esacexit 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)

centos双机热备相关推荐

  1. CENTOS利用Keepalived构建双主MySQL+双机热备

    之前的博文介绍了如何配置MYSQL双主互备. 见http://showerlee.blog.51cto.com/2047005/1187693 这里介绍如何配合前者实现Keepalived双机热备 系 ...

  2. Linux7双机,Centos 7 keepalived双机热备

    Centos 7 keepalived双机热备 操作环境: keepalived热备份(双机热备) Centos 7系统ip地址: 192.168.80.100 --主服务器 Centos 7系统ip ...

  3. centos MySQL 双机_CentOS利用Keepalived构建双主MySQL+双机热备

    之前的文章介绍了如何配置MysqL双主互备,见http://www.linuxidc.com/Linux/2013-05/83784.htm 这里介绍如何配合前者实现Keepalived双机热备 系统 ...

  4. Keepalived - Keepalived 实现 tomcat双机热备

    文章目录 Pre 环境信息 官网 原理 keepalived 安装 137 安装 keepalived 138 安装 keepalived 配置keepalived的配置文件/etc/keepaliv ...

  5. mysql主备数据库配置文档_MySQL数据库配置主从服务器实现双机热备实例教程

    网站:bbs.osyunwei.com 程序在:Web服务器192.168.21.129上面 数据库在:MySQL服务器192.168.21.169上面 实现目的:增加一台MySQL备份服务器(192 ...

  6. Nginx+Keeplived双机热备(主从模式)

    Nginx+Keeplived双机热备(主从模式) 参考资料: http://www.cnblogs.com/kevingrace/p/6138185.html 双机高可用一般是通过虚拟IP(漂移IP ...

  7. NFS双机热备探究实验

    NFS双机热备探究实验 一.实验背景: 公司只有一台NFS服务器,上面存有一些编译工具,通用脚本等,现在该机器比较老旧,出现故障时恢复困难,存在单点故障不说,还会造成线上服务的不稳定,现急需对该服务器 ...

  8. Nginx 反向代理、负载均衡、页面缓存、URL重写、读写分离及简单双机热备详解...

    大纲 一.前言 二.环境准备 三.安装与配置Nginx  (windows下nginx安装.配置与使用) 四.Nginx之反向代理 五.Nginx之负载均衡  (负载均衡算法:nginx负载算法 up ...

  9. centos7双机搭建_Centos7 Mysql 双机热备实现数据库高可用

    mysql双主热备,也称主主互备,目的是mysql数据库高可用,只支持双机,原因是mysql的复制是一主多从,但一个从服务器只能有一个主服务器. 双机热备的条件是双机mysql版本必须一致. 服务器分 ...

最新文章

  1. GetCurSel总结
  2. 阿里云linux CentOS6.5(nginx+PHP-fpm)及RDS初级使用指南和简单安全设置
  3. 地址里面写转某快递会转吗_到付邮费骗局还在继续,合肥某公司中招!商标申请人要警惕!...
  4. mac node oracle,将Python3.5(Mac OS X El Capitan)连接到Oracle集群(远程)
  5. 用 或 || 取代常规 if - else 结构
  6. Android Instant Apps教程
  7. linux rtl8111/8168网卡驱动下载,Debian Linux 编译 Realtek (RTL8111/RTL8168) 网卡驱动
  8. 软件观念革命:交互设计精髓_专业科班答案:一个标准的交互设计流程是怎样的?...
  9. 华南理工大学 电力电子技术(王兆安) 期末复习笔记3 第五章第六章第七章
  10. PDF破解FileOpenPlugin加密的方法
  11. (技术类)中标麒麟linux终端命令操作之小白不知道的点(1)
  12. cordic ip核 vivado_Xilinx Vivado CORDIC IP核求解atan 反正切
  13. POC原型开发:巡店
  14. java 输入一个时间,获取当前周的周一以及周五时间【自然周】
  15. 和python有关的转换音素的网址
  16. Java生成Excel文件并响应给页面
  17. 单位dbm db的关系与区别
  18. 一起看 I/O | Flutter 3 更新详解
  19. 未来的计算机事业作文600字,模块计算机考试的感想
  20. 『goodman1999』SD2.0大会:达内创始人韩少云:创业就像买股票

热门文章

  1. linux posix支持中文,如何在Linux中使用POSIX方法从文件中读取Unicode-16字符串?
  2. csp2017-12
  3. EL表达式和thymeleaf
  4. MES生产调度任务模型
  5. 一次LoadRunner的CPC考试经历
  6. 国产COS与红旗Linux的博弈将继续
  7. python爬虫经典段子_Python爬虫实战之爬取糗事百科段子
  8. jQuery-显示农历日期,如腊月初八
  9. 无线网络的一些基础概念
  10. UML建模-面向对象设计