集群(cluster)

(一)集群概念

简单的说,集群就是一组计算机,他们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。集群(一组协同工作的计算机)是充分利用计算资源的一个重要概念,因为它能够将工作负载从一个超载的系统(或节点)迁移到集群中的另一个系统上。常见的硬件有:结点,网络,存储.软件有:机群系统,节点系统,应用支撑软件。集群具有高可用性HA(集群中的一个节点失效,他的任务可传递给其他节点,可以有效防止单点是失效。)

(二) 集群系统的分类

一般将集群分成两类:

1)HA(High Availability)集群

2)HPC集群,也称为科学计算集群

(三) 集群的搭建

搭建两个节点的集群,要注意时间同步

HA集群维护节点的高可用,只有一个节点是真正工作,另一个节点是处于热备状态,一般来说,两个集群节点会有一根网线直连,还有心跳线,corosyc(心跳引擎,用于检测主机的可用性)每一个主机上都有自己的主机ip,但是对外使用时是用的vip,vip,servers,filesystem构成了一个资源组,当一个节点down了,整个资源组就会迁移到另一个节点上,由于vip不变,在客户端看来是都一样的,这里需要用到ARP协议,mac地址发生了变化。

如果两个节点之间的网络断了,或者正在工作的节点负载过高而down了,那么corosync检测不到心跳信息,就会告知另一个节点接管工作,此时,若原来的节点恢复了,那么就会出现争抢资源组的情况,并有可能同时对文件系统进行操作,那么就会导致文件系统坏掉出现“脑裂”,因此是不合理的,这时就需要fence,当一个节点出现问题的时候,fence就会直接将其断电(不是重启,英因为重启会将内存的信息写入磁盘,而断电就直接将内存清空),那么就不会出现资源组的争抢的情况

一 创建集群

server1:(第一个节点)

1 vim /etc/yum.repos.d/rhel-source.repo

[rhel-source]

name=Red Hat Enterprise Linux $releasever - $basearch - Source

baseurl=http://172.25.38.250/rhel6.5

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[HighAvailability]

name=HighAvailability

baseurl=http://172.25.38.250/rhel6.5/HighAvailability

gpgcheck=0

[LoadBalancer]

name=LoadBalancer

baseurl=http://172.25.38.250/rhel6.5/LoadBalancer

gpgcheck=0

[ResilientStorage]

name=ResilientStorage

baseurl=http://172.25.38.250/rhel6.5/ResilientStorage

gpgcheck=0

[ScalableFileSystem]

name=ScalableFileSystem

baseurl=http://172.25.38.250/rhel6.5/ScalableFileSystem

gpgcheck=0

2 yum repolist

3 yum   install   -y    ricci ###rucci只是一个集群管理工具,安装在所有集群节点上,是加密的###

4 passwd ricci ###给ricci密码,企业六版本的都要给密码###

5 /etc/init.d/ricci start ###开启服务(端口为11111)###

6 chkconfig ricci on ###开机自启动###

7 yum   install   -y    luci ###提供一个web界面管理ricci,是加密的##

8 /etc/init.d/luci    start (端口为8084)

9 chkconfig luci on ###开机自启动###

server2:(第二个节点)

与server1的操作步骤相同,除了不用install luci

测试:

访问https://172.25.78.1:8084

命令方式:

clustat

[root@server1 ~]# clustat

Cluster Status for haha @ Mon Jul 24 05:15:48 2017

Member Status: Quorate

Member Name                                 ID   Status

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

server1                                         1 Online, Local

server2                                         2 Online

二 创建fence

再真实的物理机上有一个libvirtd服务,是管理虚拟机和其他虚拟化功能,他包含一个API库,一个守护进程(libvirtd)和一个命令行工具(virsh),如果将这个服务关闭了,那么用户就不能通过virsh管理虚拟机,将其作为fence

1  yum install fence-virtd-multicast.x86_64 fence-virtd-libvirt.x86_64 fence-virtd.x86_64 -y

2 fence_virtd -c ###创建fence服务###

【【【【【【【【【【【过程:

Module search path [/usr/lib64/fence-virt]:

Available backends:

libvirt 0.1

Available listeners:

multicast 1.2

Listener modules are responsible for accepting requests

from fencing clients.

Listener module [multicast]:  ###监听用多播###

The multicast listener module is designed for use environments

where the guests and hosts may communicate over a network using

multicast.

The multicast address is the address that a client will use to

send fencing requests to fence_virtd.

Multicast IP Address [225.0.0.12]:  ###多播地址,此处使用默认的多播地址###

