2013年8月16日星期五

Linux 高可用(HA)集群之Pacemaker详解

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
Linux 高可用(HA)集群之Pacemaker详解  阅读原文»

Linux 高可用(HA)集群之Pacemaker详解

大纲

说明:本来我不想写这篇博文的,因为前几篇博文都有介绍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支持主流的操作系

Java图形界面事件监听处理之四种方法  阅读原文»

Java图形界面事件监听处理之四种方法

我自2009年上大学开始学习Java,由于JavaSE的GUI编程不是很占优势,因而也没有重视过,尤其是事件监听处理。综合看过很多Java讲师的视频,以及网上相关资料,特综合一下,望对大家有帮助,尤其是Java事件编程初学者,愿大家看后不再犹豫用哪种方法而发愁。

大家先看看简单的应用程序截图,考虑一下如何实现。

截图如图一、图二、图三

图一 初始界面截图

图二 蓝色按钮事件处理

图三 弹窗按钮事件处理

在此列举四种方法:

  1. 自身类实现ActionListener接口,作为事件监听器

  2. 通过匿名类处理

  3. 通过内部类处理

  4. 通过外部类处理

下面依次介绍:

第一种:自身类实现ActionListener接口,作为事件监听器。

这种方法是最基本的,也是初学者经常使用的,我当初即是如此。

  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();      }  }  

第二种,通过匿名类处理。

这是比较好的一种方法,我是在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 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()

阅读更多内容

没有评论:

发表评论