大纲
说明:本来我不想写这篇博文的,因为前几篇博文都有介绍pacemaker,但是我觉得还是得写一下,试想应该会有博友需要,特别是pacemaker 1.1.8(CentOS 6.4)以后,pacemaker 有些特别要注意的变化 ,最后想说,敬开源,敬开源精神。(pacemaker官方网站:http://clusterlabs.org/)
一、pacemaker 是什么
二、pacemaker 特点
三、pacemaker 软件包供应商
四、pacemaker 版本信息
五、pacemaker 配置案例
六、pacemaker 支持集群架构
七、pacemaker 内部结构
八、pacemaker 源代码组成
九、Centos6.4+Corosync+Pacemaker 实现高可用的Web集群
一、pacemaker 是什么
1.pacemaker 简单说明
pacemaker(直译:心脏起搏器),是一个群集资源管理器。它实现最大可用性群集服务(亦称资源管理)的节点和资源级故障检测和恢复使用您的首选集群基础设施(OpenAIS的或Heaerbeat)提供的消息和成员能力。
它可以做乎任何规模的集群,并配备了一个强大的依赖模型,使管理员能够准确地表达群集资源之间的关系(包括顺序和位置)。几乎任何可以编写脚本,可以管理作为心脏起搏器集群的一部分。
我再次说明一下,pacemaker是个资源管理器,不是提供心跳信息的,因为它似乎是一个普遍的误解,也是值得的。pacemaker是一个延续的CRM(亦称Heartbeat V2资源管理器),最初是为心跳,但已经成为独立的项目。
2.pacemaker 由来
大家都知道,Heartbeat 到了V3版本后,拆分为多个项目,其中pacemaker就是拆分出来的资源管理器。
-
Heartbeat 3.0拆分之后的组成部分:
-
Heartbeat:将原来的消息通信层独立为heartbeat项目,新的heartbeat只负责维护集群各节点的信息以及它们之前通信;
-
Cluster Glue:相当于一个中间层,它用来将heartbeat和pacemaker关联起来,主要包含2个部分,即为LRM和STONITH。
-
Resource Agent:用来控制服务启停,监控服务状态的脚本集合,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。
-
Pacemaker : 也就是Cluster Resource Manager (简称CRM),用来管理整个HA的控制中心,客户端通过pacemaker来配置管理监控整个集群。
二、pacemaker 特点
-
主机和应用程序级别的故障检测和恢复
-
几乎支持任何冗余配置
-
同时支持多种集群配置模式
-
配置策略处理法定人数损失(多台机器失败时)
-
支持应用启动/关机顺序
-
支持,必须/必须在同一台机器上运行的应用程序
-
支持多种模式的应用程序(如主/从)
-
可以测试任何故障或群集的群集状态
注:说白了意思就是功能强大,现在最主流的资源管理器。
三、pacemaker 软件包供应商
目前pacemaker支持主流的操作系 我自2009年上大学开始学习Java,由于JavaSE的GUI编程不是很占优势,因而也没有重视过,尤其是事件监听处理。综合看过很多Java讲师的视频,以及网上相关资料,特综合一下,望对大家有帮助,尤其是Java事件编程初学者,愿大家看后不再犹豫用哪种方法而发愁。 大家先看看简单的应用程序截图,考虑一下如何实现。 截图如图一、图二、图三 图一 初始界面截图 图二 蓝色按钮事件处理 图三 弹窗按钮事件处理 在此列举四种方法: 自身类实现ActionListener接口,作为事件监听器 通过匿名类处理 通过内部类处理 通过外部类处理 下面依次介绍: 第一种:自身类实现ActionListener接口,作为事件监听器。 这种方法是最基本的,也是初学者经常使用的,我当初即是如此。 第二种,通过匿名类处理。 这是比较好的一种方法,我是在2011年开始使用这种方法的。 第三种:通过内部类处理。 该种方法更符合面向对象编程的思想。 第四种:通过外部类处理 这种我个人不常用。 import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; public class EventListener1 extends JFrame implements ActionListener { private JButton btBlue, btDialog; /** * Java事件监听处理��自身类实现ActionListener接口,作为事件监听器 * * @author codebrother */ // 构造方法 public EventListener1() { // 设置标题栏内容 setTitle("Java GUI 事件监听处理"); // 设置初始化窗口位置 setBounds(100, 100, 500, 350); // 设置窗口布局 setLayout(new FlowLayout()); // 创建按钮对象 btBlue = new JButton("蓝色"); // 将按钮添加事件监听器 btBlue.addActionListener(this); // 创建按钮对象 btDialog = new JButton("弹窗"); // 将按钮添加事件监听器 btDialog.addActionListener(this); // 把按钮容器添加到JFrame容器上 add(btBlue); add(btDialog); // 设置窗口可视化 setVisible(true); // 设置窗口关闭 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } // ***************************事件处理*************************** @Override public void actionPerformed(ActionEvent e) { // 判断最初发生Event事件的对象 if (e.getSource() == btBlue) { // 获得容器 Container c = getContentPane(); // 设置容器背景颜色 c.setColor.BLUE); } else if (e.getSource() == btDialog) { // 创建JDialog窗口对象 JDialog dialog = new JDialog(); dialog.setBounds(300, 200, 400, 300); dialog.setVisible(true); } } // ***************************主方法*************************** public static void main(String[] args) { new EventListener1(); } }
import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; public class EventListener2 extends JFrame { private JButton btBlue, btDialog; /** * Java事件监听处理��匿名类处理 * * @author codebrother */ // 构造方法 public EventListener2() { // 设置标题栏内容 setTitle("Java GUI 事件监听处理"); // 设置初始化窗口位置 setBounds(100, 100, 500, 350); // 设置窗口布局 setLayout(new FlowLayout()); // 创建按钮对象 btBlue = new JButton("蓝色"); // 添加事件监听器(此处即为匿名类) btBlue.addActionListener(new ActionListener() { // 事件处理 @Override public void actionPerformed(ActionEvent e) { // 获得容器,设置容器背景颜色 Container c = getContentPane(); c.setColor.BLUE); } }); // 创建按钮对象,并添加事件监听器 btDialog = new JButton("弹窗"); btDialog.addActionListener(new ActionListener() { // 事件处理 @Override public void actionPerformed(ActionEvent e) { // 创建JDialog窗口对象 JDialog dialog = new JDialog(); dialog.setBounds(300, 200, 400, 300); dialog.setVisible(true); } }); // 把按钮容器添加到JFrame容器上 add(btBlue); add(btDialog); // 设置窗口可视化 setVisible(true); // 设置窗口关闭 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } // ***************************主方法*************************** public static void main(String[] args) { new EventListener2(); } }
import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; public class EventListener3 extends JFrame { private JButton btBlue, btDialog; /** * Java事件监听处理��内部类处理 * * @author codebrother */ // 构造方法 public EventListener3() { // 设置标题栏内容 setTitle("Java GUI 事件监听处理"); // 设置初始化窗口位置 setBounds(100, 100, 500, 350); // 设置窗口布局 setLayout(new FlowLayout()); // 创建按钮对象 btBlue = new JButton("蓝色"); // 添加事件监听器对象(面向对象思想) btBlue.addActionListener(new ColorEventListener()); btDialog = new JButton("弹窗"); btDialog.addActionListener(new DialogEventListener()); // 把按钮容器添加到JFrame容器上 add(btBlue); add(btDialog); // 设置窗口可视化 setVisible(true); // 设置窗口关闭 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } // 内部类ColorEventListener,实现ActionListener接口 class ColorEventListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { Container c = getContentPane(); c.setColor.BLUE); } } // 内部类DialogEventListener,实现ActionListener接口 class DialogEventListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // 创建JDialog窗口对象 JDialog dialog = new JDialog(); dialog.setBounds(300, 200, 400, 300); dialog.setVisible(true); } } // ***************************主方法*************************** public static void main(String[] args) { new EventListener3(); } }
import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; public class EventListener4 extends JFrame { private JButton btBlue, btDialog; /** * Java事件监听处理��外部类处理 * * @author codebrother */ // 构造方法 public EventListener4() { // 设置标题栏内容 setTitle("Java GUI 事件监听处理"); // 设置初始化窗口位置 setBounds(100, 100, 500, 350); // 设置窗口布局 setLayout(new FlowLayout()); // 创建按钮对象 btBlue = new JButton("蓝色"); // 将按钮添加事件监听器 btBlue.addActionListener(new ColorEventListener(this)); // 创建按钮对象 btDialog = new JButton("弹窗"); // 将按钮添加事件监听器 btDialog.addActionListener(new DialogEventListener()
没有评论:
发表评论