pacemaker+corosync实现集群管理

前言:

高可用集群,是指以减少服务中断(如因服务器宕机等引起的服务中断)时间为目的的服务器集群技术。简单的说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点。
高可用集群的出现是为了减少由计算机硬件和软件易错性所带来的损失。它通过保护用户的业务程序对外不间断提供的服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度。

什么是pacemaker :

Pacemaker是一个集群资源管理器。它利用集群基础构件(OpenAIS 、heartbeat或corosync)提供的消息和成员管理能力来探测并从节点或资源级别的故障中恢复,以实现群集服务(亦称资源)的最大可用性。

Corosync
Corosync是集群管理套件的一部分,他在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。也就是说,corosync是Messaging Layer集群信息层软件,需要pacemaker资源管理器,才能构成一个完整的高可用集群。它也是运行于心跳层的开源软件。(是集群框架引擎程序)

实验搭建:

准备三台7.3的虚拟机
server1:ip为172.25.5.111 作为管理节点和HA节点
server2:ip为172.25.5.112 作为HA节点
server3:ip为172.25.5.113 作为iscsi共享磁盘

三台虚拟机关火墙,selinux状态disabled,

首先需要配好高可用yum源(server1和server2):

在这里插入图片描述
在这里插入图片描述
yum源配好之后安装工具(一和二都装)

yum install pacemaker pcs corosync -y
systemctl start pcsd
systemctl enable pcsd
passwd hacluster        为高可用用户设定密码
yum install bash-* -y     安装pcs相关命令

在这里插入图片描述

因为官方规定为了安全起见要生成ssh密钥,给自己和server2发送一份
server2重复相同操作

ssh-keygen
ssh-copy-id server1
ssh-copy-id server2

发送不了你看下自己的解析写好没:
在这里插入图片描述

在server1上

pcs cluster auth server1 server2 
pcs cluster setup --name mycluster server1 server2 
pcs cluster start --all 
pcs cluster enable --all 
pcs status
pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
crm_verify -L
pcs resource list
pcs resource standards

在server1和server2上安装httpd,并写入网页
在这里插入图片描述

在server1上创建vip:

pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.5.100 cidr_netmask=32 op monitor interval=30s

在server2上查看

crm_mon

测试:

pcs cluster stop server1
crm_mon
pcs cluster start server1

在sever1上添加httpd资源和组

pcs resource create apache systemd:httpd op monitor interval=1min
pcs resource group add apache_group vip apache
crm_mon
pcs constraint order vip then apache

添加fence栅设备

在server1、server2和物理机上分别安装fence

yum install fence-virt -y
mkdir /etc/cluster

在物理机上

fence_virtd -c  ##配置fence
Interface [virbr0]: br0		##设备选择br0,其他用默认生成fence_xvm.key
mkdir /etc/cluster
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1把fence_xvm.key分发到HA节点,通过这个key来管理节点
scp fence_xvm.key root@server1:/etc/cluster/
scp fence_xvm.key root@server2:/etc/cluster/systemctl start fence_virtd.service

在server1上识别并添加fence

注意:server1(主机名):server1(虚拟机名)

stonith_admin -I
pcs stonith create vmfence fenxe_xvm pcmk_host_map="server1:server1;server2:server2" op monitor interval=1min

测试:

写坏server2的内核,通过fence重启

pcs property set stonith-enabled=true
echo c >/proc/sysrq-trigger

添加iscsi网络共享磁盘

server3作为共享磁盘
为server3添加一块20G的虚拟磁盘

fdisk /dev/vda     建个分区
partprobe

安装共享磁盘服务并设置

yum install targetcli -y
targetcli
/backstores/block create my_disk1 /dev/vdaiscsi/ create iqn.2019-06.com.example:server3iscsi/iqn.2019-06.com.cc.example:server3:/tpg1/luns create /backstores/block/my_disk1
iscsi/iqn.2019-06.com.cc.example:server3/tpg1/acls create iqn.2019-06.com.example:client
exit

在server1和server2上安装iscsi
并编写文件

yum install iscsi-* -y
cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iscsi/iqn.2019-06.com.cc.example:client
systemctl restart iscsid

识别并登陆共享磁盘

iscsiadm -m discovery -t st -p 172.25.5.113
iscsiadm -m node -l
partprobe
cat /proc/partitions

在共享磁盘上创建一个分区并格式化

fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
partprobe

在server2同步并查看

partprobe 
cat /proc/partitions

添加mysql数据库资源

在server1和server2上分别安装mariadb

yum install mariadb-* -y
sysemctl start mariadb

server1挂载到共享磁盘并登陆数据库

