0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用DRBD和keepalived实现文件实时同步和双机热备

马哥Linux运维 ? 来源:博客园蒲公英PGY ? 2025-03-03 17:20 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

DRBD + keepalived实现文件实时同步和双机热备

安装DRBD

系统初始化设置

注意: 需要有数据盘或者多的分区


yum update -y

关闭防火墙


systemctl stop firewalld
systemctl disable firewalld

修改host文件


vim /etc/hosts
192.168.1.240 Primary kylin-01
192.168.1.241 Secondary kylin-02

关闭SELINUX


vim /etc/sysconfig/selinux
SELINUX=disabled

安装依赖


yum install gcc libxslt-devel libxslt perl keyutils-libs-devel net-tools -y

下载源码编译安装

drbd需要两个安装报:drbd drbd-utils

drbd 安装


wget https://pkg.linbit.com//downloads/drbd/9/drbd-9.2.8.tar.gz
tar -zxvf drbd-9.2.8.tar.gz
cd drbd-9.2.8
make && make install

drbd-utils 安装


wget https://pkg.linbit.com//downloads/drbd/utils/drbd-utils-9.27.0.tar.gz
tar -zxvf drbd-utils-9.27.0.tar.gz
cd drbd-utils-9.27.0
./configure --prefix=/usr/local/drbd --without-83support --with-udev --with-initscripttype=systemd --without-manual
make && make install

安装配置路径:/usr/local/drbd/etc/drbd.d 安装路径: /usr/sbin/drbdsetup /usr/sbin/drbdmeta /usr/sbin/drbdadm

配置drbd

磁盘分区 此处不要格式化磁盘 fdisk /dev/sdb

全局配置

global_common.conf内容如下:


# DRBD is the result of over a decade of development by LINBIT.
# In case you need professional services for DRBD or have
# feature requests visit http://www.linbit.com
global {
usage-count yes;
# Decide what kind of udev symlinks you want for "implicit" volumes
# (those without explicit volume {} block, implied vnr=0):
# /dev/drbd/by-resource// (explicit volumes)
# /dev/drbd/by-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 {
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.
# IMPORTANT: most of the following scripts symlink to "notify.sh" which tries to send mail via "mail".
# If you intend to use this notify.sh script make sure that "mail" is installed.
#
pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
# 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";
# disconnected /bin/true;
}
startup {
# 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 {
# 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
}
}

资源配置

在node1、node2 上分别建立drbd.res: drbd.d目录下新建资源文件(drbd.res) vim /usr/local/drbd/etc/drbd.d/drbd.res


resource r1 { #这个r1是定义资源的名字
protocol C;
on kylin-01 { #on开头,后面是主机名称
device /dev/drbd0; #drbd设备名称
disk /dev/sdb1; #drbd0使用的磁盘分区为sdb1
address 192.168.1.240:7789; #设置drbd监听地址与端口
meta-disk internal;
}
on kylin-02 { #on开头,后面是主机名称
device /dev/drbd0; #drbd设备名称
disk /dev/sdb1; #drbd0使用的磁盘分区为sdb1
address 192.168.1.241:7789; #设置drbd监听地址与端口
meta-disk internal;
}
}

在node1、node2 上初始化资源、启动drbd:


[root@kylin-01 drbd.d]# drbdadm create-md r1
initializing activity log
initializing bitmap (640 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
#启动 两个节点需要同时启动才生效
[root@kylin-01 drbd.d]# systemctl start drbd
# 开机启动
[root@kylin-01 drbd.d]# systemctl enable drbd
# 查看状态
[root@kylin-01 drbd.d]# systemctl status drbd
# 查看状态
netstat -anput|grep 7789
tcp 0 0 192.168.1.240:33015 192.168.1.241:7789 ESTABLISHED -
tcp 0 0 192.168.1.240:40897 192.168.1.241:7789 ESTABLISHED -

检查资源状态:


#查看节点角色状态:
drbdadm role r1
注:第一次启动drbd时,两个drbd节点默认都处于Secondary状态

主节点执行设置主节点:


#初始化资源
drbdadm primary --force r1
#查看资源状态
drbdadm status r1
r1 role:Primary
disk:UpToDate
kylin-02 role:Secondary
replication:SyncSource peer-disk:Inconsistent done:6.16
#查看同步状态
cat /proc/drbd
version: 9.2.8 (api:2/proto:86-122)
GIT-hash: e163b05a76254c0f51f999970e861d72bb16409a build by root@kylin-01, 2024-04-08 1556
Transports (api tcp (9.2.8)
会把主机上的数据传到备机,开始会显示同步进度,过一会显示状态都是”实时”,表示数据同步完成了。接下来就可以使用DRBD了。

DRBD使用(测试)

你现在可以把主机上的DRBD设备挂载到一个目录上进行使用,备机的DRBD设备无法被挂载,因为它是用来接收主机数据的,由DRBD负责操作.

格式化文件系统(文件格式根据自己的系统环境选择)


mkfs.ext4 /dev/drbd0

挂载此文件系统


mkdir /data
mount /dev/drbd0 /data/

在挂载data目录中创建一个测试文件,然后卸载挂载目录,然后切换主备节点,在备用节点上查看刚刚建立的测试文件还是否存在

node1:


[root@node1 ~]# mkdir /data/test
将node1变为备用节点
[root@node1 ~]# umount /data/
[root@node1 ~]# drbdadm secondary r1
[root@node1 ~]# drbdadm role r1
Secondary

node2:


将node2变为主节点
[root@node2 ~]# drbdadm primary r1
[root@node2 ~]# drbdadm role r1
Primary/Secondary
挂载设备,然后看文件是否存在
[root@node2 ~]# mount /dev/drbd0 /data
[root@node2 ~]# cd /data/
[root@node2 mnt]# ls
test
OK! 到这里已经算是完成了!

同样,在Node2上建立文件,然后

卸载/mnt/:umount /mnt/

将Node2降级成备用节点:drbdadm secondary r1

在Node1上升级为主机节点:drbdadm primary r1

在Node1上挂载:mount /dev/drbd0 /data

会发现Node2上的文件也同步到了Node1上。

问题

1、umount时,如果提示device is busy,使用下面方法解决: fuser -m /data 显示:/data: 25023c 然后kill -9 25023 即可

2、"Split-Brain"(脑裂)的情况:

假设把Primary主机的的eth0设备宕掉,然后直接在Secondary主机上进行提权升级为DRBD的主节点,并且mount挂载DRBD,这时会发现之前在Primary主机上写入的数据文件确实同步过来了。 接着再把Primary主机的eth0设备恢复,看看有没有自动恢复 主从关系。经过查看,发现DRBD检测出了Split-Brain的状况,也就是两个节点都处于standalone状态, 故障描述如下:Split-Brain detected,dropping connection! 这就是传说中的“脑裂”。

DRBD官方推荐的手动恢复方案:

Secondary主机上的操作


drbdadm secondary r0
drbdadm disconnect all
drbdadm --discard-my-data connect r0 //或者"drbdadm -- --discard-my-data connect r0"

Primary主机上的操作


drbdadm disconnect all
drbdadm connect r0
drbdsetup /dev/drbd0 primary

检查drdb状态


[root@kylin-01 ~]# drbdadm status r1
r1 role:Primary
disk:UpToDate
kylin-02 role:Secondary
peer-disk:UpToDate

安装keepalived

直接采用yum安装


yum install -y keepalived

查看keepalived版本


[root@kylin-02 keepalived]# keepalived -v
Keepalived v2.0.20 (01/22,2020)
Copyright(C) 2001-2020 Alexandre Cassen,
Built with kernel headers for Linux 4.19.90
Running on Linux 4.19.90-52.25.v2207.ky10.x86_64 #1 SMP Fri Jun 2 1228 CST 2023
..........

更改keepalived配置

注:本处采用pgsql测试两个机器数据同步

pg docker-compose的文件(docker的配置安装请自行百度)


version: "3"
services:
postgresql:
image: postgres:11.8
container_name: postgres
hostname: postgres
ports:
- "5432:5432"
volumes:
- "/data/pgsql:/var/lib/postgresql/data"
- "/etc/localtime:/etc/localtime"
restart: on-failure
logging:
driver: "json-file"
options:
tag: postgres
cap_add:
- ALL
environment:
POSTGRES_USER: "root"
POSTGRES_PASSWORD: "123456"
ALLOW_IP_RANGE: "0.0.0.0/0"


cd /etc/keepalived
vim keepalived.conf

主节点keepalived.conf 文件内容如下:

注意:再执行stop脚本时不能直接执行,需要采用脚本调用脚本的方式执行,否则执行不完就会被kill掉(原因暂时没弄清楚)


! Configuration File for keepalived
global_defs {
#notification_email {
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
#}
#notification_email_from Alexandre.Cassen@firewall.loc
#smtp_server 192.168.200.1
#smtp_connect_timeout 30
router_id kylin-02 # 节点标识,主机名
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens32 # 网卡
virtual_router_id 51
priority 100 # 节点权重,主节点100 备节点小于100,数字越大优先级越高
mcast_src_ip 192.168.1.240 # 本机IP
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.239 # 绑定的虚拟IP
}
notify_master "/etc/keepalived/notify.sh" # 节点为master时执行脚本
notify_backup "/etc/keepalived/notify_back.sh" # 切换为备节点时执行脚本
notify_stop "/etc/keepalived/notify_back.sh" # stop keepalived时执行的脚本
}

备节点keepalived.conf 文件内容如下:


! Configuration File for keepalived
global_defs {
#notification_email {
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
#}
#notification_email_from Alexandre.Cassen@firewall.loc
#smtp_server 192.168.200.1
#smtp_connect_timeout 30
router_id kylin-02 # 节点标识,主机名
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 51
priority 99 # 节点权重,主节点100 备节点小于100,数字越大优先级越高
mcast_src_ip 192.168.1.241 # 本机IP
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.239
}
notify_master "/etc/keepalived/notify.sh"
notify_backup "/etc/keepalived/notify_back.sh"
notify_stop "/etc/keepalived/notify_back.sh"
}