Using ipv4 as family.

Multicast IP Port [1229]:  ###默认端口###

Setting a preferred interface causes fence_virtd to listen only

on that interface.  Normally, it listens on all interfaces.

In environments where the virtual machines are using the host

machine as a gateway, this *must* be set (typically to virbr0).

Set to 'none' for no interface.

Interface [virbr0]: br0 ###fence接口,集群节点连接到fence###

The key file is the shared key information which is used to

authenticate fencing requests.  The contents of this file must

be distributed to each physical host and virtual machine within

a cluster.

Key File [/etc/cluster/fence_xvm.key]:  ###虚拟机会通过key进行校验###

Backend modules are responsible for routing requests to

the appropriate hypervisor or management layer.

Backend module [libvirt]:  ###连接的后端###

Configuration complete.

=== Begin Configuration ===

backends {

libvirt {

uri = "qemu:///system";

}

}

listeners {

multicast {

port = "1229";

family = "ipv4";

interface = "br0";

address = "225.0.0.12";

key_file = "/etc/cluster/fence_xvm.key";

}

}

fence_virtd {

module_path = "/usr/lib64/fence-virt";

backend = "libvirt";

listener = "multicast";

}

=== End Configuration ===

Replace /etc/fence_virt.conf with the above [y/N]? y

】】】】】】】】】】】

3 mkdir   /etc/cluster ###不存在要创建出来

4 dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1 ###/dev/urandom会产生随机数,利用此来产生key###

5 systemctl restart fence_virtd.service ###重启服务一定要在产生随机数之后###

6 scp /etc/cluster/fence_xvm.key root@172.25.78.1:/etc/cluster/ ###将key传给节点####

7 scp fence_xvm.key root@172.25.38.2:/etc/cluster/

再luci提供的web界面上:fence devices ---> add  ---> 添信息 ---> submit (在提交的时候,是在将所有的配置写入/etc/cluster/cluster.conf文件)

集群内部只知道主机名(例:server1,server2),而fance所在的物理机知道的是虚拟机的名字(例:vm1,vm2),因此要将它们做一个映射:vm1 --->  server1  , vm2 ---> server2

nodes ---> server1 ---> add fence method  ---> add fence instance

nodes ---> server2 ---> add fence method  ---> add fence instance

可以再/etc/cluster/cluster.conf文件下查看刚才再web上进行的操作

[root@server1 cluster]# cat cluster.conf

<?xml version="1.0"?>

<cluster config_version="6" name="haha">

<clusternodes>

<clusternode name="server1" nodeid="1">

<fence>

<method name="fence1">

<device domain="vm1" name="vmfence"/>

</method>

</fence>

</clusternode>

<clusternode name="server2" nodeid="2">

<fence>

<method name="fence2">

<device domain="vm2" name="vmfence"/>

</method>

</fence>

</clusternode>

</clusternodes>

<cman expected_votes="1" two_node="1"/>

<fencedevices>

<fencedevice agent="fence_xvm" name="vmfence"/>

</fencedevices>

</cluster>

测试:

fence_node server1 ###fence将server1断电了###

将server2的eth0的down掉,会发现server4直接断电,就是因为fence的作用

三 在web上创建域和资源

failover domains ---> add

Prioritized:优先级,数字越小,优先级越高

Restricted:几个节点

No Failback:如果server1挂了又恢复了,不回切。(但是如果server1和server2的性能相差很大,则最好不勾选此项,让它回切)

resources  ---> add ---> ip address(vip)

resources  ---> add ---> script

service  groups ---> add  ---> add resource (添加资源的顺序就是启动的顺序,因此要先启动ip再启动脚本)

Automatically Start This Service :开机自动开启服务

Run Exclusive:只进行这一个服务

Recovery Policy:relocate  ###一个节点down就立刻让另一个节点接管###

测试:

访问172.25.78.100

命令方式:

[root@server1 ~]# clustat

Cluster Status for haha @ Tue Jul 25 10:47:59 2017

Member Status: Quorate

Member Name                             ID   Status

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

server1                                     1 Online, Local, rgmanager

server2                                     2 Online, rgmanager

Service Name                   Owner (Last)                   State

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

service:apache                 server1                        started

[root@server1 ~]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 52:54:00:d5:e3:a3 brd ff:ff:ff:ff:ff:ff

inet 172.25.78.1/24 brd 172.25.78.255 scope global eth0

inet 172.25.78.100/24 scope global secondary eth0 ###分配到了ip###