chown mysql.mysql /var/lib/mysql
mount /dev/sdb1 /var/lib/mysql
systemctl start mariadb
mysql -uroot

关闭server1的mariadb并在server2登陆数据库

server1           systemctl stop mariadbserver2           mount /dev/sdb1 /var/lib/mysqlsystemctl start mariadbmysql -uroot

测试完毕卸载并关闭mariadb

umount /var/lib/mysql
systemctl stop mariadb

删除之前创建的apache组
并创建新的vip和组

pcs resource delete apache_group
pcs resource create vip1 ocf:heartbeat:IPaddr2 ip=172.25.11.200 cidr_netmask=32 op monitor interval=30s
pcs resource create mysql_data ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/var/lib/mysql fstype=xfs op monitor interval=30s
df
crm_mon
pcs resource create mariadb systemd:mariadb op monitor interval=1min
pcs resource group add mysql_group vip1 mariadb
crm_mon

在server1登陆mysql测试

mysql -uroot

在server2把内核写崩测试fence

pcs property set stonith-enabled=true
echo c >/proc/sysrq-trigger

解决fence资源的bug

目的:写崩server2内核,在server2重启过程中,资源会回到server1上,当server2重启以后,资源也会一直在server1上

解决办法:
删除之前创建资源、组、fence

pcs resource delete mysql_group
pcs resource delete vmfence
pcs property set stonith-enabled=false
crm_verify -L -V

重新添加资源、组、fence

pcs resource create vip1 ocf:heartbeat:IPaddr2 ip=172.25.5.200 cidr_netmask=32 op monitor interval=30s
pcs resource create mysql_data ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/var/lib/mysql fstype=xfs op monitor interval=30s
pcs resource create mariadb systemd:mariadb op monitor interval=1min
pcs resource group add mysql_group vip1 mariadb

更改resource-stickiness值

pcs resource defaults
pcs resource defaults resource-stickiness=100
pcs resource defaults

添加fence并再次更改resource-stickiness值

pcs stonith create vmfence fenxe_xvm pcmk_host_map="server1:server1;server2:server2" op monitor interval=1min
pcs resource defaults resource-stickiness=0
pcs resource defaults
pcs property set stonith-enabled=true

测试:
写崩server2内核,在server2重启过程中,资源会回到server1上,当server2重启以后,资源也会一直在server1上

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

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

相关文章

分页导航的实现方法

这个导航是阅读了精通css这本书后做的demo&#xff0c;感觉以前写的真的是弱爆了 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style type"text/css">ol.n…

更换mysql_这些被你忽视的MySQL细节,可能会让你丢饭碗!

我们在 MySQL 入门篇主要介绍了基本的 SQL 命令、数据类型和函数&#xff0c;在具备以上知识后&#xff0c;你就可以进行 MySQL 的开发工作了&#xff0c;但是如果要成为一个合格的开发人员&#xff0c;你还要具备一些更高级的技能&#xff0c;下面我们就来探讨一下 MySQL 都需…

Java RandomAccessFile skipBytes()方法与示例

RandomAccessFile类skipBytes()方法 (RandomAccessFile Class skipBytes() method) skipBytes() method is available in java.io package. skipBytes()方法在java.io包中可用。 skipBytes() method is used to skip the given number of bytes in this file and possibly set …

rhcs集群套件—红帽6的高可用

含义及理解&#xff1a; RHCS是Red Hat Cluster Suite的缩写&#xff0c;也就是红帽子集群套件&#xff0c;RHCS是一个能够提供高可用性、高可靠性、负载均衡、存储共享且经济廉价的集群工具集合&#xff0c;&#xff0c;它将集群系统中三大集群架构&#xff08;高可用性集群、…

MapReduce二次排序

2019独角兽企业重金招聘Python工程师标准>>> 默认情况下&#xff0c;Map输出的结果会对Key进行默认的排序&#xff0c;但是有时候需要对Key排序的同时还需要对Value进行排序&#xff0c;这时候就要用到二次排序了。下面我们来说说二次排序 1、二次排序原理 我们把二…

数据有序_详解数据库插入性能优化:合并+事务+有序数据进行INSERT操作

概述对于一些数据量较大的系统&#xff0c;数据库面临的问题除了查询效率低下&#xff0c;还有就是数据入库时间长。特别像报表系统&#xff0c;每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此&#xff0c;优化数据库插入性能是很有意义的。其实最有效的…

Java ProcessBuilder environment()方法与示例

ProcessBuilder类的environment()方法 (ProcessBuilder Class environment() method) environment() method is available in java.lang package. environment()方法在java.lang包中可用。 environment() method is used to return Map interfaces of this process builder env…

