当前位置: 首页 > 编程日记 > 正文

HA01-集群介绍

目录

一、宏观理解集群

二、微观理解集群

三、安装高可用集群环境

3.1、实验环境简介

3.2、安装集群软件并配置集群

3.3、用命令行创建集群


一、宏观理解集群

集群中的一个服务器称为一个节点node。

集群资源以mysql为例一般有:vip(浮动IP)、mysql(服务)、存储(共享存储)。所有资源作为一个整体提供服务,称为服务组。集群资源不运行在同一个node时,集群不能正常工作。为了集群资源运行在同一个node上,需要配置集群的约束条件。约束条件:location、order、colocation。

  • location:资源优先在哪个node上运行
  • order:资源的启动顺序(先启动vip、再启动共享存储、再启动服务)
  • colocation:保证资源运行在同一个node上(其他资源跟着哪个资源跑)

心跳线:在私有网络中,各个node之间互相探测,看其他node是否正常。各个node之间互相争抢资源(互相认为其他node有故障),会出现脑裂状态,会造成数据丢失。

fence/stonith:stonith=shoot the other node in the head,通常是电源交换机来解决脑裂,他会把有问题的node重启或关机,避免脑裂。

node和共享存储之间用多路径multipath,防止一条线路故障导致不可用。

二、微观理解集群

CRM:Cluster Resource Manager 集群资源管理器,每个node上一个头儿
PE:Policy Engine 策略引擎,从CRM中重选出DC
DC:Designated Coordinator 指定协调器,集群中有一个CRM作为DC
LRM:Local Resource Manager 本地资源管理器,接受CRM的指令,调用RA来管理各自node上的资源
CIB:Clister Infomation Base 集群信息库,是关于集群的数据库,由节点更新,为PE做决策提供依据

RA:Resource Agent 资源代理启动脚本,RA有三种:LSB、systemd、OCF。

  • RHEL6前 LSB---/etc/init.d/
  • RHEL7后 systemctl
  • OCF 开放集群框架,是第三方的启动脚本

以3节点集群为例,node1、2、3中当前活跃节点是node3。集群的故障转移是这样实现的

  1. 如果node3挂了被node1、2心跳检测到
  2. 那么node1、2就更新CIB的信息
  3. PE根据CIB的信息决策其余node中哪个node最适合接管,比如node2接管
  4. PE决定node2上的CRM作为新的DC
  5. node2变成活跃节点,node2的CRM命令LRM启动服务
  6. LRM通过调用各种RA来启动服务

以上的集群架构通过集群软件实现,常用的集群软件是

  • pacemaker来实现CRM
  • corosync来实现心跳线信息

三、安装高可用集群环境

3.1、实验环境简介

虚拟机server作为实验平台,server必须把光盘挂着以充当yum源。在server上使用KVM运行5台虚拟机分别为node1~5。在root的家目录放入安装node的文件(目录rh436_new)和安装脚本。在server上:放入tar包,解压缩并进入rh436_new目录,执行server.sh脚本配置初始环境。执行以后会自动重启,初始环境完成。

[root@server:~]# tar xvzf rh436_new.tar.gz
[root@server:~]# cd rh436_new/
[root@server:~/rh436_new]# ll
total 505M
-rw-r--r--. 1 root  root  505M Mar 13  2018 node.qcow2
-rw-r--r--. 1 kevin kevin  167 May  5  2016 README
-rwxr-xr-x. 1 kevin kevin  793 May  5  2016 reinstall.sh
-rwxr-xr-x. 1 kevin kevin 1.5K May  5  2016 server.sh[root@server:~/rh436_new]# ./server.sh

在server上:virsh list查看虚拟机状态

[root@server:~]# virsh listId    Name                           State
----------------------------------------------------

在server上:reinstall.sh 1 2 3 4 5可以安装或者重置node1 node2 ... node5

[root@server:~]# reinstall.sh 1
[root@server:~]# reinstall.sh 2
...
[root@server:~]# reinstall.sh 5

启停某个node

[root@server:~]# virsh start node1
[root@server:~]# virsh shutdown node1

远程到某个node上,密码都是redhat。

[root@server:~]# ssh node1
Warning: Permanently added 'node1,192.168.122.10' (ECDSA) to the list of known hosts.
root@node1's password:
[root@node1 ~]#

3.2、安装集群软件并配置集群

在3个node上:装包pcs,启动服务pcsd。装pcs包会创建用户hacluster,更改其密码。验证集群是否正常。同理node2、3。