inet6 fe80::5054:ff:fed5:e3a3/64 scope link

valid_lft forever preferred_lft forever

[root@server1 ~]# ps ax  | grep httpd ###查看是否httpd的进程

8199 ?        S<s    0:00 /usr/sbin/httpd

8201 ?        S<     0:00 /usr/sbin/httpd

8202 ?        S<     0:00 /usr/sbin/httpd

8203 ?        S<     0:00 /usr/sbin/httpd

8204 ?        S<     0:00 /usr/sbin/httpd

8205 ?        S<     0:00 /usr/sbin/httpd

8206 ?        S<     0:00 /usr/sbin/httpd

8207 ?        S<     0:00 /usr/sbin/httpd

8208 ?        S<     0:00 /usr/sbin/httpd

16568 pts/0    S+     0:00 grep httpd

如果将server1的httpd服务down了,那么server2就会接管服务

[root@server1 ~]# /etc/init.d/httpd stop

Stopping httpd:                                            [  OK  ]

[root@server1 ~]# clustat

[root@server1 ~]# clustat

Cluster Status for haha @ Tue Jul 25 10:54:21 2017

Member Status: Quorate

Member Name                             ID   Status

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

server1                                     1 Online, Local, rgmanager

server2                                     2 Online, rgmanager

Service Name                   Owner (Last)                   State

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

service:apache                 server2                        started

让server2的内核崩溃,server1就会接管服务:

[root@server2 ~]# echo c > /proc/sysrq-trigger

[root@server2 ~]# clustat

Cluster Status for haha @ Tue Jul 25 10:57:20 2017

Member Status: Quorate

Member Name                             ID   Status

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

server1                                     1 Online, rgmanager

server2                                     2 Online, Local, rgmanager

Service Name                   Owner (Last)                   State

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

service:apache                 server1                        started

[root@server1 ~]# clusvcadm -r apache -m server2 ###将服务重新定位到server2上###

Trying to relocate service:apache to server2...Success

service:apache is now running on server2

[root@server1 ~]# clustat

Cluster Status for haha @ Tue Jul 25 10:59:45 2017

Member Status: Quorate

Member Name                             ID   Status

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

server1                                     1 Online, Local, rgmanager

server2                                     2 Online, rgmanager

Service Name                   Owner (Last)                   State

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

service:apache                 server2                        started

四  创建共享设备iscsi

开启一个虚拟机(server3)作为共享存储,设置磁盘8G

1 yum install -y scsi-*

2 vim /etc/tgt/targets.conf

locking_type = 3

内容:

<target iqn.2017-07.com.example:server.target1>

backing-store /dev/vdb

initiator-address 172.25.38.1 ###设置访问控制####

initiator-address 172.25.38.2

</target>

3 /etc/init.d/tgtd start

4 tgt-admin -s ###查看创建的iscsi的信息

集群节点server1和server2的操作:

lvmconf --enable-cluster

vim /etc/lvm/lvm.conf

1 yum install -y iscsi-*

2 iscsiadm -m discovery -t st -p 172.25.38.3

3 iscsiadm -m node -l

####以下步骤只能在一个节点上操作####

***************************************************************************************

###格式化成ext4###

fdisk -cu /dev/sda ###划分一个2G的分区###

partprobe ###同步分区表,如果一个节点有信息,另一个节点没有,就使用该命令进行分区表的同步###

mkfs.ext4  /dev/sda1 ###格式化成ext4,该文件系统是本地文件系统,一个节点往里存东西,另一个节点看不到###

mount /dev/sda1 /mnt/ ###两个节点都要进行mount###

测试:一个节点往里存东西,查看另一个节点的信息,发现看不到存的东西

[root@server2 ~]# cd /mnt/

[root@server2 mnt]# ls

lost+found

[root@server2 mnt]# cp /etc/passwd /mnt/

[root@server2 mnt]# ls

lost+found  passwd

[root@server1 ~]# mount /dev/sda1 /mnt/

[root@server1 ~]# cd /mnt/

[root@server1 mnt]# ls

lost+found

[root@server1 ~]# umount /mnt/ ###不过卸载了重新mount就可以看到###

[root@server1 ~]# mount /dev/sda1 /mnt/

[root@server1 ~]# cd /mnt/

[root@server1 mnt]# ls

lost+found  passwd

***************************************************************************************

#####创建lvm(只在一个节点上操作)#####

4 fdisk -cu /dev/sda ###创建lvm###

5 pvcreate /dev/sda1 (一个节点创建。另一个节点查看pvs)

