pacemaker+corosync实现集群管理(负载均衡、配置fence服务)

一.实验环境

主机名 ip 服务
hetoto2 172.25.12.2 node1
hetoto3 172.25.12.3 node2
  • vip:172.25.12.100

二.pacemaker+corosync实现负载均衡

1、配置高级yum源
两个节点都配置:

[root@hetoto2 ~]# vim /etc/yum.repos.d/rhel-source.repo

[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.12.250/rhel6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[LoadBalancer]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.12.250/rhel6.5/LoadBalancer
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[HighAvailability]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.12.250/rhel6.5/HighAvailability
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[ResilientStorage]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.12.250/rhel6.5/ResilientStorage
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[ScalableFileSystem]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.12.250/rhel6.5/ScalableFileSystem
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第1张图片

[root@hetoto2 ~]# yum clean all
[root@hetoto2 ~]# yum repolist

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第2张图片

  • 同步给node2:
[root@hetoto2 ~]# scp /etc/yum.repos.d/rhel-source.repo [email protected]:/etc/yum.repos.d/
[root@hetoto2 ~]# yum clean all
[root@hetoto2 ~]# yum repolist

在这里插入图片描述
pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第3张图片

2、安装配置corosync、pacemaker
两个节点都装上软件,从物理机拷过去
pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第4张图片

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

在这里插入图片描述
3、查看生成的文件

ls /etc/corosync/

在这里插入图片描述
在这里插入图片描述
4、修改配置文件

[root@hetoto2 ~]# cd /etc/corosync/
[root@hetoto2 corosync]# cp corosync.conf.example corosync.conf
[root@hetoto2 corosync]# vim corosync.conf

配置文件编辑的详细内容解释如下:
# Please read the corosync.conf.5 manual page
compatibility: whitetank

totem { #定义集群里面各节点是咋么通信的totem本是一种协议,专用于corosync各节点间的协议
        version: 2 #totem的版本不可更改
        secauth: off #安全认证
        threads: 0 #用于安全认证开启的并线程数
        interface {
                ringnumber: 0 #回环号码
                bindnetaddr: 172.25.12.0 #绑定心跳网段,corosync会自动判断本地网卡上配置的哪个IP地址属于这个网络的,并把这个接口作为多播心跳信息传递的接口
                mcastaddr: 226.94.1.1 #心跳信息组播地址,每个节点的组播地址必须为同一个
                mcastport: 5405 #组播时使用的端口
                ttl: 1 #只向外显示心跳信息,避免组播报文回路
        }
}

logging {
        fileline: off #指定要打印的行
        to_stderr: no #日志信息是否发往本地错误输出(默认否)
        to_logfile: yes #是否记录日志文件
        to_syslog: yes是否记录日志文件,是否记录于syslog日志
        logfile: /var/log/cluster/corosync.log #日志存放位置
        debug: off #只要不是为了排错,最好关闭debug它纪录的信息过于详细,会占用大量的磁盘I/O
        timestamp: on #是否打印时间戳利用于定位错误,但会产生大量的系统调用,消耗cpu资源
        logger_subsys {
                subsys: AMF
                debug: off
        }
}

amf {
        mode: disabled
}
#如果想让pacemaker在corosync中以插件方式启动,需要在配置文件加上如下内容:
service {
        name:pacemaker #模块名,启动corosync时同时启动pacemaker
        ver:0
}

在这里插入图片描述

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第5张图片

  • 将hetoto2的pacemaker的配置文件,远程同步给hetoto3:
[root@server2 corosync]# scp corosync.conf [email protected]:/etc/corosync/
[email protected]'s password: 
corosync.conf                                 100%  481     0.5KB/s   00:00    
[root@hetoto2 corosync]# 

在这里插入图片描述

5、node1、node2同时启动corosync服务

[root@hetoto2 corosync]# /etc/init.d/corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]
[root@hetoto2 corosync]# 

在这里插入图片描述

[root@hetoto3 ~]# /etc/init.d/corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]

在这里插入图片描述
6、动态监控

在node2上动态监控

crm_mon

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第6张图片
7、进入crm编辑界面

crm

虚拟窗口功能:

    configure 节点
    primitive:配置主资源
    resource 资源管理器
    cib 资源管理窗口
    node 节点的管理
    verify:语法检测
    commit:保存
    property:全局资源配置

8、node1上关闭fence机制,因为还没有对fence进行配置,先将station-enabled设置为faulse,表示资源不会迁移

[root@hetoto2 corosync]# crm
crm(live)# configure 
crm(live)configure# property stonith-enabled=false
crm(live)configure# verify
crm(live)configure# commit

在这里插入图片描述
9、node1上设置集群资源VIP

[root@hetoto2 corosync]# crm
crm(live)# configure 
crm(live)configure# primitive vip ocf:heartbeat:IPaddr2 params ip=172.25.12.100 nic=eth0 cidr_netmask=24
crm(live)configure# verify
crm(live)configure# commit 
crm(live)configure# 

在这里插入图片描述
如果添加资源添加错了,进入resource先将资源组停掉,再将资源停掉,然后进configure里删除:crm---->resource---->show---->stop vip---->cd---->configure---->show---->delete vip或者edit在配置文件里删除

  • 此时node2动态监控查看到的状态:

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第7张图片
10、node1上配置apache服务
1、在node1、node2上安装httpd,编写默认发布页

yum install httpd -y
vim /var/www/html/index.html

在这里插入图片描述
在这里插入图片描述

2、添加资源:启动脚本

[root@hetoto2 corosync]# crm
crm(live)# configure 
crm(live)configure# primitive apache lsb:httpd op monitor interval=10s
crm(live)configure# verify
crm(live)configure# commit

在这里插入图片描述

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第8张图片
注意:node2动态监控下看到此时的VIP在hetoto2上,httpd在hetoto3上

11、node1设置资源组

crm(live)configure# group website vip apache
crm(live)configure# verify
crm(live)configure# commit 

在这里插入图片描述

  • 此时vip、apache资源都在一台服务器上
    pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第9张图片

12、测试

  • 测试1:

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第10张图片

  • 测试2:将hetoto2的corosync服务停掉
[root@hetoto2 corosync]# /etc/init.d/corosync stop
Signaling Corosync Cluster Engine (corosync) to terminate: [  OK  ]
Waiting for corosync services to unload:.                  [  OK  ]
[root@hetoto2 corosync]# 

在这里插入图片描述

  • 重新访问vip:

在这里插入图片描述
不能访问!!!

13、node1上设置后端服务器负载均衡

打开上一步关闭的服务
[root@hetoto2 corosync]# /etc/init.d/corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]


[root@hetoto2 corosync]# crm
crm(live)# configure 
crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# verify
crm(live)configure# commit 
crm(live)configure# 

在这里插入图片描述
注意: 默认一般为三台服务器组,当一个挂掉,另外的进行票选进行谁上线,此处是两台,当票选不够,忽略
这时即使一个节点挂掉了,另外一个节点也会接管开始正常工作

  • 测试:

将hetoto2上的corosync服务停掉:

[root@hetoto2 corosync]# /etc/init.d/corosync stop
Signaling Corosync Cluster Engine (corosync) to terminate: [  OK  ]
Waiting for corosync services to unload:.                  [  OK  ]

在这里插入图片描述
node2动态监控可以看到:
pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第11张图片
apache服务组在hetoto3上运行了!!!

客户端访问:
pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第12张图片

三、配置fence设备

在pacemaker默认会将fence和资源放在不同的服务器上
1、在hetoto2、hetoto3上建立目录

[root@hetoto2 corosync]# mkdir /etc/cluster
[root@hetoto3 ~]# mkdir /etc/cluster

2、查看fence服务的状态,生成密钥

[root@foundation12 Desktop]#  systemctl status fence_virtd.service 
● fence_virtd.service - Fence-Virt system host daemon
   Loaded: loaded (/usr/lib/systemd/system/fence_virtd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

Jun 13 13:21:10 foundation12.ilt.example.com systemd[1]: [/usr/lib/systemd/system/fence_virtd.service:2...red
Hint: Some lines were ellipsized, use -l to show in full.
[root@foundation12 Desktop]# cd /etc/cluster/
[root@foundation12 cluster]# rm -rf fence_xvm.key 
[root@foundation12 cluster]# ls
[root@foundation12 cluster]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
1+0 records in
1+0 records out
128 bytes (128 B) copied, 0.000181031 s, 707 kB/s
[root@foundation12 cluster]# ls
fence_xvm.key

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第13张图片
3、将密钥发送给hetoto1、hetoto2,开启服务

[root@foundation12 cluster]# scp fence_xvm.key [email protected]:/etc/cluster/
[root@foundation12 cluster]# scp fence_xvm.key [email protected]:/etc/cluster/

在这里插入图片描述
4、在hetoto2和hetoto3上查看密钥是否存在
在这里插入图片描述
在这里插入图片描述
5、在node1、node2上查看此时的fence设备

stonith_admin -I

在这里插入图片描述

在这里插入图片描述
6、在node1、node2上安装软件,生成fence设备

yum provides */fence_xvm
yum install fence-virt-0.2.3-15.el6.x86_64 -y
stonith_admin -I

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第14张图片
pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第15张图片
7、在node1上将之前停掉的fence服务开启,添加fence设备

开启上一步测试关闭的服务
[root@hetoto2 cluster]# /etc/init.d/corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]

[root@hetoto2 cluster]# crm
crm(live)# configure 
crm(live)configure# property stonith-enabled=true
crm(live)configure# primitive vmfence stonith:fence_xvm params pcmk_host_map="hetoto2:hetoto2;hetoto3:hetoto3" op monitor interval=1min
crm(live)configure# verify
crm(live)configure# commit 
crm(live)configure# exit
bye

在这里插入图片描述
此时在node2上监控:
pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第16张图片
可以看到fence设备和资源分别被加在不同的服务器上

8、测试
测试1:

  • 此时的httpd服务在hetoto3上开启的,ip也是添加的
    /etc/init.d/httpd status
    ip addr show eth0

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第17张图片

  • 将hetoto3上的httpd服务关掉,会发现fence会自己启动httpd

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第18张图片
测试2:模拟hetoto2的内核故障

  • 在hetoto2上监控:
crm_mon

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第19张图片

会发现fence设备和资源都被加在同一台服务器,会出现报错

  • 模拟hetoto3内核故障:
 echo c >/proc/sysrq-trigger

在这里插入图片描述

  • hetoto3会重启!!!
  • pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第20张图片

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第21张图片

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第22张图片测试3:将hetoto3和hetoto2的corosync开机自启

[root@hetoto3 ~]# /etc/init.d/corosync status
corosync is stopped
[root@hetoto3 ~]# chkconfig corosync on
[root@hetoto3 ~]# 

在这里插入图片描述

[root@hetoto2 ~]# chkconfig corosync on

在hetoto2监控:将server3的服务开启会发现资源和fence设备分配在不同服务器
pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第23张图片
测试4:

  • 在hetoto3上监控,将hetoto2的网络关闭

在这里插入图片描述
pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第24张图片

  • 将hetoto2重新连接,会发现fence设备和资源重新被分配到不同服务器

pacemaker+corosync实现集群管理(负载均衡、配置fence服务)_第25张图片

你可能感兴趣的:(运维服务)