1 基础理论

1.1 群集的概念

群集由两个或多个计算机(节点或成员)组成一起执行任务的系统

1.2 群集的分类

1.2.1 存储型(Storage)

提供一致的文件系统映象,允许服务器同步读写单个文件系统(通过Red Hat GFS提供存储群集功能)

1.2.2 高可用型(High Availability)

消除单点故障并将故障自动恢复(服务自动迁移到一个正常的节点),提供服务可持续的服务。

1.2.3 负载均衡型(Load balancing)

将网络服务请求分摊到多个群集节点来分摊负载,并提供单点失效检测并平滑将服务转移至正常节点。

1.2.4 高性能型(High performance)

群集通过多节点执行并行运算来提高应用程序性能。

1.3 群集的基础结构

1.3.1 群集管理

Cluster Manager简称CMAN

- CMAN是一个分布式群集管理工具

- CMAN用于管理群集的成员、消息和通知

- CMAN监控每个节点的运行状态来了解节点成员之间的关系

- CMAN负责通知底层进而做出相应的调整

Quorum

- 以太网消息决定(由节点票vote的50%加1组成)

- 以太网消息和quorum磁盘决定(由用户指定的条件组成)

1.3.2 锁管理

Distributed Lock Manager(DLM)分布式锁管理器

- DLM运行于集群中的每个节点

- GFS通过锁管理器的锁机制来同步访问文件系统元数据

- CLVM通过锁管理器来同步更新数据到LVM卷和卷组

1.3.3 Fencing

当CMAN认为某个节点已经发生故障,他将告知其他集群基础构件并在收到通知后对故障设备进行保护

保护方法:

- Power fencing(电源保护),控制电源关闭不可用节点

- Fibre Channel switch fencing(光钎通道开关保护),禁用不可用节点的光钎通道端口

- GNBD fencing 

- 其他保护,禁I/O或不可用节点电源(IBM Bladecenters,PAP,DRAC/MC,HP ILO,IPMI,IBM RSAII等)

1.3.4 配置文件管理

Cluster Configuration System(CCS),用于群集配置文件管理与配置文件在个节点之间同步。

监控的配置文件(XML文件):

/etc/cluster/cluster.conf

配置文件属性如下:

- 群集名,显示群集的名字、群集配置文件版本、当节点加入群集和被保护锁使用的基本保护时间属性

- 群集,显示群集的每个节点,指定节点名、节点ID、quorum vote的数量和其保护方法

- 保护设备,显示群集的保护设备和保护设备的具体参数

- 被管理的资源,显示创建群集所需要的资源(含故障切换与的定义、资源)

1.4 高可用性管理服务

1.4.1 rgmanager守护进程

实现off-the-shelf应用程序冷失效恢复(控制应用程序和群集资源来组成高可用性群集服务)

1.4.2 群集资源

如IP地址、应用程序初始化脚本或GFS共享分区等

1.4.3 故障切换域

有资格运行特定群集服务的节点子集(群集服务可运行和可迁移的节点称为一个切换域)

1.5 GFS

GFS是允许群集节点同时访问某个共享的块设备的群集文件系统

1.5.1 GFS的特点

- GFS是一个原生的文件系统

- GFS直接与Linux内核文件系统接口VFS层通讯

- GFS使用分布式元数据和多个日志来优化群集操作

- GFS使用锁管理器来协调I/O

- GFS节点中数据被修改,其他节点立马可见

- GFS提供配合(quota)和多重日子和多路径支持

- GFS提供良好的性能、灵活性和经济性

1.5.2 作用

- GFS提供节点间的数据共享

- GFS提供群集GFS节点单一和一致的文件系统命名空间视图

- GFS允许安装和运行应用程序而无需了解底层的存储基础结构

1.5.2 CLVM的守护进程

/etc/init.d/clvmd

1.6 群集逻辑卷管理器

Cluster Logical Volume Manager(CLVM),卷管理通过群集逻辑卷管理器进行管理

- clvmd,群集逻辑卷管理器守护进程

- HA-LVM,高可用性逻辑卷管理代理

1.7 全局网络块设备

Global Network Block Device(GNBD),提供通过TCP/IP访问GFS块设备的功能

1.7.1 GNBD client

GNBD客户端运行于GFS的节点上并提供基于光钎通道或single-initiator SCSI通道从GNBD服务导入块级别的设备

1.7.2 GNBD server

GNBD服务端允许从本地存储(直接附加存储或SAN存储)导出块级别设备

1.8 LVS

LVS提供两台以上的服务器之间的IP负载均衡能力(虚拟IP)

- 提供负载均衡能力

- 提供服务状态检测能力

1.8.1 LVS的工作原理

RHCS的整理归纳与实践_第1张图片

