• 关注官方微信 微信公众号 添加方式:
    1:搜索微信号(gogolinux
    2:扫描左侧二维码
  • 登录 注册
  • 一起学LINUX - GOGOLINUX

    查看: 218|回复: 6
    打印 上一主题 下一主题

    基于corosync+pacemaker的nginx高可用集群安装配置

    [复制链接]

    2

    主题

    2

    帖子

    20

    积分

    新手上路

    Rank: 1

    积分
    20
    跳转到指定楼层
    楼主
    发表于 2019-4-17 10:37:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    ?  一、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测试文件??
    ? ?? ?? ?? ???
    ? ?? ?? ?? ???
    ? ?? ?? ?? ?# vim /var/www/html/index.php??//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上去了。
    分享到:

    0

    主题

    593

    帖子

    1308

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1308
    沙发
    发表于 2019-4-21 18:15:44 | 只看该作者

    0

    主题

    593

    帖子

    1308

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1308
    板凳
    发表于 2019-4-21 23:01:53 | 只看该作者

    0

    主题

    271

    帖子

    640

    积分

    高级会员

    Rank: 4

    积分
    640
    地板
    发表于 2019-4-22 01:53:10 | 只看该作者

    0

    主题

    272

    帖子

    644

    积分

    高级会员

    Rank: 4

    积分
    644
    5#
    发表于 2019-4-22 05:15:32 | 只看该作者

    0

    主题

    593

    帖子

    1308

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1308
    6#
    发表于 2019-4-22 06:32:02 | 只看该作者

    0

    主题

    271

    帖子

    640

    积分

    高级会员

    Rank: 4

    积分
    640
    7#
    发表于 2019-4-22 07:26:21 | 只看该作者
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    官方微博:

    官方头条号:

    官方微信

    手机访问:

    官方微信

    QQArchiver 手机版 小黑屋 一起学LINUX - GOGOLINUX 闽ICP备18025837号-1 Discuz! X3.4 Powered by ? 2001-2013 Comsenz Inc. 

    本站资源均来自互联网或会员发布,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!

    快速回复 快速发帖 返回顶部 返回列表