notify.sh


#!/bin/bash
drbdadm primary r1
while true
do
drdbs=$(drbdadm role r1)
echo "drbd status is $drdbs"
if [[ "$drdbs" == "Primary" ]];then
break
else
drbdadm primary r1
sleep 3
fi
done
mount /dev/drbd0 /data
docker-compose -f /opt/pgsql/docker-compose.yml up -d

stop.sh


#!/bin/bash
docker stop postgres
umount /data/
drbdadm secondary r1
while true
do
drdbs=$(drbdadm role r1)
echo "drbd status is $drdbs"
if [[ "$drdbs"=="Secondary" ]];then
break
else
drbdadm secondary r1
sleep 3
fi
done

notify_back.sh


#!/bin/bash
/etc/keepalived/stop.sh

启动keepalived


systemctl start keepalived

开机启动


systemctl enable keepalived

验证

在数据库里面执行创建删除,切换keepalived节点后查看数据是否同步

链接:https://www.cnblogs.com/pgyLang/p/18124303

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 防火墙
    +关注

    关注

    0

    文章

    436

    浏览量

    36236
  • 文件系统
    +关注

    关注

    0

    文章

    297

    浏览量

    20427
  • Keepalived
    +关注

    关注

    0

    文章

    8

    浏览量

    4184

