Pacemaker

Pacemaker

   Pacemaker集群管理:支持fence;对服务本身也有监控。使用corosync检测结点心跳。

一、集群结点端安装软件----server1、server3

<1>yum  install pacemkaer  corosync    -y   ##可使用redhat自带套件

<2>cd /etc/corosync/

   cpcorosync.conf.example corosync.conf               ##拷贝主配置文件

<3>vim  corosync                      ##配置

compatibility:whitetank

totem {

       version: 2                            ##版本号

       secauth: off

       threads: 0

       interface {

                ringnumber: 0

                bindnetaddr: 172.25.90.0      ##集群结点网络

                mcastaddr: 226.94.1.1           ##多播地址

               mcastport: 5405                   ##多播端口

                ttl: 1

              }

}

logging {

       fileline: off

       to_stderr: no

       to_logfile: yes

       to_syslog: yes

       logfile: /var/log/cluster/corosync.log     ##日志记录位置

       debug: off

       timestamp: on

       logger_subsys {

                subsys: AMF

              }

}

   amf {

       mode: disabled

}

service {                                            ##添加模块:联动pacemaker服务

        name: pacemaker           ##添加pacemaker服务

        ver: 0                           ##版本:为0时表示可自启动pacemaker服务 ;    }                                                             为1时则表示不自启动pacemaker服务

:wq

<4>因为集群结点配置均相同,因此我们可以将配置文件拷贝至其它结点

 scp  /etc/corosync/corosync.conf  server3:/etc/corosync/

<5>/etc/init.d/corosync                          ##启动服务

  tail  -f  /var/log/cluster/corosync     ##查看日志,,看服务是否可以正常启动

<5>crm_verify              ##该命令可用来校验,根据校验结果解决软件依赖性

yum install pssh-2.3.1-2.1.x86_64.rpm crmsh-1.2.6-0.rc2.2.1.x86_64.rpm -y

 crm_mon                  #3查看结点连接状态

  crm有两种方式使用方式:交互式及非交互式

<6>使用交互式在各个集群结点上配置fence,如在server1进行

[root@server1 ~]# crm                       ##进入交互式,可以使用Table键来补齐命令

crm(live)# configure                         

crm(live)configure# propertystonith-enabled=false     ##关闭fence模块

<7>添加资源

crm(live)configure# commit                ##提交才可使命令生效

crm(live)configure# primitive vipocf:heartbeat:IPaddr2 params ip=172.25.90.190 cidr_netmask=32 op monitorinterval=30s

##创建资源vip,监控以上资源在哪个结点上运行,每个30s检测一次;

crm(live)configure# commit

crm(live)configure# show                   ##可以使用show命令来看集群内容 

node server1 \

       attributesstandby="off"

node server3

primitive vip ocf:heartbeat:IPaddr2 \

       paramsip="172.25.90.190" cidr_netmask="32" \

       opmonitor interval="30s"

property $id="cib-bootstrap-options"\

       dc-version="1.1.10-14.el6-368c726"\

       cluster-infrastructure="classicopenais (with plugin)" \

       expected-quorum-votes="2"\

       stonith-enabled="false"

crm(live)configure# bye                      ##退出交互模式

bye

Pacemaker_第1张图片

##online:表示服务正常且可以接管资源的结点;标记部分为添加的资源;started:表示该资源正运行在server1结点上

<7>pacemaker默认无回切机制。测试:使server1结点不接管资源,

(1)交互式命令

[root@server1 ~]# crm

crm(live)# node                   ##进入对结点操作模式

crm(live)node# standby         ##使其为standbt状态  

Pacemaker_第2张图片

crm(live)node# online   

##确认接管资源的结点,再使结点处于online,查看资源是否回切,

## standby:表示不接管资源,但心跳仍正常;当恢复为node时,资源不会回切

/etc/init.d/corosync  stop             ##在server1端服务宕掉服务

##若关闭服务,则为OFFline;若是一个双结点集群,当有一端宕掉服务时,另一结点则会自动丢弃资源,也不再接管,因为一个结点不能构成集群。

crm(live)configure# propertyno-quorum-policy=ignore     ##忽略集群对结点数目的控制

crm(live)configure# commit                                            ##提交使生效

[root@server1 ~]# /etc/init.d/corosync        stop        ##宕掉服务,此时server3应该接管资源

(2)非交互式命令

crm node  standby            ##使为standby状态

crm node  onine               ##使为online 状态

二、创建共享存储

<1>集群结点均添加大小相同的虚拟磁盘,不一定越大越好,磁盘越大,同步速度越慢。

<2>集群结点端安装DRBD包----server1、server3,先在一个结点操作,最终将生成的安装包拷贝给另一结点

1.tar  zxf drbd-8.4.2.tar.gz              ##解压生成目录drbd-8.4.2

2.yum  install  rpm-build  -y                 

 ##下载生成rpm安装包工具,默认目录在/root/

3.cd drbd-8.4.2

 执行./configure  --enable--with  --with-km   

##--enable--with:表示生成rpm文件;--with-km:表示内核模块

编译过程可能会有以下错误提示:

configure: error: Cannot build utilswithout flex, either install flex or pass the --without-utils option.                  

yum search  flex               ##根据提示可以先查询yum源是否有相应安装包

yum install  flex  -y        ##软件包依赖性

解决依赖性后再次编译,编译成功后,在该目录下会生成drbd.spec文件及drbd-kernel.spec文件,用来生成rpm安装包

4.生成rpm包

(1)rpmbuild  -bb  drbd.spec        

  ##先执行该命令,系统自动生成错误信息中提示的目录

 [[email protected]]# rpmbuild -bb drbd.spec

error: File/root/rpmbuild/SOURCES/drbd-8.4.2.tar.gz: No such file or directory

(2)根据提示信息,进行拷贝tar包

cp /root/drbd-8.4.2.tar.gz/root/rpmbuild/SOURCES/

(3)rpmbuild  -bb  drbd.spec         ##生成rpm包

(4)rpmbuild  -bb drbd-km.spec   ##生成内核模块

[root@server3 drbd-8.4.2]# rpmbuild  -bb  drbd-km.spec      

error: Failed build dependencies:

       kernel-develis needed by drbd-km-8.4.2-2.el6.x86_6           ##软件依赖性

(5)yum  install  kernel-devel    ##解决软件依赖性后,再次执行上条命令

rpmbuild  -bb  drbd-km.spec    

(6)cd /root/rpmbuild/RPMS/x86_64/           ##安装包生成目录

[root@server3 x86_64]# ls                  ##生成的安装包如下:

drbd-8.4.2-2.el6.x86_64.rpm                 drbd-pacemaker-8.4.2-2.el6.x86_64.rpm

drbd-bash-completion-8.4.2-2.el6.x86_64.rpm  drbd-udev-8.4.2-2.el6.x86_64.rpm

drbd-debuginfo-8.4.2-2.el6.x86_64.rpm        drbd-utils-8.4.2-2.el6.x86_64.rpm

drbd-heartbeat-8.4.2-2.el6.x86_64.rpm        drbd-xen-8.4.2-2.el6.x86_64.rpm

drbd-km-2.6.32_431.el6.x86_64-8.4.2-2.el6.x86_64.rpm

drbd-km-debuginfo-8.4.2-2.el6.x86_64.rpm

(7)rpm  -ivh  *                           ##安装

(8)scp  *  server1:/mnt 

##拷贝至server1,在server1端执行上条命令进行安装,注意路径

<3>编辑资源文件----server1、server3保证一致

(1)cd  /etc/drdb.d                  ##进入该目录编辑以.res结尾的文件,这样才能被加载

    vim  sqldata .res                ##文件名为sqldata,内容如下:

resource sqldata{                 ##定义资源,名为sqldata

meta-diskinternal;                ##选择内存存储

device/dev/drbd1;                ##设备,注意不是虚拟磁盘

syncer {                             

verify-alg sha1;                    ##算法

}

on server1 {                         ##定义结点,注意此处一定是结点的主机名

disk /dev/vdb;                     

address172.25.90.1:7789;    

}

on server3 {

disk /dev/vdb;

address172.25.90.3:7789;

}

}

<4>.磁盘同步

(1)集群结点均先初始化虚拟磁盘----server1、server3

     drbdadm create-md   sqldata                      

##注意一定是对资源初始化,所以此处一定是资源名sqldata

(2)结点均启动drbd服务---server1、server3

     两端均开启服务后,正常显示结果如下:表示正在进行同步

[root@server1 drbd.d]# /etc/init.d/drbdstart

Starting DRBD resources: [

    create res: sqldata

  prepare disk: sqldata

   adjust disk: sqldata

    adjust net: sqldata

]

(3)watch  -n  1  cat/proc/drbd           ##监控同步过程,同步结束后结果显示如下:

[root@server1 drbd.d]# cat /proc/drbd         ##在此只列出重要信息

.......

1: cs:Connected ro:Secondary/Secondaryds:Inconsistent/Inconsistent C r-----

##ds均为Inconsistent,表示同步结束,方可执行以下操作

<5>启动主备,注意:启动主备后的操作一定要在主结点上进行,备份结点只进行数据同步.

 如选择server1为主结点,如下操作均在server端进行:

(1)drbdadm  primary  sqldata --force

##强行将当前结点同步为主结点,(注意当前结点是server1)

[root@server1 drbd.d]# cat   /proc/drbd                  ##同步结束,共享磁盘才可存储

........

 1:cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

##当前结点为主结点;ds:UpToDate/UpToDate:表示同步结束

(2)主结点端,对磁盘进行初始化

    mkfs.ext4   /dev/drbd1

8.测试

(1)主结点端进行挂载,进行简单操作或不操作

   yum  install  mysql-server  -y                      ##两结点均下载mysql-server

chown  mysql.mysql /var/lib/mysql/       

   mount  /dev/drbd1  /var/lib/mysql                   ##主结点操作

   /etc/init.d/mysql   start                                    ##两端均激活mysql

(2)卸载

/etc/init.d/mysql     stop                                    ##先关闭服务

umount  /var/lib/mysql/

(3)主备交换

主结点:执行drbdadm  secondary sqldata            ##使主结点为备机

备机:执行drbdadm  primary sqldata                ##使当前结点为主机

    主备交换后,便可在现在的主结点(即之前的备结点-----server3端)执行同步(步骤7.)、挂载、卸载(步骤8.)操作。注意:一定要先执行7.操作,保证磁盘已完成同步。

三、与fence整合

    设置好主结点,如本机选择server1端,进入主备模式,仅在主结点进行操作

<1>物理主机安装fence软件,且保证处于running状态:

[root@foundation90 ~]# rpm -qa | grep fence

libxshmfence-1.2-1.el7.i686

libxshmfence-1.2-1.el7.x86_64

fence-virtd-libvirt-0.3.2-2.el7.x86_64

fence-virtd-multicast-0.3.2-2.el7.x86_64

fence-virtd-0.3.2-2.el7.x86_64

systemctl status   fence_virtd                                ##查看fence状态是否为running

scp  /etc/cluster/fence_xvm.key  172.25.90.1:/etc/cluster/

##fence控制,集群结点端需要创建/etc/cluster/

<2>主结点

(1)crm(live)configure# primitive vmfencestonith:fence_xvm params pcmk_host_map="server1:test1;server3:vm3" opmonitor interval=1min

##pcmk_host_map:主机名与“域名”映射

##在server3端使用命令crm_mon查看是否同步

##fence_pcvm模块一般会运行在服务的对端

(2)在fence_pcvm所在结点端(现在在server3)执行fence_pcvm  -H  test1    

       ##使fence在test1上生效,即先断电,再重启动server1

四、共享存储整合

<1>保证集群结点均由mysql-server服务

<2>crm(live)configure# primitive  DBdata ocf:linbit:drbd  params  drbd_resource=sqldata  op  monitor  interval=1min

##将drbd资源--sqldtat激活为DBdata;params ...:激活的资源,且必须是Primary才能操作

##primitive:创建;ocf:..:执行什么脚本

crm(live)configure# ms DBdataclone DBdatameta master-max=1 master-node-max=1  clone-max=2  clone-node-max=1  notify=true

##设置ms环境:设置一个主备环境,该环境下只有主结点可进行操作,备结点不被允许

crm(live)configure#  commit             ##提交

crm(live)configure# primitive DBfsocf:heartbeat:Filesystem params device=/dev/drbd1 directory=/var/lib/mysql  fstype=ext4

##/dev/drbd1挂载至=/var/lib/mysql,磁盘类型为ext4(见二中的格式化部分),生成文件系统

crm(live)configure# colocation  fs_on_drbd inf:  DBfs  DBdataclone:Master

##设置资源粘制,保证存储在主结点上,注意“inf:  DBfs”之间有一个空格

crm(live)configure# order  DBfs-after-DBdata  inf: DBdataclone:promote  DBfs:start

##文件系统DBfs挂载之前一定要先激活DBdata;初始化之后再开启DBfs

crm(live)configure# primitive  mysqlDB  lsb:mysqld  op  monitor  interval=30s

crm(live)configure# group  mysqlservice  vip  DBfs mysqlDB

crm(live)configure# commit                       ##提交

Pacemaker_第3张图片

你可能感兴趣的:(高可用集群)