corosync+pacemaker+nfs配置简单高可用

news2024/11/24 14:56:46

环境准备:

每个节点提供20G共享存储

web1192.168.134.176node7
web2192.168.134.177node8

一、准备web环境(两台web测试机都要准备)

yum install httpd -y
echo " web test page ,ip is `hostname -I`." > /var/www/html/index.html
systemctl start httpd

二、做两个节点免密登录,和配置其互相通信

vim /etc/hosts
内容如下:
192.168.134.176 node7
192.168.134.177 node8
备节点
ssh-keygen -f ~/.ssh/id_rsa -P '' -q
ssh-copy-id node1
主节点
ssh-keygen -f ~/.ssh/id_rsa -P '' -q
ssh-copy-id node3

三、安装环境(pacemaker,corosync,pcs)==>两个节点上都要配置

yum install corosync pacemaker pcs
systemctl enable --now pcsd

在软件安装完成之后,会生成一个用户名为hacluster
id hacluster  # 查看用户信息
echo 123456 | passwd --stdin hacluster  # 给用户设置密码

四、集群配置

对集群进行认证配置
pcs cluster auth node7 node8
创建集群
pcs cluster setup --name web_cluster node7 node8
启动并加入自启动
pcs cluster start --all
pcs cluster enable --all

查看节点是否启动
corosync-cfgtool -s
查看集群的信息和当前的状态
corosync-cmapctl | grep members
pcs status

检查配置文件
crm_verify -L -V
此处会出现三个报错。原因:stonith没有禁用,在pacemaker中为了保证数据安全,默认开启stonith,但由于此处没有配置相关命令,所以需要禁用。
pcs property set stonith-enabled=false


补充:介绍一些查看集群状态的命令
pcs status resources 显示集群资源状态
pcs status nodes  节点状态
pcs status groups  已配置资源组和资源
pcs status pcsd  已配置节点和pcsd状态

五、集群资源的配置

添加vip:帮助文件,pcs resource help
pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.134.200 cidr_netmask=32 op monitor interval=30s
查看可以配置的资源文件
pcs resource providers
查看可配置的http资源
pcs resource list | grep httpd
添加httpd资源到集群
pcs resource create WEB systemd:httpd
此时查看集群状态可以看到许多VIP与WEB不在同一节点上,即调整使其处于同一节点上,来方便使用。
pcs constraint colocation add WEB with VIP  # 这样配置后,利用VIP访问会重新变为正常情况。这是排列约束,主要是绑定资源到同一个节点上。
配置先启动VIP再启动WEB
pcs constraint order VIP then WEB
清除集群的错误日志:pcs resource cleanup


摧毁集群:pcs cluster destroy --all

 六、配置drbd

​
1、导入elrepo源

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

2、安装扩展源

wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

3、安装软件包、

yum install -y drbd90-utils kmod-drbd90

4、启动drbd的内核模块

modprobe drbd
echo drbd > /etc/modules-load.d/drbd.conf
lsmod | grep drbd  # 显示已经载入系统的模块 ,做检查使用

5、修改全局配置文件(两台机器都执行)

vim /etc/drbd.d/global_common.conf 

global {
	usage-count no; # 版本控制
}
common {
	handlers {
	        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";
	}
	startup {
	}
	options {
	}
	disk {  
		on-io-error detach;
	}
	net {
		protocol C;  # 指定使用协议C,在common中配置也可以
	}
}

6、修改资源文件(两台机器都执行)

vim /etc/drbd.d/nfs.res

resource nfs {
  disk /dev/sdb;
  device /dev/drbd0;
  meta-disk internal;

  on node1 {
    address 192.168.134.170:8822;
  }


  on node3 {
    address 192.168.134.172:8822;
  }
}

7、首次启用资源

(1)创建元数据(两台都要配)

