Corosync/Openais+Pacemaker+ISCSI+OCFS构建高可用Web群集

简介:

Corosync/Openais+Pacemaker+ISCSI+OCFS构建高可用Web群集

093504535.jpg




corosync/openais安装

安装前准备

一.Node1安装前准备

1)更改本地主机名称

[root@localhost ~]# hostname node1.a.com

[root@node1 ~]# vim /etc/sysconfig/network

093620888.gif

2)调整系统时间于硬件时间一致

[root@node1 ~]# hwclock -s

3)编辑hosts使得两个节点服务器能够相互解析

[root@node1 ~]# vim /etc/hosts

093704590.jpg

3)编辑yum文件

[root@node1 ~]# mkdir /mnt/cdrom

[root@node1 ~]# mount /dev/cdrom /mnt/cdrom/

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

093800328.jpg

4node1node2节点需要无障碍通信,产生公钥对。这时候会提示用户秘钥对存放的路径及密码,这里密码我们设置为空

093841825.jpg

5)将公钥传递给给node2节点

093909563.jpg

二.安装和配置corosync/openais

软件环境:


cluster-glue-1.0.6-1.6.el5.i386.rpm

cluster-glue-libs-1.0.6-1.6.el5.i386.rpm

corosync-1.2.7-1.1.el5.i386.rpm

corosynclib-1.2.7-1.1.el5.i386.rpm

heartbeat-3.0.3-2.3.el5.i386.rpm

heartbeat-libs-3.0.3-2.3.el5.i386.rpm

libesmtp-1.0.4-5.el5.i386.rpm

openais-1.1.3-1.6.el5.i386.rpm

openaislib-1.1.3-1.6.el5.i386.rpm

pacemaker-1.1.5-1.1.el5.i386.rpm

pacemaker-cts-1.1.5-1.1.el5.i386.rpm

pacemaker-libs-1.1.5-1.1.el5.i386.rpm

perl-TimeDate-1.16-5.el5.noarch.rpm

resource-agents-1.0.4-1.1.el5.i386.rpm

1yum安装

[root@node1 1]#mkdir 1

[root@node1 1]# yum localinstall * --nogpgcheck

093947856.jpg

2)进入corosync配置目录下,产生corosync配置文件

[root@node1 1]# cd /etc/corosync/

094008608.jpg

[root@node1 corosync]# cp corosync.conf.example corosync.conf

3)编辑corosy配置文件

[root@node1 corosync]# vim corosync.conf

094043391.jpg

corosync增加群集资源管理pacemaker

094107344.gif

4)建立群集的日志文件目录

[root@node1 corosync]# mkdir /var/log/cluster


5)产生corosync身份验证文件

094130998.jpg

Node1node2节点上需要同时有这两个文件方可验证成功

094151949.jpg

6)启动该服务

[root@node1 corosync]# service corosync start

三.Node2节点上的配置

Node2node1上面的配置安装方法是一样,都需要对本地环境进行设置,唯注意是都需要建立系统日志存放目录文件

[root@node1 corosync]# service corosync start

094218520.jpg

四.对两个节点进行排除错误,否则两个节点无法把所配置好的文件进行提交上去

1)验证corosync引擎是否正常启动了

[root@node1 corosync]# grep -i -e "corosync cluster engine" -e "configuration file" /var/log/messages


094256488.jpg

2)查看初始化成员节点通知是否发出

[root@node1 corosync]# grep -i totem /var/log/messages

094326578.jpg

3)检查过程中是否有错误产生

grep -i error: /var/log/messages |grep -v unpack_resources

094353379.jpg

stonith机制排错方法:

[root@node1 ~]# crm

crm(live)# configure

094616325.jpg

4)检查pacemaker时候已经启动了

[root@node1 corosync]# grep -i pcmk_startup /var/log/messages

094729191.jpg

5)测试是否已经连接成功

094858661.jpg

五.crm(pacemaker提供的一种shell)

方法:

[root@node1 corosync]# crm //进入crm的shell模式下

crm(live)# configure //进入全局配置模式

crm(live)configure# property stonith-enabled=false //关闭stonith机制

crm(live)configure# commit //提交保存配置信息

crm(live)configure# show //显示当前配置

crm(live)configure# exit

