欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


CS1.5服务器连接常见问题解决
Linux系统分区知识点归纳
360云盘等级有什么用
ubuntu系统下删除软件的教程
Windows环境下Java加载DLL
Windows下统计行数的命令
windows下安装zookeeper
linux进程创建
linux中exit()和_exit区别
360云盘忘记帐号密码怎么办
基于corosync+pacemaker的nginx高可用集群安装配置
【 来源:网络 】【 点击:2 】 【 发布时间:2017_03_03 08:59:59 】

   一、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上去了。

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号
淳安分站 淳安分站