drbdadm create-md nfs
内容如下:
initializing activity log
initializing bitmap (640 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.

(2)启用资源(两台都要配)

drbdadm up nfs

(3)启动初始化全量同步(在主节点上启动)

 drbdadm primary --force nfs  # 启动全量同步
 drbdadm status  # 可以查看同步状态(一段时间后状态才会变化)

nfs role:Primary
  disk:UpToDate
  node1 role:Secondary
    replication:SyncSource peer-disk:Inconsistent done:3.58


nfs role:Primary
  disk:UpToDate
  node1 role:Secondary
    peer-disk:UpToDate


8、测试drbd是否成功启动
在主节点上

mkdir /data
ls /dev/drbd
mkfs.xfs /dev/drbd0  # 初始化
meta-data=/dev/drbd0             isize=512    agcount=4, agsize=1310678 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242711, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
mount /dev/drbd0 /data  # 将磁盘挂载到data目录下
cp /etc/hos* /data/  #  将文件copy入data目录下
umount /data  # 卸载data目录
drbdadm secondary nfs  # 资源降级

在备节点上

mkdir /data  # 创建data目录
ls /dev/drbd
drbdadm primary nfs  # 资源升级
drbdadm status  # 查看资源状态
nfs role:Primary
  disk:UpToDate
  node3 role:Secondary
    peer-disk:UpToDate

mount /dev/drbd0 /data  # 将磁盘重新挂入data目录
[root@node1 ~]# ls /data  # 查看data目录下内容,观察是否同步成功,出现以下情况即同步成功
host.conf  hostname  hosts  hosts.allow  hosts.deny

9、启动服务
systemctl start drbd
systemctl enable drbd
​

八、配置nfs资源

 
pcs resource create NfsShare ocf:heartbeat:nfsserver nfs_ip=192.168.134.100  # 设置VIP
resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.134.100 cidr_netmask=32  # 创建NfsShare资源
pcs constraint colocation add NfsShare with ClusterIP  # 绑定到同一个节点上
pcs constraint order ClusterIP then NfsShare  # 设置启动顺序,先VIP,再资源


创建DRBD的设备集群
pcs cluster cib drbd_cfg  # 生成drbd_cfg文件
pcs -f drbd_cfg resource create NfsData ocf:linbit:drbd drbd_resourconf=/etc/drbd.conf" # 创建nfsdata资源
pcs -f drbd_cfg resource master NfsDataClone NfsData master-max=1 master-node-max=1 clone max=2 clone-node-max=2 notify=true  # 将其推送到实时cib来实现一次提交更改
pcs cluster cib-push drbd_cfg --config


创建文件系统集群(自动在主节点挂载共享设备) ==>节点要在VIP所在的设备,不然会出问题
 pcs cluster cib fs_cfg

 pcs -f fs_cfg resource create NfsFs ocf:heartbeat:Filesystem device="/dev/drbd0" directory="/data" fstype="xfs" 

pcs -f fs_cfg constraint colocation add NfsFs with NfsDataClone INFINITY with-rsc-role=Master

 pcs -f fs_cfg constraint order promote NfsDataClone then start NfsFs

 pcs -f fs_cfg constraint colocation add NfsShare with NfsFs INFINITY  # 让NFs服务与共享目录在同一个服务器上

 pcs -f fs_cfg constraint order NfsFs then NfsShare  # 设置启动顺序

 pcs cluster cib-push fs_cfg --config # 提交配置



九、测试

正常配置结果

此时已经自动挂载 

模拟异常情况

pcs cluster standby node7

此时,挂载位置切换,主从切换,vip自动漂移,达到实验目标。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/893090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无法将“环境变量”项识别为 cmdlet、函数、脚本文件或可运行程序的名称(pycharm)

无法将“配置的任何一个环境变量”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 记录解决“无法将“C:......conda.exe”项识别为 cmdlet、函数、脚本文件或可运行程序的名称”以及“表达式或语句中包含意外的标记”的系列问题(VSCode开发环境)一、Conda.exe无法正常识…

【AI】《动手学-深度学习-PyTorch版》笔记(十八):卷积神经网络模型(LeNet、AlexNet、VGG、NiN)

AI学习目录汇总 1、LeNet 1.1 介绍 发布时间:1989年 模型目的:识别手写数字 1.2 网络结构 1.3 定义模型 1.3.1 相关函数原型 1)nn.Conv2d:卷积层 torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, paddin

面试之快速学习STL-无序关联式容器

和关联式容器一样,无序容器也使用键值对(pair 类型)的方式存储数据。不过,本教程将二者分开进行讲解,因为它们有本质上的不同: 关联式容器的底层实现采用的树存储结构,更确切的说是红黑树结构&a…

2023-08-17 Untiy进阶 C#知识补充8——C#中的日期与时间

文章目录 一、名词概念二、DateTime三、TimeSpan 一、名词概念 (一)格里高利历 ​ 格里高利历一般指公元,即公历纪年法。目前我们所说公历,就是格里高利历。 ​ 比如 2022 年就是从公元元年开始算起的两千二十二年。 &#xf…

Python“牵手”shopee商品评论数据采集方法,shopeeAPI申请指南

Shopee平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范,ShopeeAPI接口是指通过编程的方式,让开发者能够通过HTTP协议直接访问Shopee平台的数据,包括商品信息、店铺信息、物流信息等,从而实现Sh…

如何采用敏捷方法进行需求管理?

产品的复杂性正在迅速增长,因此,为满足客户目标所需的需求数量也在扩大。这使得需求文档编制过程既耗时又可能存在风险。在本章中,我们将探讨如何采用敏捷方法进行需求管理。 现有的需求管理方法总是不够灵活,无法满足严格要求以…

薛定谔的日语学习小程序源码下载