[root@node1 ~]# yum install pcs -y
[root@node1 ~]# systemctl enable pcsd; systemctl start pcsd
[root@node1 ~]# echo redhat | passwd---stdin hacluster

集群各节点node1、node2、node3互相做认证,这个过程只需要在一个结点上操作即可

[root@node1 ~]# pcs cluster auth node1 node2 node3
Username: hacluster
Password:
node1: Authorized
node2: Authorized
node3: Authorized

在server上:打开firefox,访问https://node1:2224,用hacluster/redhat登录。
点击Create New新建一个集群,起名cluster1,加入node1、node2和node3,点Create Cluster创建。


集群cluster1看到有3个node,各个node之间的pacemaker要等一会儿才能正常运行起来。
这里有nodes、resource、fence device、cluster properties、manage clusters等。
分别管理node、资源、fence、集群属性、管理集群等。
我们访问的是https://node1:2224,所以cluster properties是node1的properties。

此时,在cluster properties里面,
把No Quorum Policy选为Ignore
把Stonith Enable不勾选
保证后面可以顺利添加资源,如vip

访问https://node2:2224,用hacluster/redhat登录
添加已有的集群,点Add Existing,因为已经配置过node1,所以填写node1添加

访问https://node3:2224,同理配置

3.3、用命令行创建集群

命令行使用man pcs查看例子。下面用命令行创建和用浏览器创建一样的集群。

[root@node3 ~]# pcs cluster setup --start --enable --name cluster1 node1 node2 node3
Shutting down pacemaker/corosync services...
Redirecting to /bin/systemctl stop  pacemaker.service
Redirecting to /bin/systemctl stop  corosync.service
Killing any remaining services...
Removing all cluster configuration files...
node1: Succeeded
node2: Succeeded
node3: Succeeded
Starting cluster on nodes: node1, node2, node3...
node1: Starting Cluster...
node3: Starting Cluster...
node2: Starting Cluster...
node1: Cluster Enabled
node2: Cluster Enabled
node3: Cluster Enabled

关闭stonith enable

[root@node1 ~]# pcs property set stonith-enabled=false[root@node1 ~]# pcs property show
Cluster Properties:cluster-infrastructure: corosynccluster-name: cluster1dc-version: 1.1.12-a14efadhave-watchdog: falsestonith-enabled: false

不启用quorum策略

[root@node1 ~]# pcs property set no-quorum-policy=ignore
[root@node1 ~]# pcs property show
Cluster Properties:cluster-infrastructure: corosynccluster-name: cluster1dc-version: 1.1.12-a14efadhave-watchdog: falseno-quorum-policy: ignorestonith-enabled: false

这些属性的名字一般是浏览器里cluster property中名字的连字符形式,比如,Stonith Enabled就是stonith-enabled,No Quorum Policy就是no-quorum-policy,以此类推。

相关文章:

Python并行编程(八):with语法

1、基本概念 当有两个相关的操作需要在一部分代码块前后分别执行的时候,可以使用with语法自动完成。同时,使用with语法可以在特定的地方分配和释放资源,因此,with语法也叫作"上下文管理器"。在threading模快中&#xff…

“抽象类”的定义及其与“普通类”的区别

我们都知道在多态中子类要重写父类的方法,执行时也执行子类中的方法,这就显得父类中的方法体有点子虚乌有了, 也就是说可以直接省略方法体,而只定义一个方法就可以了。因此,我们称一个没有方法体的方法为抽象方法&…

refreshcontrol 实现下拉刷新的功能

该组件实现下拉刷新的功能。不过该组件是用在ScrollView的内部的,为ScrollView添加一个下拉刷新的功能。当ScrollView的垂直方向的偏移量scrollY:0的时候,手指往下拖拽ScrollView就会触发onRefresh事件方法。 相关的属性: onRefresh functio…

C++二维数组名与数组指针的思考

二维数组名和数组指针可以当做一个东西用&#xff0c;但两者之间的含义是不同的。 二维数组名是一个指向数组中所有元素的指针&#xff0c;而数组指针是一个行指针。体现在sizeof()上的不同。 #include <iostream> using namespace std; int main() {// a是一个二维数组…

HA03-fence设置

目录 一、fence作用 二、在集群里添加fence 2.1、fence和node之间的通信 2.2、配置fence 2.3、node上安装fence代理 2.4、在集群中添加fence 2.5、fence动作 一、fence作用 HA01理解集群那篇文章中讲过&#xff0c;当集群中某个node出现故障&#xff0c;各个node争抢集…