再次进行语法检测:crm_verify -L 就不会报错了.


群集资源类型4种

[root@node1 corosync]# crm

crm(live)# configure

crm(live)# help

primitive 本地主资源 (只能运行在一个节点上)

group 把多个资源轨道一个组里面,便于管理

clone 需要在多个节点上同时启用的 (如ocfs2 ,stonith ,没有主次之分)

master 有主次之分,如drbd


1)查看资源代理的类型

095327388.jpg

2)定义一个webip地址为192.168.2.100

095350927.jpg

可以通过ifconfig查看是否ip地址是否分配上

095408962.jpg

3node1,node2需要都安装apache服务

yum install httpd

095433434.jpg

[root@node1 ~]# chkconfig httpd off

4)添加httpd服务,httpd的资源是在lsb下面

095500840.jpg

5)为了避免群集分裂,需要把这两个文件同时添加到组里面

095522850.jpg

6)因为这里只有两个节点,需要对这两个节点的票数进行更改

095538295.jpg

六.ISCSIIP-SAN)存储配置详情

1)target(后方的存储介质)

新添加一块磁盘(或分区)

fdisk -l

分区:fdisk /dev/sda(n--p--4--+200M-w)---添加一块磁盘sda4

更新分区表:(cat /proc/partitions

partprobe /dev/sda(不重启,更新分区表)


node1node2节点上分别增加一块网卡,使得target于这两块网卡在同一个区域,编辑vim /etc/hosts使得3个节点都可以相互解析到

095649888.jpg

2)更改后方存储的本地主机名称为target.a.com

095707357.jpg

095721918.gif


3安装target需要的软件包,启动服务.

mkdir /mnt/cdrom/

mount /dev/cdrom /mnt/cdrom/

cd /mnt/cdrom/ClusterStorage

rpm -ivh perl-Config-General-2.40-1.e15.noarchrpm

rpm -ivh scsi-target-utils-0.0-5.20080917snap.e15.i386.rpm

service tgtd start

4添加新的iscsitarget.

增加target

[root@target ~] tgtadm --lld iscsi --op new --mode target --tid=1 --targetname iqn.2013-10.com.a.target:disk

显示

[root@target ~]# tgtadm --lld iscsi --op show --mode target

095808427.jpg

5)增加后方的存储

增加存储

[root@target ~]# tgtadm --lld iscsi --op new --mode=logicalunit --tid=1 --lun=1 --backing-store /dev/sda4

访问控制

[root@target ~]# tgtadm --lld iscsi --op bind --mode=target --tid=1 --initiator-address=192.168.0.0/16

095830455.jpg


6)将这些文件写入到target配置文件里

[root@target ~]# vim /etc/tgt/targets.conf

[root@target ~]# service tgtd restart

095850603.jpg

7initiatornode1node2)安装于配置

这里只把node1的安装步骤列出,node2安装于node1安装方法是一样的


cd /mnt/cdrom/Server

rpm -ivh iscsi-initiator-utils-6.2.0.871-0.10.el5.i386.rpm

service iscsi start

登录

[root@node1 ~]# iscsiadm --mode node --targetname iqn.2013-10.com.a target:disk --portal 192.168.3.30:3260 login

登出

[root@node1 ~]# iscsiadm --mode node --targetname iqn.2013-10.com.a target:disk --portal 192.168.3.30:3260 –logout

095909723.jpg

重启启动

[root@node1 ~]# service iscsi restart


095931170.jpg

8node1iqn名称,为能让后方存储服务器方便的查看是那个用户登陆

[root@node1 ~]# vim /etc/iscsi/initiatorname.iscsi

095947759.gif


通过后方的target可以看到node1node2已经登陆

[root@target ~]# tgtadm --lld iscsi --op show --mode target

100002612.jpg

七.将新的磁盘sdb格式为OCFS2群集文件系统.

1)在两个节点上安装需要的软件包

软件:http://oss.oracle.com/projects/ocfs2-tools/files/

http://oss.oracle.com/projects/ocfs2/files/

yum localinstall ocfs2-2.6.18-164.el5-1.4.7-1.el5.i686.rpm \\

ocfs2-tools-1.4.4-1.el5.i386.rpm \\

ocfs2console-1.4.4-1.el5.i386.rpm