原文标题:安装keepalived

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    防火墙双机命令行配置方案

    部署防火墙双机,避免防火墙出现单点故障而导致的网络瘫痪
    的头像 发表于 01-02 09:45 ?1603次阅读
    防火墙<b class='flag-5'>双机</b><b class='flag-5'>热</b><b class='flag-5'>备</b>命令行配置方案

    双机单片机系统内部通信接口的简化设计

    双机单片机系统内部通信接口的简化设计 分析了工业测控系统中双机单片机系统内部通信的特点
    发表于 10-01 22:02 ?13次下载

    双机与负载均衡的设计与实现

    针对OpenFlow SDN系统中的策略管理模块提出了一种新型的双机和负载均衡方案,采用了服务器集群的方式,通过Keepalived和Heartbeat
    发表于 12-24 17:57 ?10次下载

    基于EHW和双机技术的故障自修复电路系统设计

    基于EHW和双机技术的故障自修复电路系统设计_张峻宾
    发表于 01-07 18:39 ?0次下载

    双机和冷的区别

    双机特指基于高可用系统中的两台服务器的(或高可用),因两机高可用在国内使用较多,故得名双机
    发表于 11-21 15:15 ?4.3w次阅读
    <b class='flag-5'>双机</b><b class='flag-5'>热</b><b class='flag-5'>备</b>和冷<b class='flag-5'>备</b>的区别

    双机和集群的区别

    所谓双机,就是将中心服务器安装成互为备份的两台服务器,并且在同一时间内只有一台服务器运行。当其中运行着的一台服务器出现故障无法启动时,另一台备份服务器会迅速的自动启动并运行,从而保证整个网络系统的正常运行
    发表于 11-21 15:37 ?1.4w次阅读

    VMWare7.0虚拟机双机图列教程资料免费下载

    本文档的主要内容详细介绍的是VMWare7.0虚拟机双机图列教程资料免费下载。
    发表于 06-12 15:59 ?8次下载

    推荐几款服务器的Windows与Linux双机软件

    服务商。今天小编就给大家推荐几款服务器的Windows与Linux双机软件! 众所周知,双机
    发表于 11-12 14:16 ?3348次阅读

    你知道国产双机双机的意思吗

    机的应用系统切换到另一台主机上继续运行,及时地进行错误隔绝、恢复,以最低成本实现用户几乎不停顿的业务应用。 但高可用软件也分为双机和冷
    的头像 发表于 06-29 10:46 ?2975次阅读
    你知道国产<b class='flag-5'>双机</b><b class='flag-5'>热</b><b class='flag-5'>备</b>与<b class='flag-5'>双机</b>冷<b class='flag-5'>备</b>的意思吗

    双机原理很神秘?看完这文,让你秒懂

    络,一旦该设备或该设备所在链路出现故障,就会极大地影响了用户的网络体验。网络可靠性技术中的双机功能就能很好的解决这个问题。新支点双机
    的头像 发表于 07-07 15:55 ?2884次阅读
    <b class='flag-5'>双机</b><b class='flag-5'>热</b><b class='flag-5'>备</b>原理很神秘?看完这文,让你秒懂

    企业实施服务器双机方案存在重要意义

    随着网络信息不断的发展,现在很多企业对于服务器的要求比较苛刻,需要保证服务器无休止的运转服务,这对于服务器来说无疑会出现故障,给企业带来影响,那么怎么保证服务器服务器安全运转呢?新支点双机软件
    的头像 发表于 07-12 15:20 ?2120次阅读

    防火墙双机组网环境中的IPSecVPN实验步骤及配置

    FW1/FW2部署双机,采用主方式,FW1为主设备,FW2为设备;
    的头像 发表于 11-08 09:41 ?3988次阅读

    Keepalived工作原理简介

    Keepalived实现高可用架构的不二之选,如果你想通过开源软件来搭建一套双机架构系统,Keep
    的头像 发表于 02-25 17:00 ?1334次阅读

    路由器功能介绍-双机备份机制

    我们以东用科技的ORB305系列工业级路由器为例,来为大家简单介绍一下。所谓的双机无非就是以7X24小时不中断的为企业提供服务为目的,各种双机
    的头像 发表于 10-08 09:16 ?1897次阅读
    路由器功能介绍-<b class='flag-5'>双机</b><b class='flag-5'>热</b>备份机制

    【服务器数据恢复】Raid5硬盘离线导致盘上线同步失败的数据恢复案例

    自动上线并开始同步数据。在盘完成同步之前,该组raid5阵列中另一块硬盘离线,
    的头像 发表于 01-08 13:38 ?539次阅读