6 vgcreate clustervg /dev/sda1(一个节点创建。另一个节点查看vgs)

7 lvcreate -L +2G -n demo clustervg(一个节点创建。另一个节点查看lvs)

8 mkfs.ext4 /dev/clustervg/demo ###格式化###

【lvm创建过程:

server1:

[root@server1 ~]# pvcreate /dev/sda1

Physical volume "/dev/sda1" successfully created

[root@server1 ~]# vgcreate clustervg /dev/sda1

Clustered volume group "clustervg" successfully created.

[root@server1 ~]# lvcreate -L +2G -n demo clustervg

Logical volume "demo" created

server2:

[root@server2 ~]# pvs

PV         VG        Fmt  Attr PSize  PFree

/dev/sda1  clustervg lvm2 a--   8.00g 8.00g

/dev/vda2  VolGroup  lvm2 a--  19.51g    0

[root@server2 ~]# vgs

VG        #PV #LV #SN Attr   VSize  VFree

VolGroup    1   2   0 wz--n- 19.51g    0

clustervg   1   0   0 wz--nc  8.00g 8.00g

[root@server2 ~]# lvs

LV      VG        Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert

lv_root VolGroup  -wi-ao----  18.54g

lv_swap VolGroup  -wi-ao---- 992.00m

demo    clustervg -wi-a-----   2.00g

[root@server2 ~]# lvs

LV      VG       Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert

lv_root VolGroup -wi-ao----  18.54g

lv_swap VolGroup -wi-ao---- 992.00m

9 在web上的操作(添加资源)

resources ---> add

service  groups  ---> apache --->

测试:

1

[root@server1 ~]# mount

/dev/mapper/VolGroup-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/vda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

none on /sys/kernel/config type configfs (rw)

/dev/mapper/clustervg-demo on /var/www/html type ext4 (rw)

[root@server1 ~]# cd /var/www/html/

[root@server1 html]# ls

lost+found

[root@server1 html]# vim index.html

[root@foundation78 ~]# curl 172.25.78.100

<h1>www.westos.org</h1>

2

[root@server1 html]# clusvcadm -r apache -m server2 ###将资源重定位到server2

Trying to relocate service:apache to server2...

[root@server2 ~]# mount

/dev/mapper/VolGroup-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/vda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

none on /sys/kernel/config type configfs (rw)

/dev/mapper/clustervg-demo on /var/www/html type ext4 (rw)

[root@server2 ~]#

五 删除后端存储iscsi

1 在web上删除资源:

service groups --- > apache ---> filesystem --- > remove ---> submit

resources ---> webdata ---> delete

2 删除lvm

clusvcadm -d apache

lvremove /dev/clustervg/demo

vgremove clustervg

pvremove /dev/sda1

iscsiadm -m node -u ###两个节点都要登出###

iscsiadm -m node -o delete ###两个节点都要进行删除###

3 查看/dev/sda是否已经没有了

cat /proc/partitions

六 gfs2文件系统(网络文件系统)

1 iscsiadm -m discovery -t st -p 172.25.78.3

2 iscsiadm -m node -l

####以下操作在一个节点上进行###

3 fdisk   -cu   /dev/sda

4 pvcreate /dev/sda1

5 vgcreate clustervg /dev/sda1

6 lvcreate -L +2G -n demo clustervg

7 mkfs.gfs2 -j  3 -p lock_dlm -t haha:mygfs2 /dev/clustervg/demo ###-j指定日志的个数,默认日志的大小为128M,-p指定锁,-t:集群的名字

8 mount  /dev/clustervg/demo   /var/www/html ###两个节点都要挂载###

测试:在一个节点上将往例存东西,另一个节点也可以看到

####开机自动挂载####

1 vim /etc/fstab

内容:

UUID="6f35be88-3402-45a8-8cd1-2943906941f2"  /var/www/html  gfs2  _netdev,defaults     0        0

2 mount   -a

###lvm扩展###

1 lvextentd   -L  +4G   /dev/clustervg/demo

2 gfs2_grow    /dev/clustervg/demo

本文转自blueclo51CTO博客,原文链接:http://blog.51cto.com/12774272/1951600 ,如需转载请自行联系原作者