注:ocfs2版本必须与本主机内核版本一致(uname -r),禁用 SELinux(Security Level Configuration)

在集群中的两个节点上进行此更改后,将需要重新引导每个节点以实施更改:在继续配置 OCFS2 之前,必须禁用 SELinux

# init 6

2)对主配置文件进行配置.

集群中的两个节点上生成和配置/etc/ocfs2/cluster.conf 文件。完成此操作最简单的方法是运行 GUI 工具 ocfs2console

使用 ocfs2console GUI 工具执行以下步骤:

选择 [Cluster] -> [Configure Nodes...]。这将启动 OCFS2 集群堆栈并显示“Node Configuration”对话框。
在“Node Configuration”对话框上,单击[Add] 按钮。
这将显示“Add Node”对话框。
在“Add Node”对话框中,输入集群中第一个节点的 Host name  IP address。将 IP Port 设置为默认值 7777。在我的示例中,我添加 了两个节点,即使用 linux1 / 192.168.1.100 表示第一个节点,并使用 linux2 / 192.168.1.101 表示第二个节点。
单击“Node Configuration”对话框上的 [Apply] 所有节点现在将处于“Active”状态.
单击“Node Configuration”对话框上的 [Close]
确认所有值均正确后,使用 [File] -> [Quit] 退出应用程序。需要在集群的两个节点上执行该操作。
退出 ocfs2console 后,将获得一个类似如下所示的 /etc/ocfs2/cluster.conf。需要在集群中的两个节点上完成该过程,并且所有节点的OCFS2 配置文件必须完全相同:

vim cluster.conf

node:

ip_port = 7777

ip_address = 192.168.2.10

number = 0

name = node1.a.com

cluster = ocfs2

node:

ip_port = 7777

ip_address = 192.168.2.20

number = 1

name = node2.a.com

cluster = ocfs2

cluster:

node_count = 2

name = ocfs2

3O2CB 集群服务
在使用 OCFS2 执行任何操作(如格式化或挂载文件系统)之前,我们需要先运行 OCFS2 的集群堆栈 O2CB(它将是以上执行的配置过程的结果)。此堆栈包含以下服务:

NM:用于跟踪 cluster.conf 中的所有节点的节点管理器
HB
:当节点加入或离开集群时向上/向下发出通知的心跳服务
TCP
:处理节点之间的通信
DLM
:用于跟踪所有锁、这些锁的所有者和状态的分布式锁管理器
CONFIGFS
:在 /config 中挂载的用户空间驱动的配置文件系统
DLMFS
:用户空间与内核空间 DLM 的接口
已将以上所有集群服务打包到 o2cb 系统服务 (/etc/init.d/o2cb) 中。以下是 o2cb 系统服务的某些更有用的命令和选项的简要列表。

注意:以下命令仅用于演示目的,不应在安装和配置 OCFS2 时运行!

/etc/init.d/o2cb status
Module "configfs": Not loaded

Filesystem "configfs": Not mounted

Module "ocfs2_nodemanager": Not loaded

Module "ocfs2_dlm": Not loaded

Module "ocfs2_dlmfs": Not loaded

Filesystem "ocfs2_dlmfs": Not mounted
注意,本示例未加载所有服务。我在执行“status”选项之前执行了“unload”。如果要在使用 ocfs2console 实用程序配置 OCFS2 后立即检查 o2cb 服务的状态,则将加载所有这些服务。
/etc/init.d/o2cb load
Loading module "configfs": OK

Mounting configfs filesystem at /config: OK

Loading module "ocfs2_nodemanager": OK

Loading module "ocfs2_dlm": OK

Loading module "ocfs2_dlmfs": OK

Mounting ocfs2_dlmfs filesystem at /dlm: OK


加载所有 OCFS2 模块
/etc/init.d/o2cb online ocfs2
Starting cluster ocfs2: OK
以上命令将使我们创建的集群 ocfs2 处于联机状态。

/etc/init.d/o2cb offline ocfs2
Unmounting ocfs2_dlmfs filesystem: OK

Unloading module "ocfs2_dlmfs": OK

Unmounting configfs filesystem: OK

Unloading module "configfs": OK
以上命令将使我们创建的集群 ocfs2 处于脱机状态。

