一: 基础讲解

1  RHCS 最对支持16个节点

2  基础条件

[root@localhost ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.10.10.1 node1.example.com  node1

10.10.10.2 node2.example.com  node2

10.10.10.3 node3.example.com  node3

10.10.10.4 node4.example.com  node4

防火墙关闭,selinux关闭NetworkManager

service NetworkManager stop

chkconfig NetworkManager off

二: 工具conga讲解及安装

1 组成

Congaricciluci组成

2 luci讲解

Luci装在非节点主机上

3 luci安装

Yum  -y install luci

service luci startchkconfig  luci on

image.png

image.png

image.png  

登出,授权的账号登陆

image.png 

4 所有节点操作(ricci

yum -y install ricci    11111tcp

Id  ricci   (查询账户)

echo redhat | passwd  --stdin ricci

service  ricci startchkconfig ricci on

netstat -anptu | grep 11111

5 登陆luci创建集群(有权限用户)

image.png 

 

 

6 节点加入群集失败,查看cman服务

各个节点都应该有的配置文件/etc/cluster/cluster.conf,如果没有拷贝其他服务器上的

/etc/init.d/cman start

image.png 

7 集群信息查看与通讯问题

 image.png

群集节点相互通讯问题

 

image.png 

8 其他问题

各个节点cman 必须设置开机启动

可以通过watchps  查看yum 装的包

Watch -n 1 ps  aux | grep yum

9 添加节点

 

image.png 

 

三:CCS命令行配置集群(同luci功能相同)

1 节点装ricci

2 使用查询

Ccs  -h                     查看帮助

ccs -h node1.example.com --lsnodes     查看节点信息,输入ricci密码

3 增加节点

yum -y install cman rgmanager lvm2-cluster sg3_utils gfs2-utils  ricci  ccs

或者直接yum -y groupinstall "高可用性管理" "网络存储服务器"

echo 密码 | passwd  --stdin ricci

在新节点上执行

ccs  -h node1.example.com(其中一个节点) --addnode node3.example.com(新节点)

ccs -h node1.example.com(上面相同节点名称) --setcman

查看其他节点/etc/cluster/cluster.conf 文件变化

cat [root@node1 ~]# cat /etc/cluster/cluster.conf

<?xml version="1.0"?>

<cluster config_version="3" name="tempcluster">

<clusternodes>

<clusternode name="node1.example.com" nodeid="1"/>

<clusternode name="node2.example.com" nodeid="2"/>

<clusternode name="node3.example.com" nodeid="3"/>

</clusternodes>

<cman/>                             标红的两处是否有变化

<fencedevices/>

<rm/>

</cluster>

是否加入节点,将有加入的拷入其他所有节点

重启cman服务,前端页面查看(也可以手动启动别的节点启动的服务)

ccs -h node1.example.com --sync --activate  startall     同步配置文件并起服务(验证有问题)

四:fencing-vmx套件搭建(集群)

1:集群部署

image.png 

搭建平台不同,选的不同,下面主要以KVM讲解fence-vmx红帽的

image.png 

将节点加入fencing设备

image.png 

image.png 

 

 image.png


image.png 

所有节点都做

2: 物理机部署

yum -y install fence-virtd fence-virtd-libvirt fence-virtd-multicast

配置fence设备

Key生成方式 

mkdir /etc/cluster  

dd if=/dev/urandom  of=/etc/cluster/fence_xvm.key bs=1K count=4

将刚才的key拷到其他节点

for i in {0,1,2}; do scp /etc/cluster/fence_xvm.key 172.25.254.16$i:/etc/cluster/; done

 

fence_virtd -c

功能模块   (默认即可)

多播方式监听请求(默认)

端口(默认)

监听网络  (私有的,相互之间通讯的)接口

共享key  (用来验证用户密码)       需要生成(以生成则此处直接回车)

Backend module [libvirt]            (默认即可)如果此处不是libvirt,就改一下

 

Y  就可以了

完成后启动服务,开机启动

systemctl restart fence_virtd

systemctl restart fence_virtd

节点上停其它节点命令测试

 

Fence_node   节点

或者直接down网卡

宿主机防火墙一定要配好

 

以下为配置时的状态:

[root@localhost ~]# fence_virtd -c

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       如果网卡接口没问题可以不改

 

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]:    (需要生成)

 

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

五:资源与资源组搭建(http

1: 资源创建

image.png 

虚拟VIP 以提供服务

 

image.png

image.png 

添加apache资源


 image.png

image.png

 

配置存储 (服务端与客户端多路径)节点都做

在任意一个节点上分区,格式化一块磁盘partprobe识别一下

格式化

 mount /dev/mapper/mpathap1 /var/www/html/            格式化完成挂载在/var/www/html目录下

 

上面的VIP

ip addr add dev  eth0  172.25.254.199/24

启动httpd服务,如果报错  chcon -R -t httpd_sys_content_t /var/www/html/再次启动

service httpd start

访问测试 --------------------------------

 

service httpd stop

umount /var/www/html/

ip addr del dev eth0 172.25.254.199/24

 

其他节点也要测试,不用在分区了,直接partprobe,后面一样

 

集群做高可用

挂载(增加文件系统)

image.png 

image.png 

2: 故障切换域

 

image.png

image.png 

优先级1--99 数字越小,优先级越高

3: 资源组(关联应用)

 

image.png

image.png 

增加的资源就是上面定义的ip   apache   文件系统(挂载)

image.png

 

提交,

提交有可能失败 查看每个虚拟机上的磁盘是否都能识别已经分好的区

3:查看clustat   -i   1一秒刷新一次

image.png 

4: 测试

资源故障 (主机不重启)  

任意节点 killall -9 httpd

其他节点看效果  clustat          -i             1   一秒钟一次

 

心跳故障(主机重启)   测试的网络一定要和主机的网络通讯

  

5:集群命令

clusvcadm    -h       查看命令帮助

clusvcadm    -d    service:name(集群名字)     停止集群服务

Clusvcadm   -e  资源组名字        启动集群,在那个设备上操作,代表服务跑在该节点

clusvcadm   -r   service:name   -m   rheld5(节点)      -r指切换  -m指定成员    

clustat status   可以查询集群名字

 

 Service Name                       Owner (Last)                       State         

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

 service:name                       (rhel5f)                           disabled  

6: 集群配置修改

先停掉,在改操作

clusvcadm    -d    service:name(集群名字)

Luci上改,更新,再启动

如果启动失败,查/var/log/cluster/rgmanager日志

查看/etc/cluster/cluster.conf    文件,更改版本号和错误的位置

Cman_tool    -r  version    将文件同步给其他节点

再次启动服务  Clusvcadm   -e  资源组名字

 

六:资源与资源池(samba

1 资源搭建

image.png 

 

image.png

image.png 

所有节点创建文件夹(共享目录)

共享存储分区,multipath -r重读,  partprobe  以识别该分区,格式化,挂载,修改selinux上下文(man  samba_selinux

 

所有节点统一装samba包,统一配置文件,partprobe

测试能否挂载,完成之后要卸载。

 

image.png

image.png 

 

image.png

image.png 

 

 

 

2 故障转移域

image.png

 

image.png 

 

3定义资源组

 image.png

 image.png

image.png

 

查看   smbclient -L //10.10.10.200

七:双节点

1: 预期票值

Cman_tool status

预期票值改为1

2: 配置文件多出一行

grep cman /etc/cluster/cluster.conf

<cman expected_votes="1" two_node="1"/>             双节点

八: 高级资源管理

1 子资源

父子与平级关系,服务启动顺序

平级的启动顺序可以看  

vim /usr/share/cluster/service.sh    查看,里面没有的根据定义启动

image.png 

2 父子关系实验(基于NFS

创建故障转移域

image.png

 

image.png 

配置NFS共享存储

分区,格式化,挂载测试

 

别的节点partprobe 识别分区,multipath -r ,创建相同目录/nfs_data,挂载测试,完成后卸载

资源创建 

 image.png

 image.png

image.png

image.png

image.png

image.png

image.png

网络通讯问题(注意)

完成用网路ip挂载测试

3: 非关键资源实验

 image.png 

image.png

节点观察跑服务的节点多出一个IP

测试删掉上面的非关键资源,观察日志

ip addr del dev eth1 10.10.10.100/24

Tail /var/log/cluster/rgmanager.log

Clustat  status

clustat status

Cluster Status for tempcluster @ Tue Feb 21 16:35:34 2017

Member Status: Quorate

 

 Member Name                                 ID   Status

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

 rheld5                                          1 Online, rgmanager

 rhel5f                                          2 Online, Local, rgmanager

 rhel47                                          3 Online, rgmanager

 

 Service Name                       Owner (Last)                       State         

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

 service:name                rhel5f                             started    [P]

 service:nfs_service                rheld5                             started       

 service:sambaservice               rhel47                             started     

 

clusvcadm -c service:name  恢复非关键资源命令

4 关键资源实验

image.png 

测试,删掉IP

查看日志,在查看设备,设备会恢复

 

九:仲裁机制

1:仲裁基础讲解

预期票值(所有节点总票制)/2 + 1     仲裁

Expected votes: 3     预期票值(节点票值之和)

Total votes: 3        总票值(当前活动的)

Node  votes 1       当前节点票值(可以改值)

Quorum: 2          仲裁票值   

2: 查看票值的几种方法

Cman_tool   status  查看

ccs_tool lsnode(查看票值)

查看配置文件    (默认值为1时,配置文件不显示)

3: 更改票值

image.png 

如果查看其他节点没有同步票值,将已有改动文件同步其他节点

直接拷贝

每次修改版本一定会变

[root@node3 ~]# cat /etc/cluster/cluster.conf

<?xml version="1.0"?>

<cluster config_version="4" name="tempcluster">

<clusternodes>

<clusternode name="node1.example.com" nodeid="1"/>

<clusternode name="node2.example.com" nodeid="2"/>

<clusternode name="node3.example.com" nodeid="3"/>

</clusternodes>

<cman/>

<fencedevices/>

<rm/>

</cluster>

如果最后还不行,需重启设备,然后查看cman服务状态

 

image.png 

十:第三方仲裁机制

1:仲裁磁盘

防止双节点私网导致fencing循环

2: 仲裁磁盘讲解

仲裁磁盘(两边写入是否成功)

Ping的形式,做探测

仲裁磁盘应用,(双节点,多节点时。群集最后一个正常也能通讯,)

仲裁磁盘设置票值一般为节点数-1     ,或者更大

总裁磁盘配置(节点票数必须为1,需要10M,一定要都能读写,不能使用LVM

3: 配置仲裁磁盘

登陆双节点之一的设备。划分共享分区110M,不能是LVM

 partprobe /dev/mapper/mpatha

 multipath -r  ,格式化为仲裁磁盘mkqdisk -c /dev/mapper/mpathap5 -l myqdisk

-c  指定设备,-l   设置标签      仲裁磁盘节点最多16

Mkqdisk   -L /dev/mapper/mpathap5 查看一下

 

另一个节点

partprobe /dev/mapper/mpatha

multipath -r                                            最多16个节点

image.png 

普通用户登陆

 

image.png 

Ping -c  1  -W 1 IP   W代表一秒不通,返回超时

 

image.png 

两个条件都得满足

image.png 

提交失败,,看日志

[root@rhel5f ~]# tail /var/log/cluster/qdiskd.log

Feb 22 18:51:24 qdiskd Quorum disk timings are too slow for configured token timeout

Feb 22 18:51:24 qdiskd  * Totem Token timeout: 10000ms

Feb 22 18:51:24 qdiskd  * Min. Master recovery time: 63000ms

Feb 22 18:51:24 qdiskd Please set token timeout to at least 66000ms

Feb 22 18:51:24 qdiskd Configuration failed

Feb 22 18:51:27 qdiskd Quorum disk timings are too slow for configured token timeout

Feb 22 18:51:27 qdiskd  * Totem Token timeout: 10000ms

Feb 22 18:51:27 qdiskd  * Min. Master recovery time: 63000ms

Feb 22 18:51:27 qdiskd Please set token timeout to at least 66000ms

Feb 22 18:51:27 qdiskd Configuration failed

Qdisk总时间为存储的1.3被,cman的时间应该为qdisk1.7

Cman默认与qdisk通讯10

Man cman  搜索token

修改配置文件vim /etc/cluster/cluster.conf

 

<cman expected_votes="3"/>

         <totem token="66000"/>      cman下添加该行,此处数值为qdisk1.7

重启系统

文件系统多出两行,

 <cman expected_votes="3"/>

         <totem token="66000"/>

         <quorumd interval="3" io_timeout="1" label="myqdisk" min_score="1" tko="13" votes="1">

                <heuristic program="ping -c 1 -W 1 172.25.254.2" tko="5"/>

 

测试一:    其中一个节点做防火墙测试其效果

Iptables -t filter -A INPUT -s 上文所提到网关地址 -j DROP

查看日志和虚拟机状态

测试二:节点不能对仲裁磁盘读写入(多节点时,测试到只剩下一个节点)

直接down 网卡测试

看日志,服务器状态

 

 

 

十一: 电源fencing设备

1fencing之远程控制卡

远程控制卡(基于内部的,基于设备硬件{HP(iL0) IBM(rsall),dell(drac)}卡等)

image.png 

提供iL0卡的账户密码,使其关机,BA关机

硬件需要配置IP用户密码等(IPMI(只能平台管理接口)

2: fencing网络电源交换机

NPS(基于外部的 san switch     network switch

image.png 

3: 软件(基于红帽fencing-vmx

十二:集群LVM

1: Clvm  HA-lvm讲解

Clvm多节点可同时访问,所有节点可同时访问存储(gfs2

HA-lvm   不能同时访问,同一时间只能一个

(取决文件系统)

2: 配置HA_lvm

HA  所有节点启动clvmd服务,把lvm模式改成集群环境工作,

所有节点   配置HA-LVM

Rpm  -q lvm2-cluster

 lvmconf --enable-cluster      LVM工作在群集模式

Service clvmd  start ;chkconfig clvmd  on

 

其中一个节点话分区,partprobe  ,multipath  -r  

其他节点partprobe  ,multipath  -r      两边一定都要认出磁盘

关注lvs  是否为群集模式LV

一个节点上创建lv    /dev/firstvg/httplv

格式化ext4

所有节点挂载测试

防止所有人同时挂载,将其设置为不激活状态

Lvchange    -an   /dev/firstvg/httplv

 

 image.png


 

image.png

image.png 

 

启动时lvm默认激活,需要手动改,其他和上面一样配置资源一样

如果没切换到集群模式,可以通过vgcreatelvcreate  -cy  创建集群的卷组

3: Clvm(gfs2文件系统)

基于gfs2  NFS的集群共享

制作共享集群LVM的逻辑卷

Rpm -qf `which  mount.gfs2`

Rpm -qf `which  mkfs.gfs2`

所有节点Yum -y install gfs2-utils

查看群集名cman_tool   status

cluster Name:即群集名

 

mkfs.gfs2   -t 群集名:所表的名字(随意)   -j  指定日志个数(根据节点数指定)-J  指定日志大小

日志单节点个数默认128M

Nkfs.gfs2 -t   集群名:锁表明  -j  3  -J 128M /dev/mapper/nfsvg-nfslv

可以加-p  指定所协议,默认的lock_dlm

所有节点挂载测试,可同时挂载,卸载

文件系统

  image.png

image.png

image.png


设置IP地址

定义资源组(其中有父子关系)

Gfs2_tool  journals   /挂载点(或者磁盘路径)  查看日志空间个数  此处不能多加/

Gfs2_jadd   增加日志空间个数  -j  个数(代表加的数量)  设备

已经使用了gfs2的挂载空间上去增加

Gfs2_jadd   -j   1   /dev/myvg/mylv

 

gfs2的在线lv扩展

Lvextend  -l  80 /dev/myvg/mylv

Gfs2_grow -Tv   /dev/myvg/mylv     -T测试  v详细信息

先测试,在扩增

4: gfs2磁盘配额

分区,partprobe,所有节点

单个节点创建lv(集群形式)

格式化gfs2 文件系统

挂载  mount  XXXX     /net

Mount -o  remount.acl  /net

 

Setfacl    XXXX  /net

Chmod 700   /net

 

Mount -o remount,quota=on  /net

Quotacheck  -ug   /mnt      创建用户和组的配额

Repquota   -a   /mnt   查询   

Setquota   -u   user1  快的软限制(单位默认K)  块的硬限制  inode软限制  inode硬限制   目录

Setquota  -u user1 102400 204800  0  0 /net

切换用户测试

 

Vim /etc/fstab

Xxxx   xxxx  xxxx   defaults,acl,quota=on   0   0

Chkconfig  gfs2 on   设置开机启动,让其可以读取/etc/fstab

/etc/fstab启动较早,所以后面需要让gfs2 重新读取、/etc/fstab

 

Chattr   +j   目录                 gfs2加日志功能

 

 

 

 

十三:日志

群集日志/var/log/cluster/rgmanager.log

Fencing日志/var/log/cluster/fenced.log

仲裁磁盘日志/var/log/cluster/qdiskd.log