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。集群的故障转移是这样实现的
- 如果node3挂了被node1、2心跳检测到
- 那么node1、2就更新CIB的信息
- PE根据CIB的信息决策其余node中哪个node最适合接管,比如node2接管
- PE决定node2上的CRM作为新的DC
- node2变成活跃节点,node2的CRM命令LRM启动服务
- 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模快中ÿ…

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

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

C++二维数组名与数组指针的思考
二维数组名和数组指针可以当做一个东西用,但两者之间的含义是不同的。 二维数组名是一个指向数组中所有元素的指针,而数组指针是一个行指针。体现在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理解集群那篇文章中讲过,当集群中某个node出现故障,各个node争抢集…

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

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

“接口”的定义及其与“抽象类”的区别
我们知道一个有抽象方法的类是抽象类,而当一个类中全是抽象方法时,就可以定义为接口(interface) 接口命名通常以“I”开头;接口中的方法默认有public abstract(所以可以省略);接口中…

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的话,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时非常简单,只需: pip install pycocotools 如果在windows下通过以上指令安装会报错,网上查询后都说需要安装C编译器或者VS环境,等等,其实没必要那么麻烦,直接通过一下指令…

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

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

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

Gulp的简单使用
我比较喜欢使用Gulp,因为简单好用! 今天的任务是:使用Gulp来压缩 jQuery源码,各输出一个压缩的和未压缩的版本 第一步:安装 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 按照上述教程的话,安装的是ballon例子的Mask_RCNN。这个理解的话,修改Mask_RCNN也就很简单了。 1.2 更新驱动 强烈建议更新驱动,因为以后如果装pytorch的话&…

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

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

Java学习(三)JSP学习1
一、 理解JSP技术 JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网…
通过Java代码实现图片的放大和缩小
本文介绍的例子在Android安卓手机上测试通过。 先看看效果吧。可以看到这个开发好的安卓应用有三个按钮:Zoom In缩小图片,Zoom Out放大图片和Save保存。 初始页面: 可以在左边边框自由移动图片,图片下面的调试界面debug screen会显…

ProxyError: Conda cannot proceed due to an error in your proxy configuration
右键网络---->属性---->左下角的Internet选项---->链接---->局域网设置 将所以的对号去掉

Java访问权限(详尽版)
Java中的访问权限一共有四种:public 、protected 、 默认的 、private(访问范围由大到小): 先说public和private这两种,因为这两种最容易理解: public:在整个项目中都可以被访问,无…

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

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

运行时异常 检查时异常
Throwable是Java程序中所有异常对象的根基类,而Throwable是从Object类直接继承来的, Throwable可分为error(错误)和 Exception(异常)。error表示的是JDK出了问题,与写的代码无关;而E…
Atitit. Attilax企业框架 AEF的发展里程总结
Atitit. Attilax企业框架 AEF的发展里程总结 1. Attilax企业框架and框架发展思想 1 2. AEF框架 2 2.1. 多语言支持,涉及的语言 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 使用控制台采集项目,务必要熟练使用命令,--help是命令帮助的指明灯,在你无法google的时候,可以离线状态最快的帮助到你。 根据模板名称,我们可以创建各种模板,比如 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,它是一个 …

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