- pulse守护进程运行于活动或备份的LVS路由器上

- pulse定时发送heartbeat到活动路由器公共接口,确保路由器正常工作

- pulse启动lvs守护进程响应备份lvs路由的heartbeat查询

- lvs守护进程调用ipvsadm工具配置和维护内核的IPVS(IP虚拟服务器)路由表

- lvs为每台服务器配置的虚拟服务器启动一个nanny进程

- nanny进程检查一台真实服务器上的一个配置好的服务状态,并通告lvs守护进程服务器的当前状态

- lvs检测到真实服务器nanny进程通告的故障则会指引ipvsadm从ipvs路由表中删除真实的服务器条目

- 备份路由没有收到lvs路由的响应,执行初始化故障切换

- 备份路由调用send_arp将所有虚拟IP地址重新分配给备份LVS路由的MAC地址

- 备份路由通过专用或公用的接口向活动LVS路由器发送关闭lvs守护进程命令

- 备份路由通过启动lvs守护进程来接受虚拟服务器的请求

1.8.2 LVS的架构

RHCS的整理归纳与实践_第2张图片

- LVS路由层(含活动路由和备用路由,连接公共网络和专用网络)

- 真实服务器层(连接专用网络)

1.8.3 负载均衡算法

- Round-Robin Scheduling(轮询调度),按顺序分发请求到各真实服务器

- Weighted Round-Robin Scheduling(加权轮询调度),按权重给予性能好服务器更多请求处理机会

- Least-Connection Scheduling(最小连接调度),给予请求处理较少的服务器分配跟多的请求

- Weighted Least-connection(权重最小连接调度),基于负载数按权重调整给性能好服务器更多的请求

- Locality-Based Least-Connection Scheduling(基于局部性的最小连接调度) ,

 根据请求的单台服务器目的IP少的给予更多分配

- Locality-Based Least-Connection Scheduling with Replication Scheduling

 (带复制的基于局部最小连接调度),

 同上,但使用IP地址服务器子集管理,超载服务器从子集删除,服务器池中连接少的加入子集。

- Source Hash Scheduling(源此地址散列调度),

 按静态散列表查找源IP地址将请求发送到服务器池

1.8.4 服务器状态检测

- 调用send/expect scripts动态检测服务器状态

- 调用外部程序检测服务器状态

1.8.5 路由方法

- Network Address Translation(NAT),网络地址转换(有瓶颈问题)

- 直接路由(只处理转入的数据包)

1.8.6 持久性和防火墙标记

- persistence,lvs指定时间内记住最后的连接,并把请求定位到最后一次连接的服务器

- firewall mask,比较适合处理ftp这种根据端口进行连接分组情况

1.9 群集管理工具

1.9.1 Conga

提供WEB界面配置和管理群集和存储的软件组件

Conga的组件:

- luci,运行于管理端,通过ricci与多个群集和机器通讯,包含三个功能

 - homebase,提供添加、删除机器和用户及配置用户权限的工具

 - cluster,提供创建和配置群集的工具

 - storage,提供远程管理存储设备的工具

- ricci,运行于群集中的每台机器

1.9.2 群集的管理图形界面

Cluster Configuration Tool以分层结构的形式在面板左边显示配置文件(/etc/cluster/cluster.conf)的群集配置

- Cluster Nodes,显示群集节点

- Fence Devices,显示保护设备

- Managed Resources,显示故障切换与、资源和服务

 - Failover Domains,配置一个或多个群集节点子集

 - Resource,配置用于高可用性服务的共享资源

 - Services,创建和配置高可用服务

1.9.3 群集的命令行工具

- ccs_tool,群集配置工具

- cman_tool,群集管理工具

- fence_tool,保护工具

- clustat,群集状态工具

- clusvcadm,群集用户服务管理工具


1.10 服务的端口

RHCS的整理归纳与实践_第3张图片

2 实践部分

2.1 环境信息

2.1.1 业务与管理网络

vip=10.168.0.50


rhcsh01:

ipaddress=10.168.0.51/24

gateway=10.168.0.1

device=eth0

hostname=node01.cmdschool.org

OS=CentOS 6.8


rhcsh02:

ipaddress=10.168.0.52/24

gateway=10.168.0.1

device=eth0

hostname=node02.cmdschool.org

OS=CentOS 6.8


rhcsm:

ipaddress=10.168.0.59

gateway=10.168.0.1

device=eth0

hostname=rhcsm.cmdschool.org

OS=CentOS 6.8


storage:

ipaddress=10.168.0.200

gateway=10.168.0.1

device=eth0

hostname=storage01.cmdschool.org

OS=CentOS 7.1

2.1.2 存储网络

node01(rhcsh01):

ipaddress=10.0.0.51/24

device=eth1