springboot整合Quartz实现动态配置定时任务

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请注明出处。 https://blog.csdn.net/liuchuanhong1/article/details/60873295前言 在我们日常的开发中&#xff0c;很多时候&#xff0c;定时任务都不是写死的&#xff0c;而是写到数据库中&#xff0c;从而实现定时任…

SQLserver 常用函数适用方法(转载)

SQL Server 常用函数使用方法(持续更新) 之前就想要把一些 SQL 的常用函数记录下来&#xff0c;不过一直没有实行。。。嘿嘿。。。 直到今天用到substring()这个函数&#xff0c;C# 里面这个方法起始值是 0&#xff0c;而 SQL 里面起始值是 1。傻傻分不清楚。。。 这篇博客作为…

“接口”的定义及其与“抽象类”的区别

我们知道一个有抽象方法的类是抽象类&#xff0c;而当一个类中全是抽象方法时&#xff0c;就可以定义为接口&#xff08;interface&#xff09; 接口命名通常以“I”开头&#xff1b;接口中的方法默认有public abstract&#xff08;所以可以省略&#xff09;&#xff1b;接口中…

Linux13-计划任务crontab

目录 一、用户计划任务 1.1、定义用户计划任务的命令crontab 1.2、作业格式 二、系统计划任务cron 三、管理临时文件 3.1、systemd-tmpfiles命令与配置文件 3.2、用法举例 一、用户计划任务 1.1、定义用户计划任务的命令crontab Linux提供了针对周期性作业的crond守护…

Java线程安全 关于原子性与volatile的试验

1. 变量递增试验 1 static /*volatile*/ int shared0;//volatile也无法保证操作的原子性2 static synchronized int incrShared(){//不加synchronized的话&#xff0c;shared最终结果值小于预期3 return shared;4 }5 public static void testIncrShare…

Python学习 day01打卡

1.Python : 是一门解释型 弱类型 高级开发编程语言. 2.第一个Python程序的编写: print ("hell,world") 3.变量:把程序运行过程中的值储存起来,方便后面的程序调用. 4.变量的命名要求: 1,只能是数字或字母或下划线组成; 2,不能是数字开头,也不能全是数字; 3,不能是Pyt…

Window10安装pycocotools

之前在linux系统下安装pycocotools时非常简单&#xff0c;只需&#xff1a; pip install pycocotools 如果在windows下通过以上指令安装会报错&#xff0c;网上查询后都说需要安装C编译器或者VS环境&#xff0c;等等&#xff0c;其实没必要那么麻烦&#xff0c;直接通过一下指令…

有名内部类 匿名内部类

内部类&#xff0c;从名字上就可以看出&#xff0c;是定义在外部类里的类&#xff0c;可以更加详细地说明某个事物的特征&#xff0c;举个例子&#xff0c;就像一个人&#xff08;把他定义为一个类[外部类]&#xff09;&#xff0c;这个人有大脑、肝脏、心脏等器官&#xff0c;…

Linux14-进程的优先级nice

目录 一、进程优先级和nice的概念 二、显示nice级别 三、更改nice级别 一、进程优先级和nice的概念 CPU管理进程的是按照时间片的方式来划分CPU的资源。CPU可以把1s划分成若干份&#xff0c;轮询时间片。通过设置进程的优先级&#xff0c;让某些重要的进程优先并且长时间获…

ConcurrentHashMap实现原理及源码分析

ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现&#xff08;若对HashMap的实现原理还不甚了解&#xff0c;可参考我的另一篇文章HashMap实现原理及源码分析&#xff09;&#xff0c;ConcurrentHashMap在并发编程的场景中使用频率非常之高&#xff0c;本…

Gulp的简单使用

我比较喜欢使用Gulp&#xff0c;因为简单好用&#xff01; 今天的任务是&#xff1a;使用Gulp来压缩 jQuery源码&#xff0c;各输出一个压缩的和未压缩的版本 第一步&#xff1a;安装 cnpm install gulp --save-dev cnpm install gulp-rename gulp-uglify --save-dev 第二步&…

Mask_RCNN安装与踩过的坑

一、Mask_RCNN下载 https://www.bilibili.com/video/BV1M7411x7is?t629&p5 按照上述教程的话&#xff0c;安装的是ballon例子的Mask_RCNN。这个理解的话&#xff0c;修改Mask_RCNN也就很简单了。 1.2 更新驱动 强烈建议更新驱动&#xff0c;因为以后如果装pytorch的话&…

Lambda表达式的运用(详尽版)

