• 云途科技成立于2010年 - 专注全球跨境电商服务器租赁托管!
  • 帮助中心

    您可以通过下方搜索框快速查找您想知道的问题

    corosync pacemaker nginx 高可用 安装配置

      in  unix      Tags: 

    一、corosync、pacemaker介绍

    corosync是用于高可用环境中的提供通讯服务的,它位于高可用集群架构中的底层(Message Layer),扮演着为各节点(node)之间提供心跳信息传递这样的一个角色;

    pacemaker是一个开源的高可用资源管理器(CRM),位于HA集群架构中资源管理、资源代理(RA)这个层次,它不能提供底层心跳信息传递的功能,它要想与对方节点通信需要借助底层的心跳传递服务,将信息通告给对方。通常它与corosync的结合方式有两种:

    pacemaker作为corosync的插件运行;
    pacemaker作为独立的守护进程运行;

    corosync与pacemaker组成的是高可用的容器,需要高可用的服务,可随时添到容器中,或者从容器中删除。灵活性很强。

    heartbeat我也用过,请参考:heartbeat mysql双机互备实现高可用 安装配置

    用过corosync与pacemaker后,个人推荐corosync与pacemaker。

    二,服务器说明

    192.168.10.130   虚拟ip
    192.168.10.103   node1
    192.168.10.219   node2

    三,安装配置corosync,pacemaker,crmsh

    1,node1和node2上安装

    # yum install corosync pacemaker python-dateutil redhat-rpm-config pssh
    
    # rpm -ivh http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/crmsh-2.1-1.6.x86_64.rpm

    2,node1和node2,修改主机名

    # vim /etc/sysconfig/network
    HOSTNAME=node1   //103机器node1,219机器就是node2
    
    # vim /etc/hosts     //添加以下内容
    192.168.10.103 node1
    192.168.10.219 node2
    
    # /etc/init.d/network restart   //重启网络

    3,node1配置corosync

    [root@node1 corosync]# cp corosync.conf.example corosync.conf   
    
    [root@node1 corosync]# cat /etc/corosync/corosync.conf |awk '{if($0 !~ /^$/ && $0 !~ /#/) {print $0}}'
    compatibility: whitetank //兼容08.以前的版本
    totem { //totem定义集群内各节点间是如何通信的,totem本是一种协议,专用于corosync专用于各节点间的协议,协议是有版本的
        version: 2 //totme 的版本
        secauth: off //安全认证是否打开,最好打开
        threads: 0 //用于安全认证开启并行线程数
        interface {
            ringnumber: 0 //环号码,如果一个主机有多块网卡,避免心跳信息回流
            bindnetaddr: 192.168.10.0 //网络地址(节点所在的网络地址段)
            mcastaddr: 239.255.1.1 //广播地址(系统自带的广播地址,没作任何修改)
            mcastport: 5405    //多播占用的端口
            ttl: 1 //只向外一跳心跳信息,避免组播报文环路
        }
    }
    
    logging {
        fileline: off
        to_stderr: no //日志信息是否发往错误输出(否)
        to_logfile: yes //是否记录日志文件
        to_syslog: yes //是否记录于syslog日志-->此类日志记录于/var/log/message中
        logfile: /var/log/cluster/corosync.log //日志存放位置
        debug: off //只要不是为了排错,最好关闭debug,它记录的信息过于详细,会占用大量的磁盘IO.
        timestamp: on //记录日志的时间戳
        logger_subsys {
            subsys: AMF
            debug: off
        }
    }
    amf {
        mode: disabled
    }
    service {
        ver:0
        name:pacemaker     //corosync启动后会自动启动pacemaker
    }
    aisexec {    //启用ais功能时以什么身份来运行,默认为root,aisexec区域也可以不写
        user :root
        group:root
    }

    4,node1上用corosync-keygen命令来生成密钥

    [root@node1 corosync]# corosync-keygen  //在/etc/corosync目录下生成一个文件,authkey

    网上查资料时,很多资料都说要,配置各节点ssh互信(就是ssh不要密码登录),经证实根本不需要,多此一举。

    5,将node1上配置文件复制到node2,nodeN上

    [root@node1 corosync]# scp authkey corosync.conf root@node2:/etc/corosync/
    ...
    [root@node1 corosync]# scp authkey corosync.conf root@nodeN:/etc/corosync/   //如果有很多节点都要copy

    6,node1和node2,启动并查看

    # chkconfig Nginx off      //关闭开机启动
    # /etc/init.d/Nginx stop   //停止Nginx,启动corosync时,会启动Nginx,前提是nginx高可用配置成功后
    
    # /etc/init.d/corosync start  //启动
    
    # netstat -na |grep 5405    //启动成功了
    udp 0 0 192.168.10.103:5405 0.0.0.0:*
    udp 0 0 239.255.1.1:5405 0.0.0.0:* 
    
    # crm status         //查看节点状态

    用crm status查看状态时,如果报Could not establish cib_ro connection: Connection refused (111) ,说明本节点,连不上其他节点,经个人测试,解决办法如下:

    1,安全配置有问题,如iptables和selinux,配置成功前最好关闭iptables和selinux

    2,corosync-keygen命令生成文件,要在修改主机名成功以后

    重启,关闭不了,一直处于Waiting for corosync services to unload:..........,这个问题,我在网上查一了,要到官方网站上下个补丁打一下,补丁我也打了,没成功。解决办法如下:pkill -9 corosync,在这里要注意,这个问题很影响用户体验,如果不把corosync关闭,直接关机要很长很长时间才能关闭,坑爹

    7,在node1上配置crmsh

    # crm configure property stonith-enabled=false //禁用stonith-enable
    
    # crm configure property no-quorum-policy=ignore //忽略投票规则
    
    /**
     * primitive:定义一资源所使用的命令
     * webip:为资源起一个名字
     * ocf:heartbeat;IPaddr:所使用资源代理的类别,由谁提供的那一个代理程序
     * op monitor 对webip做监控
     * interval:间隔时间
     * timeout:超时时间
     * on-fail:失败自起
     */
    # crm configure primitive webip ocf:heartbeat:IPaddr params ip=192.168.10.130 op monitor interval=30s timeout=20s on-fail=restart
    
    # crm configure primitive nginx_res lsb:nginx //那些在/etc/init.d/*的脚本就是属于lsb的
    
    /**
     * 定义排列约束
     * colocation:排列约束命令
     * nginx_web : 约束名
     * inf:#(可能性,inf表示永久在一起,也可以是数值)
     * webip Nginx_res:#资源名称
     */
    # crm configure colocation Nginx_web inf: Nginx_res webip
    
    /**
     * 定义资源启动顺序
     * order : 顺序约束的命令
     * Nginx_after_ip : 约束ID
     * mandatory: #指定级别(此处有三种级别:mandatory:强制, Optional:可选,Serialize:序列化)
     * webip nginx_res:#资源名称,这里书写的先后顺序相当重要
     */
    # crm configure order nginx_after_ip mandatory: webip nginx_res
    
    # crm configure verify //审核
    # crm configure commit //提交
    # crm configure show //显示
    
    ===================上为shell命令下操作,下为crm命令行下操作,功能一样,看下图============================
    
    property stonith-enabled=false
    no-quorum-policy=ignore
    primitive webip ocf:heartbeat:IPaddr params ip=192.168.10.130 op monitor interval=30s timeout=20s on-fail=restart
    primitive nginx_res lsb:nginx
    colocation nginx_web inf: nginx_res webip
    order nginx_after_ip mandatory: webip nginx_res
    verify
    commit
    show

    corosync pacemaker高可用的难点就是crmsh的命令行操作,子命令太多,下一篇文章,会详细的说一下crmsh的命令,以及参数

    crm 命令对比

    crm 命令对比

    四,测试corosync,pacemaker高可用

    1,查看一下各节点是否online状态

    # crm status   //查看各节点状态
    Last updated: Wed Nov 26 23:46:23 2014
    Last change: Wed Nov 26 22:27:00 2014
    Stack: classic openais (with plugin)
    Current DC: node2 - partition with quorum
    Version: 1.1.11-97629de
    2 Nodes configured, 2 expected votes
    2 Resources configured
    
    Online: [ node1 node2 ]
    
     webip (ocf::heartbeat:IPaddr): Started node1
     nginx_res (lsb:nginx): Started node1

    2,建立测试文件

    # vim /var/www/html/index.php  //node1测试文件
    <?php
    echo "this is node1";
    ?>
    
    # vim /var/www/html/index.php //node2测试文件
    <?php
    echo "this is node2";
    ?>

    3,访问虚拟ip:192.168.10.130,如果请求在node1上

    # crm node standby   //将node1上运行,将node1停用,看请求会不会转到node2上面

    在访问192.168.10.130,你会发现请求转到node2上去了。下面我们返过来操作。

    # crm node standby   //node2上运行,使用node2停用
    
    # crm node online   //在node1上运行,激活node1

    在访问192.168.10.130,你会发现,请求转到node1上去了。



    • 外贸虚拟主机

      1GB硬盘

      2个独立站点

      1000M带宽

      不限制流量

      美国外贸专用虚拟主机,cPanel面板,每天远程备份.
      服务器配置:2*E5 32核,96GB 内存,4*2TB 硬盘 RAID10 阵列.

      ¥180/年

    • 美国/荷兰外贸VPS

      2核CPU

      1G内存

      30硬盘

      10M带宽

      美国/荷兰外贸云服务器,专注外贸服务器行业12年.
      服务器配置:2*E5 32核,96GB 内存,4*2TB 硬盘 RAID10 阵列.

      ¥99/月

    • 全球外贸服务器

      8核CPU

      32G内存

      1TB硬盘

      1000M带宽

      已部署数据中心:美国洛杉矶/亚特兰大、荷兰、加拿大、英国伦敦、德国、拉脱维亚、瑞典、爱沙尼亚
      自有机柜(全球九大数据中心),稳定在线率:99.9%

      ¥999/月 原价1380

    7*24小时 在线提交工单

    如果您的问题没有得到解决,推荐您在线提交工单,我们的客服人员会第一时间为您解决问题

    展开