node02(rhcsh02):

ipaddress=10.0.0.52/24

device=eth1


storage:

ipaddress=10.0.0.200/24

device=eth1

2.1.3 心跳网络

node01(rhcsh01):

ipaddress=192.168.1.51/24

device=eth2


node02(rhcsh02):

ipaddress=192.168.1.52/24

device=eth2


rhcsm:

ipaddress=192.168.1.59/24

device=eth2

2.2 环境配置

2.2.1 关闭selinux

In rhcsh0[1-2] & rhcsm:

getenforce

如显示如下:

Enforcing

则执行

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2.2.2 关闭防火墙

In rhcsh0[1-2] & rhcsm

/etc/init.d/iptables stop
chkconfig iptables off

2.2.3 名称解析配置

In rhcsh0[1-2] & rhcsm & storage:

vim /etc/hosts

输入如下内容:

192.168.1.51 node01.cmdschool.org
192.168.1.52 node02.cmdschool.org
192.168.1.59 rhcsm.cmdschool.org

2.2.4 时间与时区配置

In rhcsh0[1-2] & rhcsm & storage:

1)时区配置

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

2)安装ntp同步服务

yum install -y chrony

3)启动ntp服务

#CentOS 6
/etc/init.d/chronyd start
chkconfig chronyd on
#CentOS 7
systemctl start chronyd
systemctl enable chronyd

4)同步时间

chronyc sources

2.3 存储服务配置

In storage:

2.3.1 创建存储分区(200G)

fdisk /dev/sdb

详细向导如下:

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xe381cdb3.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-419430399, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399):
Using default value 419430399
Partition 1 of type Linux and of size 200 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

检查新建的分区

partprobe
ll /dev/sdb*

2.3.2 安装iscsi服务端相关包

yum -y install targetcli

2.3.3 启动服务并配置默认启动

systemctl enable target
systemctl restart target

2.3.4 配置存储服务

targetcli

详细向导如下:

/>help
/>ls
/> /backstores/block create dev=/dev/sdb1 name=scan1
/>ls
/> /iscsi create wwn=iqn.2014-11.org.cmdschool:storage01
/>ls
/>cd /iscsi/iqn.2014-11.org.cmdschool:storage01/tpg1/
/iscsi/iqn.20...:storage01/tpg1>ls
/iscsi/iqn.20...:storage01/tpg1>acls/ create wwn=iqn.2014-11.org.cmdschool:node
/iscsi/iqn.20...:storage01/tpg1>ls
/iscsi/iqn.20...:storage01/tpg1>luns/ create /backstores/block/san1
/iscsi/iqn.20...:storage01/tpg1>cd /
/>ls
/>saveconfig
/>exit

检查配置

vim /etc/target/saveconfig.json

2.3.5 防火墙配置

firewall-cmd --permanent --add-port=3260/tcp
firewall-cmd --reload

2.4 节点链接iscsi存储

In rhcsh0[1-2]:

2.4.1 安装基础包

yum install -y iscsi* tree

2.4.2 配置服务默认启动

chkconfig iscsid on


2.4.3 修改配置

vim /etc/iscsi/initiatorname.iscsi

输入如下内容:

InitiatorName=iqn.2014-11.org.cmdschool:node

2.4.4 发现scsi存储

iscsiadm -m discovery node -t st -p 10.0.0.200:3260

校验

tree /var/lib/iscsi/

显示如下:

/var/lib/iscsi/
├── ifaces
├── isns
├── nodes
│   └── iqn.2014-11.org.cmdschool:storage01
│       └── 10.0.0.200,3260,1
│           └── default
├── send_targets
│   └── 10.0.0.200,3260
│       ├── iqn.2014-11.org.cmdschool:storage01,10.0.0.200,3260,1,default -> /var/lib/iscsi/nodes/iqn.2014-11.org.cmdschool:storage01/10.0.0.200,3260,1
│       └── st_config
├── slp
└── static

2.4.5 检查存储发现情况

fdisk -l

可发现新增加的硬盘

[...]
Disk /dev/sdb: 214.7 GB, 214747316224 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 4194304 bytes
Disk identifier: 0x00000000

注:如果无法发现请执行重启操作

2.4.6 分区并格式化存储(单节点做即可)

1)存储分区

fdisk /dev/sdb

向导如下:

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x62b02e8b.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-26108, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-26108, default 26108): 
Using default value 26108

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

2)存储格式化

mkfs.ext4 /dev/sdb1

2.4.7 删除iscsi存储(无需执行)

iscsiadm -m session -i /dev/sdb
iscsiadm -m node --logoutall=all
iscsiadm -m node -o delete -T iqn.2014-11.org.cmdschool:storage01 -p 10.0.0.200
iscsiadm -m session