这款学习日语的小程序源码,名为“薛定谔的日语”,首页展示了日语中的50音图,让用户能够看到日语词并跟读发音。 在掌握50音图后,用户还可以进行练习。小程序会随机提问50音图中的某一个,用户需要回答是否正确&#xf…

【nodejs】用Node.js实现简单的壁纸网站爬虫

1. 简介 在这个博客中,我们将学习如何使用Node.js编写一个简单的爬虫来从壁纸网站获取图片并将其下载到本地。我们将使用Axios和Cheerio库来处理HTTP请求和HTML解析。 2. 设置项目 首先,确保你已经安装了Node.js环境。然后,我们将创建一个…

下载安装并使用小乌龟TortoiseGit

1、下载TortoiseGit安装包 官网:Download – TortoiseGit – Windows Shell Interface to Githttps://tortoisegit.org/download/ 2、小乌龟汉化包 在官网的下面就有官方提供的下载包 3、安装

vue项目引入antDesignUI组件

快速安装ant-design-vue并配置,vue2.0 antDesign1.7.8 第一步:安装ant-deisgn-vue 1.7.8 npm install ant-design-vue1.7.8 --save第二步:配置package.json文件,将依赖写入后,npm install 安装依赖 "dependenc…

极智嘉x吉利汽车 x京东物流,引领汽车行业智慧物流新变革!

近日,中国领先的汽车制造商吉利汽车携手中国领先的技术驱动的供应链解决方案及物流服务商京东物流、全球仓储机器人引领者极智嘉(Geek),在西安吉利汽车制造基地RDC仓库率先落地SkyPick上存下拣解决方案,实现了全物流链精益化、智能化、一体化…

音视频实时通话解决方案

1、问题提出 想要实现音视频通话,对于大部分人可能会觉得很难,但是实际上,有些事情并没有大家想的那样困难,只要功夫深,铁杵磨成针。 机缘巧合下,在业务中,我也遇到了一个业务场景需要实现音视频通话,我们不可能自己从零开始干,我本次用到的核心是WebRTC。 2、WebRT…

数学建模之“聚类分析”原理详解

一、聚类分析的概念 1、聚类分析(又称群分析)是研究样品(或指标)分类问题的一种多元统计法。 2、主要方法:系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。这里主要介绍系统聚类法…

mmdetection-FasterRcnn的四层输出修改

1、 num_outs5 改为 num_outs4 2、 FPN的输出改为四层 outs [H3, H4, H5, H6] 3、strides删除一个:strides[4, 8, 16, 32]), 就可以了

【LeetCode】字符串匹配

字符串匹配问题 常见的字符串匹配算法包括暴力匹配、 Knuth-Morris-Pratt 算法、Boyer-Moore算法、Sunday 算法等 解题 思路 1: 两个指针各指向两个字符串的起始位置,先判断,两个字符串的第一个字符是否相同,如果相同的话,则将两个指针往下移动,并且判断较短字符串的下一个字符…

上海虚拟展厅制作平台怎么选,蛙色3DVR 助力行业发展

引言: 在数字化时代,虚拟展厅成为了企业宣传的重要手段。而作为一家位于上海的实力平台,上海蛙色3DVR凭借其卓越的功能和创新的技术,成为了企业展示和宣传的首选。 一、虚拟展厅的优势 虚拟展厅的崛起是指随着科技的进步&#x…

sass笔记

声明变量 通过$标识符进行命名及引用混合器 类似vue中的函数 通过 mixin标识定义 include 标识调用& 父选择器标识extend 进行继承可嵌套可导入 通过 import 文件位置’ 、进行导入 <style> //1 声明变量 $name: 15px; $color: skyblue;mixin border-radius($num) {/…

Linux配置Nginx SSL支持Https配置教程

Linux Nginx配置SSL 检查是否安装ssl模块安装SSL配置SSL证书 继承上篇 Linux安装Nginx 检查是否安装ssl模块 执行&#xff1a;./nginx -V命令 如果有输出--–with-http_ssl_module则说明已安装好SSL模块 安装SSL 进入安装目录/usr/local/nginx-1.22.1 执行安装命令&#xf…

软考笔记——9.软件工程

软件工程的基本原理&#xff1a;用分阶段的生命周期计划严格管理、坚持进行阶段评审、实现严格的产品控制、采用现代程序设计技术、结果应能清除的审查、开发小组的人员应少而精、承认不断改进软件工程事件的必要性。 软件工程的基本要素&#xff1a;方法、工具、过程 软件生…

【005】ts学习笔记【函数扩展】

函数扩展 参数类型 //注意&#xff0c;参数不能多传&#xff0c;也不能少传 必须按照约定的类型来 const fn (name: string , age : number ) : string > {return name age }let desc fn( "张三", 18) console.log(desc)可选参数与默认值 //可选的参数 和 默…