实验环境:rhel6.5


lvs中的常用术语约定

主机相关:

Director:调度器

Real ServerRS,后端真正提供服务的主机。 

IP地址相关:

ClientCIP,客户端IP

Director Virtual IPVIP,调度器面向客户端的IP。由于调度器会成为单点,因此需要对调度器做高可用。由此,如果A调度器故障了,此地址是要转移到B调度器上的。

Director IPDIP,调度器面向后端的IP

Real IPRIP,后端服务器的IP

fullnat无非就是nat,但DIPRIP之间可以经过路由进行转发。当请求到来时,源目IP分别为CIPVIP。到达调度器后,还是由ipvs挑选一台主机,但由于DIPRIP并不在同一个网段,所以ipvs会将请求的报文源目IP分别改为DIPRIPRS收到报文后,就会将响应报文发给DIP,这是毋庸置疑的。调度器在收到报文,通过在内部追踪nat表以后,将响应报文的源目IP分别改为VIPCIP,于是报文就发给客户端。这种源目IP都进行修改的LVS类型就是fullnat

 lvs之fullnat与pacemaker的构建_pacemaker

总结:通过请求报文的源地址为DIP,目标为RIP来实现转发。对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发。

 

此架构能扛住每秒20W的并发,如果对并发要求不是特别的高,但又希望使用更复杂的内网模型,fullnat是一个不错的选择。但内核不支持fullnat,要从内核编译,因此安装时间不短。

一.fullnat模式构建

下载安装kernel

#rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm

#yum install -y rpm-build rng-tools

#rngd -r /dev/urandom  //加快编译速度

#cd ~/rpmbuild/SPECS

#rpmbuild -bp kernel.spec   //解开源码包并打补丁,即只做准备

 

这时会提示缺很多组件,安装之。

#rpmbuild -bp kernel.spec

#cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6

#tar zxf Lvs-fullnat-synproxy.tar.gz

#cd lvs-fullnat-synproxy

#cp lvs-2.6.32-220.23.1.el6.patch ../linux-2.6.32-220.23.1.el6.x86_64/

#cd linux-2.6.32-220.23.1.el6.x86_64/

#yum install -y patch

#vim .config

CONFIG_OUTPUT_FORMAT改为“elf64-x86_64

CONFIG_ARCH_DEFCONFIG=arch/x86/configs/x86_64_defconfig

#vim Makefile

EXTRAVERSION改为-220.23.1.el6

#patch -p1<lvs-2.6.32-220.23.1.e16.patch  //选项要忽略掉第一层目录,从当前目录开始查找,-p0 选项要从当前目录查找目的文件(夹)

#cd configs

#make -j4  //以四核编译

漫长等待……

#make modules_install

#make install

#vim /boot/grub/grub.conf

default改为,默认启动新内核

#reboot

 

#tar zxf lvs-tools.tar.gz -C ~

安装keepalived 

#cd ~/tools/keepalived

#./configure --with-kernel-dir=/lib/modules/`uanme -r`/build

#make && make install

安装ipvsadm

#cd ~/tools/ipvsadm

#make && make install

  

pacemaker配置

 

pacemaker是一个群集资源管理器。它实现最大可用性群集服务(亦称资源管理)的节点和资源级故障检测和恢复使用您的首选集群基础设施(OpenAIS的或Heaerbeat)提供的消息和成员能力。它可以做乎任何规模的集群,并配备了一个强大的依赖模型,使管理员能够准确地表达群集资源之间的关系(包括顺序和位置)。几乎任何可以编写脚本,可以管理作为心脏起搏器集群的一部分。pacemaker作为一个资源管理器,不提供心跳信息。pacemaker是一个延续的CRM(亦称Heartbeat V2资源管理器),最初是为心跳,但已经成为独立的项目。

Heartbeat 到了V3版本后,拆分为多个项目,其中pacemaker就是拆分出来的资源管理器。

Heartbeat 3.0拆分之后的组成部分:

·Heartbeat:将原来的消息通信层独立为heartbeat项目,新的heartbeat只负责维护集群各节点的信息以及它们之前通信;

·Cluster Glue:相当于一个中间层,它用来将heartbeatpacemaker关联起来,主要包含2个部分,即为LRMSTONITH

·Resource Agent:用来控制服务启停,监控服务状态的脚本集合,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。

Pacemaker : 也就是Cluster Resource Manager (简称CRM),用来管理整个HA的控制中心,客户端通过pacemaker来配置管理监控整个集群。

 

安装

server1server2

#yum install -y pacemaker corosync

 

Coreosync:实现HA心跳信息传输。在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它是一个新兴的软件,2008年推出,但其实它并不是一个真正意义上的新软件,在2002年的时候有一个项目Openais它由于过大,分裂为两个子项目,其中可以实现HA心跳信息传输的功能就是Corosync ,它的代码60%左右来源于Openais. Corosync可以提供一个完整的HA功能,但是要实现更多,更复杂的功能,那就需要使用Openais了。Corosync是未来的发展方向。在以后的新项目里,一般采用Corosync,而hb_gui可以提供很好的HA管理功能,可以实现图形化的管理。另外相关的图形化有RHCS的套件luci+ricci.

server1上, 

#cd /etc/corosync/

#cp corosync.conf.example corosync.conf

#vim corosync.conf

  bindnetaddr: 172.25.9.0  #设定网段

  mcastaddr: 226.94.1.1    #多波地址

  mcastport5405          #多波端口

service{

    name:pacemaker   #添加pacemaker服务

    ver:0    #0为启动corsync时自动启动pacemaker服务,1为不接管服务

}

 

#/etc/init.d/corosync start

 

server2上执行同样操作。

pacemaker本身只是一个资源管理器,我们需要一个接口才能对pacemker上的资源进行定义与管理,而crmsh即是pacemaker的配置接口,从pacemaker 1.1.8开始,crmsh 发展成一个独立项目,pacemaker中不再提供。crmsh提供了一个命令行的交互接口来对Pacemaker集群进行管理,它具有更强大的管理功能,同样也更加易用,在更多的集群上都得到了广泛的应用,类似软件还有 pcs

       注:在crm管理接口所做的配置会同步到各个节点上(commit命令之后)

 

安装crm

server1server2

#yum install -y crmsh-1.2.6.0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm

资源代理类型: lsb, ocf, stonith, service

资源代理的提供程序: heartbeat , pacemaker

资源代理名称:即resource agent, 如:IPaddr2,httpd, mysql

 

crmconfigure的常用命令

        node             define a cluster node # 定义一个集群节点

        primitive        define a resource # 定义资源

        monitor          add monitor operation to a primitive # 对一个资源添加监控选项(如超时时间,启动失败后的操作)

        group            define a group # 定义一个组类型(将多个资源整合在一起)

        clone            define a clone # 定义一个克隆类型(可以设置总的克隆数,每一个节点上可以运行几个克隆)

        ms               define a master-slave resource # 定义一个主从类型(集群内的节点只能有一个运行主资源,其它从的做备用)

        order            order resources # 资源的启动的先后顺序

        property         set a cluster property # 设置集群属性

        rsc_defaults     set resource defaults # 设置资源默认属性(粘性)

        fencing_topology node fencing order # 隔离节点顺序

        op_defaults      set resource operations defaults # 设置资源默认选项

        show             display CIB objects # 显示集群信息库对

        commit           commit the changes to the CIB # 将更改后的信息提交写入CIB

        verify           verify the CIB with crm_verify # CIB语法验证

        upgrade          upgrade the CIB to version 1.0

        save             save the CIB to a file # 将当前CIB导出到一个文件中(导出的文件存于切换crm 之前的目录)

        load             import the CIB from a file # 从文件内容载入CIB

        help             show help (help topics for list of topics) # 显示帮助信息

        end              go back one level # 回到第一级(crm(live)#)

server2

#crm_mon  //监控crm

 lvs之fullnat与pacemaker的构建_corosync_02