cluster(1)相关推荐

  1. Redis高可用集群Redis Cluster搭建

    前言: Redis3.0版本之前,可以通过Redis Sentinel(哨兵)来实现高可用 ( HA ),从3.0版本之后,官方推出了Redis Cluster,它的主要用途是实现数据分片(Data ...

  2. Redis 高级特性(5)— 集群模式(主从模式、哨兵模式、cluster 集群模式)

    Redis 是如何做到高可用的呢? 它主要通过支持主从模式.哨兵模式.集群模式这三种模式,来满足不同业务特点和可用等级的需求. 其中,主从模式部署最简单,用得也最多,集群模式比较复杂,但可用性最高. ...

  3. Python,OpenCV中的K均值聚类——K-Means Cluster

    Python,OpenCV中的K均值聚类 1. 效果图 2. 原理 2.1 什么是K均值聚类? 2.2 K均值聚类过程 2.3 cv2.kmeans(z, 2, None, criteria, 10, ...

  4. mysql 集群实践_MySQL Cluster集群探索与实践

    MySQL集群是一种在无共享架构(SNA,Share Nothing Architecture)系统里应用内存数据库集群的技术.这种无共享的架构可以使得系统使用低廉的硬件获取高的可扩展性. MySQL ...

  5. Mysql Cluster 集群 windows版本

    VM1:192.168.220.102 管理节点(MGM) VM2:192.168.220.103 数据节点(NDBD1),SQL节点(SQL1) VM3:192.168.220.104 数据节点(N ...

  6. Redis6安装配置集群cluster以及集群宕机注意事项

    Redis6的cluster模型推荐3主3从 先准备3台服务器,每个上面部署2个redis,服务器配置2核2G: 下面在每台服务器安装redis6,每台机器只要安装一次即可,然后分别配置2个端口的co ...

  7. 【VMC实验室】在QCloud上创建您的SQL Cluster(1)

    在国内公有云厂商上搭建一套SQL Cluster的难度相信做Windows的童鞋都会很清楚,并非它的搭建有多少难度,只是很多细节需要注意. 腾讯云,QCloud,为什么选择QCloud来做这个实验,除 ...

  8. redis cluster 安装配置

    一.redis集群安装配置 1.下载redis源码包并下载 wget http://download.redis.io/releases/redis-3.0.7.tar.gz $ tar xzf re ...

  9. 深入解析redis cluster gossip机制

    社区版redis cluster是一个P2P无中心节点的集群架构,依靠gossip协议传播协同自动化修复集群的状态.本文将深入redis cluster gossip协议的细节,剖析redis clu ...

  10. 【推荐】MySQL Cluster报错及解决方法(不断更新中)

    排查问题技巧: MySQL Cluster 自带了一个错误代码的查看的小程序.通过这个小东西我们可以方便的定位问题的原因. 这个程序就是 perror 在MYSQL安装目录的bin下面. 如报错:ER ...

最新文章

  1. 比特币耶稣Roger Ver赠送中国著名经济学家巴曙松1枚比特币现金BCH
  2. CentOS系统Nginx配置免费https证书
  3. java数组长度怎么求,含答案解析
  4. android 布局权重问题(最近布局经常坑爹)
  5. C++入门经典-例8.1-类的继承
  6. jq之slideDown() stop()
  7. mysql 删除创建表分区_创建,增加,删除mysql表分区
  8. 【蓝鸥Unity开发基础三】课时3 Terrain地形系统【未完】
  9. python查看指令的方法python -h
  10. html如何判断ie版本,在html中判断IE浏览器的版本
  11. 单元测试引入hsqldb探索
  12. 主从表mysql外键_主从表主键外键
  13. 深度学习模型压缩方法概述
  14. 卷组删除pv_LVM 移除PV步骤
  15. 解决Access数据库突然变得很大的方法
  16. java推送微信消息换行_微信公众平台开发教程之文本消息如何换行(第十二课)
  17. MSDC 4.3 接口规范(19)
  18. 线性回归模型(Linear regression model)
  19. 卷积神经网络与神经网络,卷积神经网络基础知识
  20. python--真气网监测站点数据的抓取

热门文章

  1. 将学生信息按照总分排名然后分别保存较高的几位和较低的几位学生信息到两个不同的文件
  2. 你创业为什么会失败?
  3. 网站如何知道浏览器的用户在使用什么语言?
  4. 《最优化方法及其Matlab程序设计》马昌凤 部分习题答案
  5. java的intern()方法详解
  6. 我的世界java能开光追吗_《我的世界》开光追是怎样一种体验
  7. VBA基础函数:取数组最大下标——UBound函数
  8. 使用 spark sql extensions 实现 skew join
  9. 达人评测 红米K30s至尊纪念版和iQOO Neo5活力版
  10. 【搞笑】新闻联播熏陶下的小学生作文