/etc/init.d/o2cb unload
Cleaning heartbeat on ocfs2: OK

Stopping cluster ocfs2: OK
以上命令将卸载所有 OCFS2 模块。


4)将 O2CB 配置为在引导时启动
您现在需要配置 OC2B 驱动程序的引导属性,以便在每次引导时将启动集群堆栈服务。需要在集群的所有节点上执行本节中的所有任务。

注意:OCFS2 1.2.1之前的版本中包含一个错误,即不会在每次引导时加载驱动程序,即使将引导属性配置为执行此操作后也是如此。OCFS2 1.2.1 版中已经修复了该错误,本文不再赘述。
按如下所示设置引导属性:

# /etc/init.d/o2cb offline ocfs2

# /etc/init.d/o2cb unload

# /etc/init.d/o2cb configure

Configuring the O2CB driver.This will configure the on-boot properties of the O2CB driver.The following questions will determine whether the driver is loaded onboot. The current values will be shown in brackets ('[]'). Hitting<ENTER> without typing an answer will keep that current value. Ctrl-Cwill abort.Load O2CB driver on boot (y/n) [n]: y

Cluster to start on boot (Enter "none" to clear) [ocfs2]: ocfs2

Writing O2CB configuration: OK

Loading module "configfs": OK

Mounting configfs filesystem at /config: OK

Loading module "ocfs2_nodemanager": OK

Loading module "ocfs2_dlm": OK

Loading module "ocfs2_dlmfs": OK

Mounting ocfs2_dlmfs filesystem at /dlm: OK

Starting cluster ocfs2: OK


5)格式化 OCFS2 文件系统
mkfs -t ocfs2 /dev/sdb

6)两个节点上分别挂载

mount -t ocfs2 /dev/sdb /var/www/html

mount

/dev/sdb on /var/www/html type ocfs2 (rw,_netdev,heartbeat=local)

cd /var/www/html

echo "Welcome" >index.html

7)两个节点上进行开机自动挂载

vim /etc/fstab

/dev/sdb /var/www/html ocfs2 defaults 0 0










本文转自 only223wym 51CTO博客,原文链接:http://blog.51cto.com/ymchaofeng/1312478,如需转载请自行联系原作者
目录
相关文章
|
13天前
|
SQL 安全 前端开发
PHP与现代Web开发:构建高效的网络应用
【10月更文挑战第37天】在数字化时代,PHP作为一门强大的服务器端脚本语言,持续影响着Web开发的面貌。本文将深入探讨PHP在现代Web开发中的角色,包括其核心优势、面临的挑战以及如何利用PHP构建高效、安全的网络应用。通过具体代码示例和最佳实践的分享,旨在为开发者提供实用指南,帮助他们在不断变化的技术环境中保持竞争力。
|
15天前
|
PHP 开发者
深入浅出PHP:构建你的第一个Web应用
【10月更文挑战第35天】在数字时代的浪潮中,掌握编程技能已成为通往未来的钥匙。本文将带你从零开始,一步步走进PHP的世界,解锁创建动态网页的魔法。通过浅显易懂的语言和实际代码示例,我们将共同打造一个简单但功能强大的Web应用。无论你是编程新手还是希望扩展技能的老手,这篇文章都将是你的理想选择。让我们一起探索PHP的魅力,开启你的编程之旅!
|
18天前
|
缓存 前端开发 JavaScript
构建高性能与用户体验并重的现代Web应用
构建高性能与用户体验并重的现代Web应用
32 5
|
16天前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
48 2
|
20天前
|
监控 前端开发 JavaScript
探索微前端架构:构建可扩展的现代Web应用
【10月更文挑战第29天】本文探讨了微前端架构的核心概念、优势及实施策略,通过将大型前端应用拆分为多个独立的微应用,提高开发效率、增强可维护性,并支持灵活的技术选型。实际案例包括Spotify和Zalando的成功应用。
|
18天前
|
前端开发 JavaScript jenkins
构建高效、可维护的Web应用
构建高效、可维护的Web应用
37 2
|
15天前
|
数据库 Python
从零开始构建你的第一个Flask Web应
从零开始构建你的第一个Flask Web应
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
113 3
|
23天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
124 45
|
4天前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
17 2
下一篇
无影云桌面