2.5 节点配置

In rhcsh0[1-2]

2.5.1 安装yum源

yum groupinstall "High Availability" "Resilient Storage"

2.5.2 配置认证密码

passwd ricci

2.5.3 启动服务并配置默认启动

/etc/init.d/ricci start
chkconfig ricci on

2.6 MySQL安装配置

2.6.1 yum源安装

In rhcsh0[1-2]:

 yum install -y mysql mysql-devel mysql-server

2.6.2 配置数据库

1)修改数据库目录

In rhcsh0[1-2]:

vim  /etc/my.cnf

加入如下参数

[mysqld]
bind-address=10.168.0.50
datadir=/data

2)修改目录权限

In rhcsh0[1-2]:

chown -R mysql:mysql /data/

3)启动服务

In rhcsh01:

/etc/init.d/mysqld start

4)初始化服务

In rhcsh01:

mysql_secure_installation

向导如下:

[...]
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!
[...]
Remove anonymous users? [Y/n] y
 ... Success!
[...]
Disallow root login remotely? [Y/n] n
 ... skipping.
[...]
Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
[...]
Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...
[...]

5)停止服务

In rhcsh01:

/etc/init.d/mysqld stop

2.7 集群luci管理器配置

In rhcsm:

2.7.1 安装yum源

 yum groupinstall -y "High Availability Management"

2.7.2 启动luci管理器并配置开机启动

/etc/init.d/luci start
chkconfig luci on

2.7.3 浏览器测试

https://10.168.0.59:8084

RHCS的整理归纳与实践_第4张图片

注:以上使用系统帐号登录

2.8 luci管理器操作

In client:

2.8.1 创建群集并添加节点

1)创建群集

RHCS的整理归纳与实践_第5张图片

2)创建完成

RHCS的整理归纳与实践_第6张图片

2.8.2 创建故障域

1)创建故障域

RHCS的整理归纳与实践_第7张图片

2)创建完成

RHCS的整理归纳与实践_第8张图片

2.8.3 添加资源-虚拟IP

1)添加虚拟IP

RHCS的整理归纳与实践_第9张图片

2)添加完成

RHCS的整理归纳与实践_第10张图片

2.8.4 集群的服务组-添加虚拟IP资源

1)添加虚拟IP资源到群集服务组

RHCS的整理归纳与实践_第11张图片

2)添加完成

RHCS的整理归纳与实践_第12张图片

3)客户端验证

RHCS的整理归纳与实践_第13张图片

4)节点验证

RHCS的整理归纳与实践_第14张图片

2.8.5 集群的服务组-添加共享硬盘资源

1)添加共享硬盘资源

RHCS的整理归纳与实践_第15张图片

2)选择集群服务组

RHCS的整理归纳与实践_第16张图片

3)往集群组添加共享磁盘

RHCS的整理归纳与实践_第17张图片

4)验证共享磁盘挂载

RHCS的整理归纳与实践_第18张图片

2.8.6 集群的服务组-添加数据库服务资源

1)添加MySQL服务到资源

RHCS的整理归纳与实践_第19张图片

2)添加完成显示

RHCS的整理归纳与实践_第20张图片

3)选择群组

RHCS的整理归纳与实践_第21张图片

4)往群集组添加资源-MySQL服务

RHCS的整理归纳与实践_第22张图片

5)添加完毕显示

RHCS的整理归纳与实践_第23张图片

6)验证

RHCS的整理归纳与实践_第24张图片

-------------------------------------------------------------------------

参阅文献:

官方文档

---------

集群管理

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Cluster_Administration/index.html

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Cluster_Administration/index.html

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html-single/Cluster_Administration/index.html

集群管理中文版

https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/html-single/Cluster_Administration/index.html

集群套件概述

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Cluster_Suite_Overview/index.html

集群管理员

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Cluster_Administration/index.html

基于集群套件的Oracle HA

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Configuration_Example_-_Oracle_HA_on_Cluster_Suite/index.html

Conga的配置使用

https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/html-single/Cluster_Administration/index.html#ch-config-conga-CA

非官方文档

----------

http://www.limingit.com/sitecn/itjq/1645_1694.html

http://linux.it.net.cn/e/cluster/qun/2015/0226/13496.html

http://www.linuxidc.com/Linux/2013-08/89166.htm

http://blog.chinaunix.net/uid-26931379-id-3558604.html

http://blog.chinaunix.net/uid-26931379-id-3558613.html

www.tuicool.com/articles/JjqUve

http://wangziyin.blog.51cto.com/6948950/1303239/

ISCSI资料:

http://linux-iscsi.org/wiki/Targetcli

http://czmmiao.iteye.com/blog/2055805

IBM多路径软件

http://blog.chinaunix.net/uid-316679-id-384033.html