Lambda表达式是Java JDK8发布的最新特性&#xff0c;它极大地简化了定义匿名内部类时要写的代码&#xff0c;使代码变得更加简洁紧凑。 我们知道定义匿名内部类时要紧跟创建对象&#xff0c;接着要实现接口或重写父类中的抽象方法&#xff0c;例如&#xff1a; public interfa…

Linux15-SELinux

目录 一、查看和配置SELinux生效 二、SELinux上下文 2.1、查看SELinux上下文 2.2、semanagerestorecon命令更改SELinux上下文 三、SELinux布尔值 四、SELinux故障排除 Security Enhanced Linux&#xff08;SELinux&#xff09;是一个额外的系统安全层&#xff0c;是一种强…

Java学习(三)JSP学习1

一、 理解JSP技术 JSP全名为Java Server Pages&#xff0c;中文名叫java服务器页面&#xff0c;其根本是一个简化的Servlet设计&#xff0c;它 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术&#xff0c;它是在传统的网…

通过Java代码实现图片的放大和缩小

本文介绍的例子在Android安卓手机上测试通过。 先看看效果吧。可以看到这个开发好的安卓应用有三个按钮&#xff1a;Zoom In缩小图片&#xff0c;Zoom Out放大图片和Save保存。 初始页面&#xff1a; 可以在左边边框自由移动图片&#xff0c;图片下面的调试界面debug screen会显…

ProxyError: Conda cannot proceed due to an error in your proxy configuration

右键网络---->属性---->左下角的Internet选项---->链接---->局域网设置 将所以的对号去掉

Java访问权限(详尽版)

Java中的访问权限一共有四种&#xff1a;public 、protected 、 默认的 、private&#xff08;访问范围由大到小&#xff09;&#xff1a; 先说public和private这两种&#xff0c;因为这两种最容易理解&#xff1a; public&#xff1a;在整个项目中都可以被访问&#xff0c;无…

suse11sp4配置vnc显示gnome

目录 一、suse11sp4配置vnc默认显示xterm 二、suse11sp4配置vnc显示gnome桌面 一、suse11sp4配置vnc默认显示xterm 今天给一台比较老的服务器配置vnc服务&#xff0c;操作系统为suse11sp4。该服务器已经安装了gnome界面和vnc。vncpasswd设置密码&#xff0c;vncserver :1设置…

ubuntu18.04安装CUDA10.0

1、更新驱动 对于CUDA10.0&#xff0c;要求驱动版本大于410.48&#xff0c;因此首先要更新驱动 ubuntu-drivers devices&#xff08;查看所有驱动&#xff09; sudo ubuntu-drivers autoinstall&#xff08;自动安装最适合的驱动&#xff09; 查看驱动版本 nvidia-smi 2、下载…

运行时异常 检查时异常

Throwable是Java程序中所有异常对象的根基类&#xff0c;而Throwable是从Object类直接继承来的&#xff0c; Throwable可分为error&#xff08;错误&#xff09;和 Exception&#xff08;异常&#xff09;。error表示的是JDK出了问题&#xff0c;与写的代码无关&#xff1b;而E…

Atitit. Attilax企业框架 AEF的发展里程总结

Atitit. Attilax企业框架 AEF的发展里程总结 1. Attilax企业框架and框架发展思想 1 2. AEF框架 2 2.1. 多语言支持&#xff0c;涉及的语言 java ,c# php python js c 2 2.2. 业务模块支持 2 2.3. 技术组件支持 2 2.4. 平台化支持 2 2.5. 插件化支持 2 3. AEF框架发展里程 3 3.1…

1.3创建项目「深入浅出ASP.NET Core系列」

控制台创建项目 dotnet new --help 使用控制台采集项目&#xff0c;务必要熟练使用命令&#xff0c;--help是命令帮助的指明灯&#xff0c;在你无法google的时候&#xff0c;可以离线状态最快的帮助到你。 根据模板名称&#xff0c;我们可以创建各种模板&#xff0c;比如 dotne…

Linux16-防火墙与firewalld

目录 一、netfilter与firewalld 二、firewalld与firewall-cmd、firewall-config 2.1、预定义区域 2.2、预定义服务 2.3、firewall-cmd和firewall-config配置工具 2.4、富规则rich-rule 一、netfilter与firewalld linux内核有个防火墙模块netfilter&#xff0c;它是一个 …

throws throw 自定义异常

我们知道当程序遇到异常时除了用try-catch-finally来捕获异常外&#xff0c;还可以用throws和throw去抛出异常&#xff0c;使用异常处理可以定位问题所在处&#xff0c;方便修改程序代码&#xff1a; 例如利用try-catch-finally来捕获异常&#xff1a; public class Test{pub…