server1

#crm configure

#show

lvs之fullnat与pacemaker的构建_corosync_03 

#property stonith-enabled=false  //关闭stonith

注:fence机制--Stonith概述

stonith是“shoot the other node in the head”的首字母简写,它是Heartbeat软件包的一个组件,它允许使用一个远程或“智能的”连接到健康服务器的电源设备自动重启失效服务器的电源,stonith设备可以关闭电源并响应软件命令,运行Heartbeat的服务器可以通过串口线或网线向stonith设备发送命令,它控制高可用服务器对中其他服务器的电力供应,换句话说,主服务器可以复位备用服务器的电源,备用服务器也可以复位主服务器的电源。

注意:尽管理论上连接到远程或“智能的”循环电源系统的电力设备的数量是没有限制的,但大多数stonith实现只使用两台服务器,因为双服务器stonith配置是最简单的,最容易理解,它能够长时间运行且不会降低系统的可靠性和高可用性。

#commit  //提交配置使配置生效,修改后没提交系统不会保存更改的信息

 

添加vip服务

#primitive vip ocf::heartbeat::IPaddr2 params ip=172.25.0.100 cidr_netmask=32 op monitor interval=30s   //定义资源vip 172.25.0.100,子网掩码为255.255.255.255 ,每隔30秒监控

#cmomit

server2上监控如下:

 lvs之fullnat与pacemaker的构建_corosync_04

忽略法定节点数:(集群不会以为节点不够而失效)

server1

#property no-quorum-policy=ignore#commi  #将修改同步到其他节点

#bye  //退出crm

#/etc/init.d/corosync stop

这时监控如下

 lvs之fullnat与pacemaker的构建_fullnat_05

server1的pacemaler关掉后vipserver2接管,体现了pacemaker的高可用性

#/etc/init.d/corosync start

添加apache服务

#primitive website ocf::heartbeat:apache params configfile=/etc/httpd/conf/httpd.conf op monitor interval=60s

#commit

注意为了监控Apache的健康状态,并在它挂掉的时候恢复Apache服务,server-status URL是可用的:

server1server2

vim /etc/httpd/conf/httpd.conf

    <Location /server-status>

        SetHandler server-status    

        Order deny,allow

        Allow from 127.0.0.1

    </Location>

粘滞服务(使得服务与vip在同一主机上运行)

colocation httpd-with-ip inf: httpd vip #方法一

lvs之fullnat与pacemaker的构建_pacemaker_06 

group apache vip httpd      #方法二

 lvs之fullnat与pacemaker的构建_fullnat_07

commi  #将修改同步到server2

 

删除服务:

#delete website-with-ip

#commit

#cd

#node //进入节点设置

#standby server2.example.com  //使server2离线

#online server2.example.com   // 使server2在线

#bye


添加drbd

#drbdadm primary sqldata

#crm configure

#primitive sqldata ocf:linbit:drbd params drbd resource=sqldata op monitor interval=60s

#ms sqldataclone sqldata meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

#bye


启动fence

#crm configure

#property stonith-enabled=true

#primitive vmfence stonith:fence_xvm params pcmk_host_map=server1.example.com:vm1;server2.example.com:vm2” //     server1.example.comserver2.example.com是节点名,vm1/2为虚拟机名称

#commit  

lvs之fullnat与pacemaker的构建_pacemaker_08

添加文件系统

#primitive sqlfs ocf:heartbeat:Filesystem params device=/dev/drbd1 directory=/var/lib/mysql fstype=ext4

#colocation sqlfs_on_drbd inf: sqlfs sqldataclone:Master #order sqlfs-after-sqldata inf: sqldataclone:promote sqlfs:start

#commit

 lvs之fullnat与pacemaker的构建_corosync_09

添加mysql

#primitive mysql lsb:mysqld op monitor interval=60s#group mygroup vip sqlfs mysql #vip,文件系统,mysql进行粘滞

#commit

lvs之fullnat与pacemaker的构建_corosync_10