容器内应用日志收集方案

容器化应用日志收集挑战 应用日志的收集、分析和监控是日常运维工作重要的部分&#xff0c;妥善地处理应用日志收集往往是应用容器化重要的一个课题。 Docker处理日志的方法是通过docker engine捕捉每一个容器进程的STDOUT和STDERR&#xff0c;通过为contrainer制定不同log dri…

python统计行号_利用Python进行数据分析(第三篇上)

上一篇文章我记录了自己在入门 Python 学习的一些基础内容以及实际操作代码时所碰到的一些问题。这篇我将会记录我在学习和运用 Python 进行数据分析的过程&#xff1a;介绍 Numpy 和 Pandas 两个包运用 Numpy 和 Pandas 分析一维、二维数据数据分析的基本过程实战项目【用 Pyt…

lnmp架构搭建—源码编译(nginx、mysql、php)

含义及理解&#xff1a; LNMP LinuxNginxMysqlPHP&#xff1a;LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux&#xff0c;N指Nginx&#xff0c;M一般指MySQL&#xff0c;也可以指MariaDB&#xff0c;P一般指PHP&#xff0c;也可以指P…

Java PipedInputStream available()方法与示例

PipedInputStream类的available()方法 (PipedInputStream Class available() method) available() method is available in java.io package. available()方法在java.io包中可用。 available() method is used to return the number of available bytes left that can be read …

解析xml_Mybatis中mapper的xml解析详解

上一篇文章分析了mapper注解关键类MapperAnnotationBuilder&#xff0c;今天来看mapper的项目了解析关键类XMLMapperBuilder。基础介绍回顾下之前是在分析configuration的初始化过程&#xff0c;已经进行到了最后一步mapperElement(root.evalNode("mappers"))&#x…

lnmp—MemCache的作用

含义及理解&#xff1a; 1 . memcache是一个高性能的分布式的内存对象缓存系统&#xff0c;用于动态web应用以减轻数据库负担。通过在内存里维护一个统一的巨大的hash表&#xff0c;来存储经常被读写的一些数组与文件&#xff0c;从而极大的提高网站的运行效率。 memcache是一…

Java ListResourceBundle getKeys()方法与示例

ListResourceBundle类的getContents()方法 (ListResourceBundle Class getContents() method) getContents() method is available in java.util package. getContents()方法在java.util包中可用。 getContents() method is used to return an enumeration of all the keys tha…

orale用户密码过期处理

使用具有管理权限的用户登录1、查看用户的proifle是哪个&#xff0c;一般是default&#xff1a;SELECT username,PROFILE FROM dba_users;2、查看指定概要文件&#xff08;如default&#xff09;的密码有效期设置&#xff1a;sql>SELECT * FROM dba_profiles s WHERE s.prof…

python字典怎么设置_在python中设置字典中的属性

在python中设置字典中的属性是否可以在python中从字典创建一个对象&#xff0c;使每个键都是该对象的属性&#xff1f;像这样的东西&#xff1a;d { name: Oscar, lastName: Reyes, age:32 }e Employee(d)print e.name # Oscarprint e.age 10 # 42我认为这几乎与这个问题相反…

Java ObjectInputStream readByte()方法与示例

ObjectInputStream类readByte()方法 (ObjectInputStream Class readByte() method) readByte() method is available in java.io package. readByte()方法在java.io包中可用。 readByte() method is used to read a byte (i.e. 8 bit) of data from this ObjectInputStream. re…

openresty—实现缓存前移

含义及理解&#xff1a; OpenResty(又称&#xff1a;ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台&#xff0c;由中国人章亦春发起&#xff0c;提供了很多高质量的第三方模块。 其目标是让Web服务直接跑在Nginx服务内部&#xff0c;充分利用Nginx的非阻塞I/O模型&am…

Nginx+Keepalived+Tomcat之动静分离的web集群

NginxKeepalivedTomcat之动静分离的web集群 博客分类&#xff1a; webserverNginxKeepalivedTomcat之动静分离的web集群为小公司提供大概一天持续在100万/日之间访问的高性能、高可用、高并发访问及动静分离的web集群方案NginxKeepalived 高可用、反向代理NginxPHP …

安装完成后的配置_cent os7 默认安装后的一般配置

在安装cent os7后&#xff0c;进入系统会出现一些命令无法执行。这是因为最小化没有安装包含的软件包。这时候先要配置一下基本的IP参数&#xff0c;(包括动态&#xff0c;静态&#xff0c;或者是双网卡绑定)。我们在虚拟机中模拟操作一下&#xff0c;配置文件在/etc/sysconfig…