企业级集群架构

436企业级集群架构

集群436

作者:libin

*-------------------------下面为RHCA-红帽集群安装及配置管理(建议先看理论在实操)*

实验环境说明:实验测试

*2台centos7的虚拟机 4C4G 100G*

*192.168.124.134 libin3.com master*

*192.168.124.133 libin2.com node1*

192.168.124.132 libin.com node2 (我在后面添加的加入了一次集群测试)

1、设置selinux(在每个节点)

#setenforce 0

[root@libin3 ~]# vim /etc/selinux/config

SELINUX=disabled

2、关闭防火墙(在每个节点)

# firewall-cmd --list-all-zones

# systemctl stop firewalld.service

# firewallcmd --set-default-zone=trustec #将防火墙添加到信任区域,这样开启防火墙也没有事

3、设置域名解析(在每个节点)

#vim /etc/hosts

==>192.168.124.134 libin3.com master

==>192.168.124.133 libin2.com node1

4、安装集群测试(在每个节点)

#yum install -y pcs*

5、添加并安装crm的yum源(在每个节点)供额外学习用

#cd /etc/yum.repos.d/;vim cr.repo

[network_ha-clustering_Stable]

name=Stable High Availability/Clustering packages (CentOS_CentOS-7)

type=rpm-md

baseurl=http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/

gpgcheck=1

gpgkey=http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/repodata/repomd.xml.key

enabled=1

#yum install -y crmsh

下载一个集群包

#Wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/network:ha-clustering:Stable.repo

6、给集群用户设置设置密码(在每个节点)

# cp corosync.conf.example corosync.conf

# cat /etc/passwd | grep hacluster #安装pcs会多出一个集群用户

# echo helloword | passwd --stdin hacluster

# systemctl start pcsd.service #开启集群服务

# netstat -tlpn grep ruby #决定了能不能图形化访问

# pcs cluster auth master #授权,写主机名

Username: hacluster Password:

master: Authorized

# cd .mozilla/;rm-fr #清空浏览器缓存

# curl https://libin3.com:2224/ #访问,登陆就进入图形界面了

7、添加节点到集群中

img

可以看到双节点都正常

img

8、创建新的集群 点击“more nodes”就能添加更多节点。点击“create CLuster”完成

img

9、添加仲裁

*(双节该操作点可以忽略,3节点或更多时需要,Quorum=3/2+1=2,相当于可以掉一台)*

img

# pcs cluster standby master 手动将master指定为备用节点

# pcs cluster unstandby master 取消备用节点

# pcs resource move vip master 指定移动VIP到master节点,前提节点必须是online状态

#corosync-quorumtool -l 查看节点数量和节点名

10、查看集群状态(集群管理命令)

# pcs cluster status

img

#pcs cluster stop --all #如果不带“--all”,那就是停止集群中的哪个节点。如果带了--all就是所有节点

#pcs cluster start --all #开启所有节点

#pcs cluster enable --all #开机启动所有节点集群服务

# corosync-cmapctl |grep members #检查当前集群的成员信息

# crm_mon -1 #监测集群状态

# pcs cluster node remove master #移除集群节点master

# crm_verify -L -V #检查集群配置是否有误

# pcs property set stonith-enabled=false #检查有stonith报错就执行该命令

# pcs property list #检查已经更改过的集群属性

# pcs property --all #检查已经更改过的集群属性,全局使用该命令

集群是基于这三个服务

# systemctl start corosync.service;systemctl enable corosync

# systemctl start pacemaker.service ;systemctl enable pacemaker.service

# systemctl start pcsd;systemctl enable pcsd

img

11、创建VIP(命令和图形)master节点,随意哪个节点都行

(1)、添加一个集群的虚拟VIP资源(命令)创建VIP的前提是有双节点才会有效192.168.124.200

# pcs resource create vip ocf💓IPaddr2 ip=192.168.124.200 nic=eth0:1 cidr_netmask=24 iflabel=0

(2)、修改或更新资源

# pcs resource update pcs-vip ocf💓IPaddr2 ip=192.168.124.201 nic=eth0:1 cidr_netmask=24 iflabel=0

img

(3)、可以看到VIP已经创建成功

#crm_mon -1

# ip a | grep eth0:1

img

img

img

(5)、查看创建的vip资源(图形化)

img

(6)、哪些资源的服务类型是由哪些脚本提供的

# pcs resource providers

(7)、查看一个资源的详细信息

# pcs resource show 资源名

(8)、启动资源(从(8)-(11)为额外自学命令)

# pcs resource debug-start pcs-vip

(9)、删除资源

# pcs resource delete 资源名

(10)、移动资源

# pcs resource move 资源名 node1

(11)、增加资源集群节点,使集群不会下线

# pcs cluster standby master

12、修改配置文件前,要关闭集群(如:修改仲裁)

# pcs cluster stop --all

img

# vim /etc/corosync/corosync.conf

==>quorum_votes: 2 修改仲裁票数

img

#pcs cluster sync 只要修改了配置文件,集群都要同步,另外一个节点配置文件查看会同步

# pcs cluster start --all 启动集群所有节点

13、创建资源组

(1)看到组运行正常,vip已经被加入到组中

img

img

(2)创建一个资源组,将vip资源加入到组中(命令的方式)

pcs resource group add group1 vip

(3)查看资源组已经成功创建(以下操作供测试)

img

移除组

# pcs resource group remove group1

img

列举组的信息

# pcs resource group list

14、每个节点安装http服务,在集群任意节点创建二个目录进行共享(基于NAS的存储共享)基于master节点

注:集群中的所有服务不能手动去restart

(1)安装httpd服务

# yum install -y httpd

img

(2)创建2个共享目录

#mkdir /mysq

#mkdir /mysql

#echo welcom to RHCA > /www/index.html

#chmod o+w /www/

#chmod o+w /mysql/

#systemctl start nfs

(3)进行共享

#vim /etc/exports

==>/www *(rw,sync)

==>/mysql *(rw,sync)

#systemctl restart nfs

#systemctl status rpcbind.service

#showmount -e

(4)创建集群目录共享

img

img

img

补充:nfs的命令挂载方式

# mount -t nfs master:/www /var/www/html/

(5)测试(各节点测试都可以访问)

img

img

img

(6)修改网页再在其他节点进行测试

[root@libin3 yum.repos.d]# vim /www/index.htm

img

(7)、修改vip资源优先级进行测试(优先级)

# pcs resource group remove group1 先移除组

15、修改节点优先节点进行测试(固定节点),优先级的设置优点在于某一台机器挂掉或服务挂掉,业务会迁移到另外一台优先级机器上去

img

修改资源元属性后,点击最后的应用

img

测试(1):

img

# pcs cluster standby master 停用master节点

# crm_mon -1
img

测试2:

修改优先级

img

# pcs cluster standby node1

# pcs cluster standby master

# pcs cluster unstandby node1

# pcs cluster unstandby master

# crm_mon -1

img

16、mysql的高可用集群

(1)、每各节点安装mysql服务端包(前提要安装httpd服务)

#mkdir /mysql #我在master上创建

# vim /etc/exports #前面我已经创建了,这就没有进行创建挂载

==>/mysql *(rw,sync)

# yum search mariadb

# yum install mariadb-server.x86_64 -y

# yum install mariadb-server.x86_64 -y

# chown 27:27 /mysql/ #修改为mysql的所属用户所属组

img

(2)、创建一个mysql的vip(若要设置vip地址为一样,建议先删掉之前的vip测试)

img

查看其之前共享的目录

img

img

img

(3)、为mysql创建一个组 group2

img

(4)、查看其服务的目录

# cat /etc/passwd | grep mysql

img

(5)、创建一个nfs的共享

img

(6)、创建一个服务

img

(7)、检查资源服务是否启动正常

# crm_mon -1

img

img

img

若有资源没有起来,可以使用以下命令(让集群把服务拉起来)

#pcs cluster stop --all #如果不带“--all”,那就是停止集群中的哪个节点。如果带了--all就是所有节点

#pcs cluster start --all #开启所有节点

(8)、测试

# pcs cluster unstandby master #将master备用节点给关闭

# crm_mon -1 #查看资源变化,HTTP服务跑在node1,mysql跑在了master上

img

# df -h #多了一个mysql的挂载

img

[root@libin3 ~]# mysql #在master节点上操作

创建一个libin的用户,密码为helloword

MariaDB [(none)]> grant all on . to libin@localhost identified by 'helloword';

MariaDB [(none)]> show databases; #查看数据库

MariaDB [(none)]> create database libin; #创建一个libin的数据库

MariaDB [(none)]> use libin; #登录libin用户

MariaDB [libin]> show tables; #查看表信息

MariaDB [libin]> create table libin(id int,name varchar(10)); #给libin创建表信息

img

MariaDB [libin]> insert into libin values(1, 'tom'); #给libin表插入值

MariaDB [libin]> select * from libin; #搜索来自libin表的所有信息

img

# cd /mysql/;ll #所有的存储都是在master节点

img

17、关于NFS的高可用

1、vip 虚拟IP

2、fs 文件系统

3、nfserver 服务

4、export 资源导出

(1)、创建一个分区(在node1节点创建)

# fdisk /dev/sda #创建一个2G的盘(node1节点)

# partprobe /dev/sda

img

# mkfs.xfs /dev/sda3 #格式化

# cat /proc/partitions #查看分区

# rpm -qa | grep nfs #查看是否装包

# systemctl status rpcbind.service #查看服务是否启动

# systemctl status nfs #这个nfs服务不用手动去启动

# systemctl enable rpcbind;systemctl start rpcbind

(2)、创建一个vip:192.168.124.201

img

(3)、创建组

img

(4)、创建文件系统

# mkdir /nfs (node1节点创建)

img

(5)、创建一个服务

img

(6)进行挂载共享

img

(7)可以看到目录已经共享

[root@libin2 ~]# chmod 777 /nfs/

img

img

[root@libin3 ~]# mount 192.168.124.201:/nfs /mnt/nfs #客户端进行挂载

img

[root@libin3 nfs]# >file #客户端创建一个文件

img

服务端也可以看到共享目录已经写入文件(我这只有2个节点,不好进行多客户端测试)

img

18、集群环境脚本测试(在master节点上操作)

[root@libin3 ~]# cd /usr/local/bin/

[root@libin3 ~]# vim libin.sh #写一个时间输出的脚本

#!/bin/bash

date >>/tmp/libin3

[root@libin3 ~]# chmod a+x libin.sh #使所有人都可以执行

[root@libin3 bin]# libin.sh #相当于是输出了一条命令

[root@libin3 tmp]# cd /tmp/;cat libin3 #date命令就会输出在/tmp/libin3里面

img

[root@libin3 bin]# scp libin.sh node1:'/usr/local/bin/' #将libin.sh拷贝到各节点

img

19、创建一个脚本资源

img

img

img

Update更正:不是10秒执行一次,而是监测的时间为10秒

# crm_mon -1 #查看资源运行的节点

img

[root@libin2 tmp]# cd /tmp/;cat libin3 #在node1节点查看

img

测试:当集群发生变化,监测就会变化

# pcs cluster standby node1 #将node1节点进行standby

img

因为资源会飘走,所有另外一个节点也会有变化

img

# pcs cluster unstandby node1

# pcs cluster standby master #在将资源迁回node1,在查看node1的变化

img

20、集群日志配置

*我写在了第五章的配置集群日志里面*

21、集群邮件配置

当集群发生变化,发送一封邮件(我这里将master节点作为邮件服务端)

(1)、邮件本地测试、客户端发送给服务端接受测试

# rpm -qa | grep postfix #每个节点安装邮件服务

postfix-2.10.1-9.el7.x86_64

# systemctl status postfix.service #服务已经在运行,没有就安装,centos默认有

# vim /etc/postfix/main.cf #侦听端口和域名(服务端master配置)

==>inet_interfaces = all

==>mydestination = \(myhostname, localhost.\)mydomain, localhost, $mydomain

==>#inet_interfaces = localhost

# systemctl restart postfix.service

# vim /etc/postfix/main.cf #node1节点配置邮件转发到服务器

==>relayhost = [192.168.124.134]

# systemctl restart postfix.service

测试发送一封邮件给自己 (test为标题)

# useradd rhca

# echo helloword | passwd --stdin rhca

# echo "rhca you pass" | mail -s test master rhca@libin3.com

# mail -u rhca #查看邮件自己能不能收(-t:后接邮件主题)

img

img

测试客户端邮件转发到服务端

[root@libin2 ~]# echo "libin is pass rhca" | mail -s test rhca@libin3.com

img

(2)、添加一个邮件服务资源

img

测试:

# crm_mon -1 #先查看资源在哪个节点

img

# pcs cluster standby master #断掉master,让资源跑到node1

[root@libin3 ~]# mail -u rhca #查看rhca用户是否收到邮件

img

# pcs cluster unstandby master

# pcs cluster standby node1 #测试node1节点挂掉,是否会收到邮件

img

22、资源的约束条件

*我写在了第5章的资源约束条件里面*

23、ISCSI服务端共享给客户端做存储(我这用master,libin3.com节点做服务端)

(1)、服务端配置

master节点添加一块8G的磁盘

img

# fdisk /dev/sdb #创建一个4G分区

# partprobe /dev/sdb

img

img

# yum install targetcli -y #master安装iSCSI服务

# systemctl enable targetclid.service #开启服务

# enablestart

# targetcli

> ls

img

/> cd /backstores/block

img

/backstores/block> create block1 /dev/sdb1 #创建一个分区block1,与block分区关联

img

/backstores/block> cd ..

/backstores> ls #可以看到block1分区创建成功

img

/backstores> cd ..

/> cd iscsi #进入iSCSI

/iscsi> create iqn.2021-12.libin3.com:master #创建 iqn.2021-12.libin3.com的登录名

img

/iscsi> cd /iscsi/iqn.2021-12.libin3.com:master/ #进入iqn.2021-12.libin3.com:master

img

/iscsi/iqn.20...n3.com:master> cd tpg1/

/iscsi/iqn.20...m:master/tpg1> acls/ create iqn.2021-12.libin3.com:disk #给服务端的卷做映射用(disk可以随意取)

img

/iscsi/iqn.20...m:master/tpg1> luns/ create /backstores/block/block1 #luns/:创建关联

img

img

/iscsi/iqn.20...m:master/tpg1> exit #退出

(2)、客户端配置(我这里为node1,libin2.com)

# yum provides iscsiadm

# yum install -y iscsi-initiator-utils -y #装包

# vim /etc/iscsi/initiatorname.iscsi #配置initiator名称,名称也是iqn格式

==>#InitiatorName=iqn.1994-05.com.redhat:1a9ebc10dabc #(这行忽略)

==>InitiatorName=iqn.2021-12.libin3.com:disk

# systemctl enable iscsid.service;systemctl start iscsid #启动服务

# iscsiadm -m discovery -t st -p 192.168.124.134 #我这用eth0的ip,因为eth0:1我做了服务,可以自行规划,发现成功# iscsiadm -m discovery也可以

img

img

# iscsiadm -m discovery -t st -p 192.168.124.134 -l #-l:代表连接

img

# lsblk #发现多了一块sdc:4G的盘

img

# iscsiadm -m session #查看客户端与服务端的对话连接

# iscsiadm -m session -P1 #-P1/-P2/-P3:显示更加向详细的信息

# iscsiadm -m session -P3

img

img

# iscsiadm -m session -P3 | grep -i timeout #查看超时时间

img

# vim /etc/iscsi/iscsid.conf #修改超时时间,要重启服务

node.session.timeo.replacement_timeout = 120

# systemctl restart iscsid

# iscsiadm -m node -U all #断开连接

# iscsiadm -m node -o delete #清除缓存

# iscsiadm -m discovery -t st -p 192.168.124.134 -l #重新连接

# iscsiadm -m session -P3 | grep -i timeout #超时时间才会改变,因为之前已经写入缓存

img

==========================================额外补充

删除操作 :# iscsiadm -m node -o delete -T iqn.2018-12.com.oven:master -p 192.168.4.10:3260

# vim /etc/iscsi/initiatorname.iscsi //添加客户端认证

# iscsiadm -m session -P 3 | grep -i attached // 验证会话状态

# systemctl restart iscsid //更新IQN

============================================================

(3)测试1:(第二章的内容 ;ID标识府区分盘)

我这里服务端有 eth0:192.168.124.34 eth0:1:192.168.124.200

img

[root@libin2 ~]# iscsiadm -m node -U all #客户端断开连接

[root@libin2 ~]# iscsiadm -m node -o delete #客户端清除缓存

服务端master操作

# crm_mon #让集群跑master节点

img

[root@libin3 ~]# fdisk /dev/sdb #服务端再做一个2G分区

img

# partprobe /dev/sdb #探测一下

img

----------------------------------------配置多路径-------------------------

服务端:

# targetcli #进入iSCSI配置多路径

/iscsi> cd /iscsi/iqn.2021-12.libin3.com:master/tpg1

/iscsi/iqn.20...m:master/tpg1> ls

img

/iscsi/iqn.20...m:master/tpg1> portals/ delete 0.0.0.0 3260 #删除0.0.0.0 3260的接入口

img

/iscsi/iqn.20...m:master/tpg1> portals/ create 192.168.124.134 3260 #创建接入口(2条)

/iscsi/iqn.20...m:master/tpg1> portals/ create 192.168.124.200 3260

img

/iscsi/iqn.20...m:master/tpg1> cd / #去创建block2

/> cd backstores/block/

/backstores/block> create block2 /dev/sdb2

img

img

/backstores/block> cd / #去创建lun1与block2关联

/> cd iscsi/iqn.2021-12.libin3.com:master/tpg1/

/iscsi/iqn.20...m:master/tpg1> luns/ create /backstores/block/block2 #可以看到2个luns了

img

/iscsi/iqn.20...m:master/tpg1> exit #保存退出

客户端去测试(我是node1/libin2.com)

# iscsiadm -m discovery -t st -p 192.168.124.134 -l #连接任一一条ip

img

# lsblk #此时可以看到成功的多路径

img

img

# iscsiadm -m session #查看到连接的路径

img

# udevadm info -h #查看iSCSI磁盘ID号

# udevadm info --query=all --name=/dev/sdc #/dev/sdc/d/e/f/都是共享过来的设备名,查看一块盘所有信息(方法1)

# cp /usr/lib/udev/scsi_id /usr/local/bin/ #红帽7需要拷贝到执行路径

# scsi_id -ug /dev/sdc

# scsi_id -ugx /dev/sdc #查看一块盘所有ID信息,方法2

# udevadm info --query=all --name=/dev/sdc | grep -i ser #查看设备ID串号,方法1

# scsi_id -u -g /dev/sdc #方法2

注:ID_SCSI_SERIAL:这样才是精确查看有几块共享盘

img

(注说明:做了两条路径,相当于访问lun0就会有2块盘,再做一个sdb2,创建一个block2/luns1此时就有4个盘符,这就是我操作的目的)

(4)、多路径配置及唯一标识ID配置(node1/libin2.com配置,我只有这个客户端)

#客户端都要装

[root@libin2 ~]# yum install device-mapper-multipath.x86_64 -y

[root@libin2 ~]# lsmod | grep multipath #查看multipath模块

[root@libin2 ~]# modprobe dm_multipath #加载multipath模块,临时

[root@libin2 rc.d]# echo "modprobe dm_multipath" >> /etc/rc.d/rc.local #追加到开机运行脚本里

[root@libin2 rc.d]# # chmod +x /etc/rc.d/rc.local #红帽7要加执行权限

# systemctl enable multipathd #启动服务

# systemctl start multipathd

# multipath #运行会报错

# cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/ #拷贝配置文件到/etc/(方法1)

img

# mpathconf --enable user_friendly_names n #生成配置文件(方法2,任选一种即可,我用来方法1)

注:方法2的“n”:vim /etc/multipath.conf 看到的user_friendly_names为no,拷贝的为yes,系统对磁盘是否设置一个友好的名字,就是yes与no的区别

(5)、盘名字的注释修改 与黑名单设置(我在node1节点操作)

[root@libin2 rc.d]# multipath -ll #可以看到盘的信息

img

[root@libin2 rc.d]# vim /etc/multipath.conf #当我修改user_friendly_names为no

[root@libin2 rc.d]# systemctl restart multipathd.service

[root@libin2 rc.d]# multipath -ll #盘的友好名mpatha、mpathb就不见了,只有设备ID了,可以对比2张图

img

# multipath -F #清除多路径的名单信息

# multipath reload multipathd #重新加载,但是名字也还是没有

# vim /etc/multipath.conf #修改成yes

==>user_friendly_names yes

# systemctl restart multipathd.service #重启服务

# multipath -ll

img

# multipath -ll #先查看WWID

img

# vim /etc/multipath.conf #修改黑名单

img

# systemctl restart multipathd.service

# multipath -ll #查看变化,只有1块盘了

img

# vim /etc/multipath.conf #注释掉黑名单,重启服务查看就会回来

img

# vim /etc/multipath.conf #将sd开头的磁盘都加入黑名单

img

# systemctl restart multipathd.service

# multipath -ll #任何一个盘都看不到

# cat /sys/block/sdc/device/vendor #查看厂商号

# cat /sys/block/sdc/device/model #查看型号

img

# vim /etc/multipath.conf #取反sdc的其他盘可以查看

img

# !sys #重启服务

img

# lsblk #(再把盘符的黑名单注释掉)

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

把黑名单跟取反的注释;在进行盘符改名

# multipath -ll #查看盘符的WWID

# vim /etc/multipath.conf

img

# systemctl restart multipathd #重启服务

img

img

查看:WWID:360014053adc294812174fd7a9b37106d已经改名成功

(注:如果要改多盘名,可以在加一个一个大容器单元multipaths内即可)

img

[root@libin2 mapper]# cd /dev/mapper/;ll

[root@libin2 mapper]# mkfs.xfs /dev/mapper/libin1 #格式化文件系统,客户端才能挂载

# mkdir /mnt/rhca

# mount /dev/mapper/libin1 /mnt/rhca/ #挂载(我这只挂载了一个,可以改名2个,都进行挂载)

(注:如果多客户端挂载,某一个客户端创建一个文件,另外一个客户端看不到,必须重新再挂载才能看到)

GFS就可以解决这个问题

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

配置文件(只做额外介绍,与实验无关)

[root@libin2 rc.d]# multipathd -k #进入多路径

multipathd>

multipathd> show config #各厂商配置文件

multipathd> exit

客户端断开连接(只做额外介绍,与实验无关)

# iscsiadm -m session #查看连接的名字,例如:iqn.2021-12.libin3.com:master

# iscsiadm -m node -T iqn.2021-12.libin3.com:master -p 192.168.124.134 -u #断开连接,但开机还会自动连上去,是因为连过会出现换缓存,红帽7只有客户端会有缓存。

# cd /var/lib/iscsi/nodes/iqn.2021-12.libin3.com:master/;ls

# cd /var/lib/iscsi/send_targets/;ls

img

img

# vim /etc/iscsi/iscsid.conf #客户端不仅是缓存配置文件,还有主配置文件设置

==>node.startup = automatic #每次开机都会重新加载,连接过的缓存就会保存在这

#node.startup = manual #可以设置为手动manual,我这里没有设置手动没必要

#彻底删除缓存信息,客户端重启就不会连接服务端的会话

# iscsiadm -m iqn.2021-12.libin3.com:master -p 192.168.124.134 -o delete

#多客户端的情况下,彻底断开连接并删除缓存

# iscsiadm -m node -U all #删除所有连接

# iscsiadm -m node -o delete #删除所有缓存信息

# cat /proc/partitions #就没有服务端共享的磁盘了

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

24、集群逻辑卷

如果刚开始就添加了3集群的话就忽略该操作:该操作根据个人环境及报错解决

(1)说明1:此次再增加一个集群坎坷比较多,对新手建议 刚开始就弄3节点的集群,要不然需要排错,而且会导致旧集群的资源全部瓦解。此次排错1.5小时

排错的思路:

添加了node2到集群,需要安装集群(方法(1)-(8)实验有写),如果添加报错

# yum install -y pcs*

# Vim /etc/hosts (自己定义三个节点)

192.168.124.134 libin3.com master

192.168.124.133 libin2.com node1

192.168.124.132 libin.com node2

# echo helloword | passwd --stdin hacluster

# systemctl start pcsd.service

# vim /etc/selinux/config-->disable

# systemctl stop firewalld.service

# pcs cluster auth node1 node2 master -u hacluster -p ***** --debug #用此命令检测(node2检测)

# yum update nss #更新nss(新增节点node2操作的,后面感觉跟nss也没有多大关系)

# systemctl status pacemaker.service #发现服务挂了,起不来

# pcs cluster auth node1 node2 master #进行认证发现不行(node2节点上操作)

img

# pcs cluster auth master node1 node2 #(在master节点上操作,这一步就相当于集群的corosync.conf被干掉了,资源没了)

# cd /etc/corosync/ #(每个节点都重新拷贝)

# cp corosync.conf.example corosync.conf

# pcs cluster setup --start --name RHCA master node1 node2 --force #重新加载集群,此时终于3节点集群起来了,但是资源没有了

# cd .mozilla/;rm -fr #清除缓存,进入web界面https://libin.com:2224/manage,此时终于正常了,点击添加已经存在的集群,RHCA为集群名称。*进去我新添加了一个VIP,其他资源,集群文件系统实验不需要*

img

img

img

img

集群有了但是发现创建的资源都失败使用该命令

# crm_verify -L -V #进行集群环境检测

# pcs property set stonith-enabled=false #检查有stonith报错就执行该命令,再添加VIP就正常了

# pcs resource create vip ocf💓IPaddr2 ip=192.168.124.200 nic=eth0:1 cidr_netmask=24 iflabel=0 #创建vip的命令,也可以图形化

img

# crm_mon -1 #可以看到资源跑在master节点上,终于把这个测试的要求做到了

img

img

(2)说明2:由于我的实验环境问题,我重新做了iSCSI多路径,WWID有变化,并且把之前的挂载给umount(如图展示)

img

img

img

为了这个测试达到效果,我新增了一台客户端(libin.com/node2 节点)node2的客户端配置与node1一样

192.168.124.134 libin3.com master

192.168.124.133 libin2.com node1

192.168.124.132 libin.com node2

node2做了一下操作:

#yum install -y iscsi-initiator-utils -y

#vim /etc/iscsi/initiatorname.iscsi

==>InitiatorName=iqn.2021-12.libin3.com:disk

#systemctl enable iscsid.service;systemctl start iscsid

#iscsiadm -m discovery -t st -p 192.168.124.134 -l

#lsblk

#iscsiadm -m session

#cp /usr/lib/udev/scsi_id /usr/local/bin/

#scsi_id -ug /dev/sdc/d/e/f

#yum install device-mapper-multipath.x86_64 -y

#lsmod | grep multipath

#modprobe dm_multipath

#echo "modprobe dm_multipath" >> /etc/rc.d/rc.loca

#chmod +x /etc/rc.d/rc.local

#systemctl enable multipathd

#systemctl start multipathd

#cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/

#scp /etc/multipath.conf root@192.168.124.132:/etc/ #我是从node1scp过来

#systemctl restart multipathd.service

#multipath -ll

img

集群逻辑卷操作:(dlm:分布式锁管理,在一个节点上创建一个逻辑卷,在其他节点都能看到这个创建好的逻辑卷)

*node1,node2端操作:正式操作*

# cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/ #保证每个客户端节点multipath.conf 要一致

# multipath -ll #可以得到wwid,alias是友好名每个节点要一样。

img

# yum install -y lvm2-cluster dlm -y #每个节点装这两个包lvm2-cluster、dlm

img

# vim /etc/lvm/lvm.conf

==> locking_type = 3 #3:代表每个节点都支持集群逻辑卷,2是单机

# lvmconf --enable-cluster #或者用这条命令改(也是3)3个节点操作

# systemctl list-unit-files --type service | grep lvm2-lvmetad.service #关掉这个服务3个节点(不启用本地逻辑卷的缓存)

# systemctl disable lvm2-lvmetad;systemctl stop lvm2-lvmetad

集群分布式锁dlm管理,每个节点都运行,clone要打勾,(配置dlm前提是先配置fence)

img

# pcs property set no-quorum-policy=freeze #禁止集群投票防止脑裂

增加资源dlm

img

增加资源clvm,全部正常

img

img

# pcs constraint order start rhca_dlm-clone then rhca_clvm-clone #clvm与dlm顺序

# pcs constraint order remove rhca_dlm then rhca_clvm #移除顺序命令(不需要操作,介绍一下)

img

# crm_mon -1 #可以看到三个节点都有运行

img

node1,node2操作:(用多路径名字做逻辑卷)

# cd /dev/mapper/ #进入共享的盘

# fdisk libin1

# fdisk libin2 #如果有分区就删除不要

img

[root@libin mapper]# fdisk libin1 #把2块盘都做了一个分区,类型8e逻辑卷,一个客户端操作即可

[root@libin mapper]# fdisk libin2

img

img

客户端都进行探测

[root@libin mapper]# partprobe libin1

[root@libin mapper]# partprobe libin2

img

[root@libin2 mapper]# partprobe libin1

[root@libin2 mapper]# partprobe libin2 #多了libin1p1、libin1p2

img

创建物理卷(一个客户端节点操作)

[root@libin mapper]# pvs

[root@libin mapper]# pvcreate /dev/mapper/libin{1,2}p1 #集群卷组创建成功

img

img

创建VG(注:每个节点在每个节点上的 vgcreate 共享集群中相同的共享存储之前运行以下命令)

# *partprobe ; multipath -r*

# partprobe /dev/mapper/libin1p1;partprobe /dev/mapper/libin2p1;multipath -r

[root@libin mapper]# vgs

[root@libin mapper]# vgcreate rhca_vg /dev/mapper/libin{1,2}p1

img

img

img

创建LV (此时就报错,由于我的虚拟机环境问题所以无法创建,下面就不进行展示了,正式生产环境不会有此问题)

# lvcreate -L 2G -n rhca_lv rhca_vg

img

25、集群文件系统GFS

先把24测试的vg删掉

img

[root@libin2 mapper]# mkfs.xfs /dev/mapper/libin1p1 -f #格式化libin1p1,我格了一块4g的

img

[root@libin2 mapper]# mount /dev/mapper/libin1p1 /mnt/ #挂载测试

img

测试可以写东西 #每个节点都可以挂载写数据,但数据不会同步,需要每次手动去umout很麻烦再mount,所以GFS 全局文件系统就解决了这个问题

img

看到32M为dlm的日志区,官方原理

img

[root@libin2 mnt]# pcs status | grep Cluster | grep name #查看集群名

查看节点有没有挂载集群逻辑卷 给卸载

img

# umount /mnt/ #卸挂

# df -h

开始配置(我在node1节点 libin2.com)同步与acl

# yum search 'gfs' #每个节点安装

# yum install -y gfs2-utils.x86_64

# man mkfs.gfs2

img

-t:集群名:libin(这个名字随意)

-j:后面数字我几个节点(我后面新增的node2挂了,我master为存储服务端)

/dev/mapper/libin1p1:这个根据自己的集群卷而定

# mkfs.gfs2 -t RHCA:libin -p lock_dlm -j 1 /dev/mapper/libin1p1

img

# blkid | grep gfs

img

# mount /dev/mapper/libin1p1 /mnt/ #挂载

测试:(如果有2个以上的客户端就可以进行客户端之间的测试)

[root@libin2 mnt]# >libin1 #客户端创建一个文件,另外一个客户端就可以看到

# gfs2_jadd -j 2 /mnt/ #追加一个日志区域

# df -h

img

[root@libin2 mnt]# mount | grep libin1p1 #可以看到我的文件系统不支持acl

img

# mount -o remount,acl /mnt/ #重新挂载,让其支持ACL,永久写入/etc/fstab

img

[root@libin2 mnt]# useradd alex

[root@libin2 mnt]# # setfacl -m u:alex:--- libin #赋予alex用户对libin这个文件有acl权限

img

磁盘配额:

# mount -o remount,quota=on /mnt/ #先临时重挂

img

img

# quotacheck -cum /mnt/ #对mnt创建身份认证与扫描

# quotaon -av

# quotastats

# edquota -u alex #可以修改用户配额

img

[root@libin2 mnt]# chmod o+rwx /mnt/

[alex@libin2 mnt]$ dd if=/dev/zero of=libin2 bs=1M count=100 #看到100M是被限制的

img

# quota -u alex -s #查看限制要在创建了东西后,永久记录到数据库

img

# repquota -a #查看限额

[root@libin2 mnt]# rm -fr libin2 #把数据清除

[root@libin2 mnt]# repquota -a #立即生效

img

[root@libin2 ~]# umount /mnt/ #配额实验做完了

添加资源:

img

添加应该文件系统资源,挂载到master的/var/www/html,gfs2的文件系统,可以支持acl和quota

img

# pcs constraint order start rhca_clvm-clone then RHCA_fs-clone #逻辑卷后接文件系统

img

选择VIP建一个组

img

img

# df -h #可以看到每个节点都有挂载上去了

img

img

# echo "XXX" >> /var/www/html/index.html #在任意节点上操作,集群的每个节点都可以看到

img

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

第一章 集群大纲

什么叫做集群?

集群就是多台机器放在一起进行工作。它并不是一台机器孤立的去工作,而是多台机器进行互相帮助,如果一台机器出现问题,那么另外一台机器马上就可以顶上去接替前者继续工作。

集群-共分了三类

1.HA-高可用集群

2.HB-高负载集群,其中LVS就是典型

3.HPC-高性能集群。将多台配置较低的机器组成超级计算机

1. 高可用集群

高可用集群的目的就是为了让服务尽量去缩短宕机时间。高可用集群必须应付各种服务的失败,无论是电源,网卡,存储坏了,都要求能应付。在红帽的集群中,未来所有的的资源都要求能 够进行监控,可以让这个集群在产生问题的时候以最快的速度进行恢复,所谓的恢复就是能够智能的去修复一些问题。无论如何一个坏法,都能够让服务继续运行,这是一个高可用集群的最终目的。

corosync:用来取代以前的openAIS,由于这个软件的开发社区不活跃了,所以单独的基于 openAIS开发出来一个新的分支corosync,这是集群通讯的引擎。

cman:专门用来负责会员管理的投票体系。集群好不好使,是cman说的算。简单说就是集群的管理员。

fenced:专门用来负责fence通讯的。

modclusterd:专门用来分发集群配置文件的

rgmanager: 是专门管理集群服务的。

ricci: 是集群节点里面的远程服务。

dlm:集群锁机制。红帽的锁机制叫dlm,分布式锁管理员。

clvmd:集群逻辑卷。是专门的一个服务来完成的。它可以把单节点做的lvm修改,分发给所有的同步节点上。对所有信息进行同步。

2.单点故障

--web server node1 node2 node3----mysqlA服务器(出现故障)整个业务都会崩溃---MySQL B服务器(A故障进行切换)---如何切换

img

3、什么叫做资源

资源一般来说就是VIP、服务本身和共享存储这三类

1)order:启动顺序。就是设定资源的相关顺序。在配置集群的时候,到底是vip先启动,还是数据库服务先启动?有些服务是对IP非常严格的,ip如果不先起来,服务就不会起来。所以就要设定这个启动顺序。

2)location:优先在哪台机器上运行。冬中有三台机器,那么这三台机器中node3配首很高,但是我期望先在node3运行。

3)colocation:设置几个服务在同一台机上运行。为了就是防止多个资源部署到不同的机器上,这样做的话就可以使得多个资源都在同一个节点上运行,禁止它们分布到不同的节点上去。

5、脑裂与仲裁

img

可以看到ABCDE都在正常工作中,结果有一天D、E两节点跟其它节点失 去联系了,可能是交换机除了问题,对它们产生了隔离,变成了ABC在一个段,DE在另外一个段。此时,如果没有Quorum,交换机出了问题的话,硬是把5个节点变成了两个部分,第 部分三个节点,第二 部分两个节点,这时第一部分三个节点就开始商量“另外两个联系不到了 可能死了,我们三个中选一个工作吧”,最后选择了A来工作,由它来接替以前E的服务。与此同时第二部分两个节点也会开始商量“其它三个节点死球了,咱们俩投个票,选择其中一个 去工作”,最后选择了E继续工作。最后这两组节点一个是A,一个是E,两个服务同时启动起 来,同时去写了存储, 它们都认为自己是正确的,进入存储的数据是完全不可预知的,最后完全不知道会发生什么事情,若是运气好的话存储数据可以恢复回来,如果运气不好的话,文件系统直接被损坏。如果没有Quorum,遇到这种情况,我们称之为“脑裂”。

Rhel6中:如果有了Quorum,上图5个节点,每个节点手持一票,按照公式算活 ,Quorum=期待票数 5/2+1=3票。这样当机器出现故障的时候,DE两个节点只有两票,它们 无法投出来三票,所以这两个节点就很自觉地去休息了。而ABC每个节点上手持一票,三票投 出来后发现集群处于健康状态。所以当网段隔离的时候,ABC任然能够继续提供服务,D和E是 拒绝提供任何服务的。 所以Quorum诞生就是为了处理这种类似的故障。关于Quorum的运算

示例1:针对3节点集群分析。每个节点一票,那么expected votes就是3票。Quorum=3/2+1=2

6、如何避免脑裂生成

这个时候要配置一个东西叫做“stonith”,它并不是一个单词,它是一句话每个单词第一个字母的英文缩写,翻译过来就是“是其他节点的头”,简称为“爆头哥”。意思就是用枪打其他节点的头。这个东西一般是一个硬件设备,比如说是power switch,那么每个节点都会受到 power switch的控制,当node2和node3探测到与node1连接不上了,这个时候power switch就开始自动干预,直接强制将连接不上的node1重启或者关机,省的到时候和其他节点抢资源而造成脑裂,这个时候就开始集群切换其他节点了继续工作了。其实stonith有一个统一的名称,被称为就是fence。

7、微观上了解高可用集群

img

如果活跃节点node1挂掉,那么node2与node3之间又是如何知道要node2接替node1的位置变成新的活跃节点的?配置集群需要在每个节点上安装集群软件,一日安装完成,每个节点就会包含一个叫做“集群资源管理器”的东西,集群资源管理器有被简称为“CRM”。CRM就相当于每个门派的掌门,只有它才能发号施令。然后用在这所有的CRM中找一个老大,而这个老大叫做“DC”,DC其实就是指定协调器

上图的红色波浪线就是消息队列,也就是节点与节点之间是需要互相发送消息的,而且是在心跳线中发送的。然而这个消息是由openAls、coresync、heartbeat三个软件来实现的。对于 coresync来说,它实际上是从openAIS中分离出来的一个子项目,现在coresync也是一个独立的个体,实际上是它来实现节点之间的消息队列通讯的。

如果每个节点都是正常运行的,那么每个节点里面都保留了一份当前集群的信息,而这些信息被保存在一个叫做“CIB”的地方,而这个CIB就是集群信息库。

CRM来又是如何来启动服务的?对于节点上的CRM而言,它一旦要决定了要接手启动服务。就必须要启动各种资源,所以说CRM就会去调用“LRM”(本地资源管理器)来启动各项服务 LRM实际上只是一个执行者的角色,而它执行的方式就是调用了各类脚本。其中标准启用脚本有LSB类型,和OCF类型(开放集群框架)的脚本。OCF内其提供了一些其他的脚本,并不是系统自带的。这些所有的脚本(LSB和OCF)可以通称为RA(资源代理)。

在三节点或者的集群中,如果node1和node2都挂了,只剩下node3的话,集群是不会再去工作了,这里涉及到一个仲裁的概念。

*集群软件*

pacemaker: 它实现了集群中CRM的角色。包括了集群信息库,设备引擎

RHCS:rhel6中实现集群的红帽集群套件,它其实实现的就是CRM这个角色。

heartbeat:既可以做底层的通讯,又可以作CRM。

在生产环境中pacemaker+coresync的组合来配置高可用集群。

8、集群环境与配置

*这里可以忽略,因为我在实验测试(1)-(8)已经操作了*

防火墙切换成信任区域允许所有,selinux直接默许。

#yum install pcs*-y #在每个节点上安装pcs,它会通过包依赖的关系安装好pacemaker和coresyne

#systemctl start pcsd #在每个节点上启动这个服务。

#echo redhat | passwd --stdin hacluster #每个节点之间是要配置信任关系的,每个节点上都会有一个信任用户hacluster,给hacluster配置密码

#pcs cluster auth node1 node2 node3 #建立信任关系。不写主机名的话写IP地址也可以。输入redhat,验证通过

#firefox https://node1:2224 #可以从任意机器用图形化配置集群(物理机)。只要选择一个节点即可,加2224端口

第二章 UDEV

1、udev概念

1、udev概念结

在企业版4之前,根下的dev是又一个rom包装出来的,它下面有很多的设备节点,可以说操作系统在安装的过程中会将业界支持的所有硬件,全部在dev下列出来。缺点就是它站着内存,速度也很慢,每次装操作系统的时候都会发现,装dev软件包的时候巨慢无比,因为它要在根下的dev创建很多的设备入口,所以比较笨重。后来,到企业级4以后就有了dev,从那以后,计算机上有什么样的硬件才会在dev下出现,所以现在看dev下设备的时候,它里面的数据量比以前少太多了,直到有新设备的时候,才会在dev下产生新设备名称。

udev是有系统中初始化脚本rc.sysinit执行起来的,就是在开机时候,屏幕上出现红颜色“redhat”的字样后,紧接着就是启动udve。udev的数据来源是根下面的svs的假文件系统,这是在企业版4之后才引入的,sys其实在内存中的一个目录,里面存放着kernel反映给用户层的一个信息。对我们而言,要经常去根卜SVS读取设备的详细,尤其是块设备(/svs/block),这里面存放着我们需要的块设备记录。

2、udev查询

1、udevadm monitor #实时监控。只要有硬件插拔时间,屏幕中就会响应。

2、udevadm monitor --property #这个信息量就比较全面

3、udevadm info --query=all --name=/dev/sdb #对于系统中已经加载的设备,我们可以用“

-query”去查询一下该设备的 详细信息。这种用法比较倾向于在写udev规则时候使用。

4、scsi _id --whitelisted -x /dev/sdb #发现硬盘具体参数的方式。这种方法比较倾向于做多路径时候使用。--whitelisted 可用-g取代。-x的意思是更多信息。最后的信息就是设备id号。

红帽7在/usr/lib/udev 里面scsi _id命令不能直接用,可以做个别名或者拷贝到# cp /usr/lib/udev/scsi_id /usr/local/bin/,2种方法都可以

(1)# vim .bashrc

==>alias scsi_id = '/usr/lib/udev/scsi_id'

(2)# cp /usr/lib/udev/scsi_id /usr/local/bin/

5、scsi_id --replace-whitelisted -g /dev/sdb #这条命令会把中间有空格的替换成下划线,而且只能替换中间有空格的。

3、关于自定义规则

所有官方的规则存放在/lib/udev/rules.d/下面,可以改动和定义的在/etc/udve/rules.d/这下面所有列出来的东西,都不在系统中自带,也就是说当操作系统装完之后,它会根据你本机的特定生成自定义的规则。

示例1:cat /etc/udev/rules.d/70-persistent-ipoib.rules

img

它会根据这个网卡的mac地址来硬分配一个网卡的名称(eth0)。所有规则文件的后缀名必须叫.rules

示例2:U盘

img

序列号是查出来的。当新接入到一个u盘,在linux下无论你是什么设备,都会分个区,因为分区的时候可以带上一个分区的id号,对于系统来说很方便。当接入u盘时,对kernel层而言,它的动作是“add”,“==”可以理解成“发现”,就是在我们系统中添加了一个设备;子系统(SUBSYSTEM)它会知道监控的是一个block设备:当然它符合接入设备,而且子系统是一个块设备的时候,我要查其udev的序列号(ENVI)),我们就将它命名为自己喜欢的名称NAME=,甚至给它追加一个软连接SYMLINK=

vim /etc/udev/99-libin.rules

img

%n: #意思就是可以将U盘的分区也表示出来。

Il /dev/my* : #重新插入u盘,就可以查看到我们自定义的名称了。

示例3:icsic

ID_SCSI_SERIAL这个序列号就是iscsi发现的一个宗旨,可以用这条udevadm info--query=all-name=/dev/sda 来查询这个ID号,大家就可以看到 ID_SCSI_SERIAL这个值,根据这个值识别出来id号为cat。然后将它命名成自己喜欢的名称(NAME="xx”)

img

针对甲骨文它必须要要求,要求这个设备必须属于OWNER=”oracle”用户,设备的组也必须是GROUP=oracle",。并且其权限是MODE=

4、多路径

工作流程

img

就是有多条路到达同一个目的地叫做多路径。对我们服务器和存储之间而言,有两条通道,这样就实现了多路径。多路径的主要目的一个是冗余,一个是提高性能。如果你的服务器要做多路径的话,那就需要两块HBA卡跟存储之间做配合。

路径可以把若干个通道,联合起来建成一个虚拟的组,然后来提供高可用,以及性能的增强。

如何发现访问的是同一个设备?必须知道这个共享出来的磁盘的id号--WWID.

多路径在实现的过程中他有一个监控器,发现有一条通道出现事故的时候它会做切换,通常情况下多路径是主被模式。同时,它们只有一个目的,让业务不断线。

在企业级操作系统下,这个服务叫multipathd,它的底层系统用的是device mapper,就像逻辑卷一样,也走的是device mapper的共走机制

5、多路径设备的命名

在默认情况下会在"/dev/mapper"会发现这个设备,以WWID为命名。

另一种就是由multipathd服务自带了一个选项叫"user friendly names yes",它可以把命名规范化,然后在所有多路径的起始名称前都会加上“mpath*”。不过这个开关默认是没有开启的。如果想命名规范化,把这个开关写成“yes”。

以上两个都不喜欢,想自己取名字,通过配置文件可以针对某个特定的WWID取一个自己喜欢的名字。

6、多路径配置文件

/etc/multipath.conf 这个主配置文件默认是没有的。必须通过"mpathconfig --enable"命令去自动生成。

在系统中有一个带注解的文件在/usr/share/doc/device-mapper-multipath. version/multipath.conf.annotated这个路径下,这个文件里面把每个选项标注的非常的详细

defaults:全局的默认配置参数。如果这个设备是在红帽支持列表之中,那么这个文件就不需要动,系统可以直接识别

polling_interval:链路状态每隔多久去发现一次,默认是10秒。

path_selector:当一个多路径组里面有多条路径的时候,它会以哪种形式来做通道选择,默认为轮询式。最后的0是保留字

path_grouping policy:有多条链路的时候如何分组,是一个组多条路径,还是多个组一条路径,有不同的分法。

getuid_callout:在默认情况下,如何能找到设备的唯一id。这个非常关键,它默认用的是scsiid的名来实现的。

rr_min io:轮询时候最小的I/0请求数量。默认100次。

rr_min_io_rg:轮询时候最小的I/0请求数。默认10个

failback:当失败的设备活过来之后,是否立即应用。默认是立即

user_friendly name:是否要自己取名字。默认是no

checker_timeout:通道检查超时时间服务器认为换多路径切换的时候多久就认为超时了,默认最长不允许超过60秒。如果60秒没切换,就代表失败

blacklist:黑名单。比如说要将哪一些设备排除在外,这些设备在系统中绝对不考虑是多路径。比如说ide,光盘等设备

blacklist_execptions:黑名单中还有额外的,在黑名单中还有哪些设备是需要除外的,相当于反反列表

multipaths:是针对一个特殊路径想对它做设置的时候用。比如针对多路径的名称,想取个自定义的名字。还以应用策略。

devices:这里面配置非标准的多路径设备。列出来的都是红帽默认支持不好的,需要自己写出来。

7、配置多路径

(可以查看我24条实验的配置)

多路径组优先级

"Active/passive"(failover):热备高可用,一个路径在工作,另一个在热备闲置。默认策略

“Active/active"(multibus):双通道或者多通道路径同时使用。这需要将策略改成multibus”。既然是多通道就会有调度策略

round-robin:默认策略就是轮询平分,所有通道都轮询。有点像raid0的感觉。

queue-length:此种策略就是那个通道最闲,就给谁。

service-time:此种策略就是那个通道的服务时间快,就给谁。

第三章 高可用集群与仲裁

1、高可用集群

高可用集群的目的就是为了让服务尽量去缩短宕机时间。高可用集群必须应付各种服务的failed无论是电源,网卡,存储坏了,都要求能应付。在红帽的集群中,未来所有的的资源都要求能够进行监控,可以让这个集群在产生问题的时候以最快的速度进行恢复,所谓的恢复就是能够智能的去修复一些问题。无论如何一个坏法,都能够让服务继续运行,这是一个高可用集群的最终目的。

corosync:用来取代以前的openAIS,由于这个软件的开发社区不活跃了,所以单独的基于 openAlS开发出来一个新的分支corosync,这是集群通讯的引擎。

cman:专门用来负责会员管理的投票体系。集群好不好使,是cman说的算。简单说就是集群的管理员。

fenced:专门用来负责fence通讯的

modclusterd:专门用来分发集群配置文件的。

rgmanager: 是专门管理集群服务的。

ricci:是集群节点里面的远程服务。

dlm:集群锁机制。红帽的锁机制叫dlm,分布式锁管理员。

clvmd:集群逻辑卷。是专门的一个服务来完成的。它可以把单节点做的lvm修改,分发给所有的同步节点上。对所有信息进行同步。

2、高可用集群限制

最高支持16节点。8节点以上必须给红帽审核,不然不给支持。

所有的节点必须都要有fence设备。否则集群不让建立。

强烈建立集群是工作在一个独立的网络里面,而且必须支持multicast和IGMP(Internet Group Management Protocol,是因特网协议家族中的一个组播协议)。

NetworkManager和acpi这两个服务必须关闭。

3、conga软件配置集群

这是在企业版5引入的一个基于web界面配置集群的方法。它是一个集中式的管理平台,可以帮助管理员轻松管理集群。

conga分成了两部分。一个是ricci,是远程节点跑的一个服务,随时监听来自于luci这个软件的指令。而所谓的luci就是另外一台机器上的管理软件,这个管理平台必须是linux,要不然luci没有办法安装。不要把管理节点,安装到集群节点里面去。

有了luci和ricci之后就组成了conga,这之后无论是配置集群,还是去安装集群所需要的软件包都是自动化的,这样非常方便。它有一定的日志查询功能和集群状态显示。

4、****conga的安全管理

在接点上部署完ricci之后,需要给用户ricci设置密码,而这个过程是必须的。luci在第一次链接 ricci的时候是要这个ricci密码的,然后证书做好之后,将来的连接都是基于SSL的,不再会用到ricci密码了。

部署完conga之后,直接登录web界面,在缺省情况下,luci上面的所有本地用户都可以登录到集群管理的web UI上,但是前提条件是,这个用户最少得登陆过一次集群,然后超级用户超能对这个用户进行权限的开放。如果这个用户从来都没登录过luci,超级用户是看不见这个用户的,所以必须要让未来能使用luci的用户登录一次,登录进去后是没有任何权限的,退出登录后由超级用户去分发权限,之后才可以让普通用户对集群进行管理。

5、集群部署

[root@node1 ~]# yum install rgmanager cmirror xfsprogs luci-y

root@node2 ~]# yum install rgmanager cmirror xfsprogs -y

[root@node3 ~]# yum install rgmanager cmirror xfsprogs -y

[root@node1 init.d]# chkconfig rgmanager on ; chkconfig ricci on ; chkconfig modclusterd on ; service ricci restart ; echo redhat |passw d-stdin ricci ; chkconfig iscsi on; chkconfig luci on ; service luci restart

[root@node2~]# chkconfig rgmanager on ; chkconfig ricci on ; chkconfig modclusterd on ; service ricci restart ; echo redhat |passwd -- stdin ricci ; chkconfig iscsi on

[root@node3 ~# chkconfig rgmanager on ;chkconfig ricci on ; chkconfig modclusterd on ; service ricci restart ; echo redhat passwd -. stdin ricci ; chkconfig iscsi on

*两个BUG*

第一个,通过ricci帮助我们把软件包安装完成之后,cman、clvmd、rgmanager服务都应该自动开机启动,尤其是cman,它是集群管理员,它不启动是没办法加入到集群中去的,当然可能有一定的概率它不会启动这个服务,它一旦没有启动这个服务,就会造成关键的集群配置文件没有被分发成功,就算你把cman启动起来了,这个集群出配置文件cluster.conf也没有。

万一发现一个节点没有进到集群中来,最终极的解决方案如下:

1)从一个止常的集群节点里面/etc/cluster/cluster.conf集群主配置文件,拷贝到错误的集群节点里面去。

2)手动将cman、clvmd、rgmaiiager服务开机启动。只要cman开机不启动的话,其它服务都不会开机自启。

3)最后重启节点应该可以接解决。

6、Quorum仲裁

Quorum就是法定人数,所谓的法定人数在制定某一种规则的时候,改到场的人都到场了,可以拍板的人数就被成为法定人数大某备群而言,集群里面该活的节点都活着,虽然有些节点不能使用,但看法定人数够不够,如果够的话,集群就被确定为正常状态,否则集群会拒绝工作。

在缺省情况下,集群中的每一个节点都有投票权,而且缺省是一票。整个投票机制就是为了校验当前这个集群是否可靠,在每个集群节点上都有一票可以投出来,来确定当前这个集群是否健康。

前整个集群中所有的投票数被称为Total votes。

Expected votes就是期待的投票数。在集群刚开始运行的时候,一切正常的前提条件下,这总体的投票数跟期待的投票数是相等的,直到后来集群出现故障的时候,可能会不一样。total votes是不可以改的,但是expected votes是可以手动修改的。一般情况下不需要轻易去改动。

如何衡量一个集群当前处于正常工作状态?Quorum=(expected votes/2+1)

就可以通过Quorum来衡量,Quorum=期待的投票数/2+1。期待的投票数起始的时候跟总票数一样,除2之后取整加1。这就是Quorum,检查集群健康状态的一个标准 双节点集群是一个特例,双节点是不能拿Quorum来计算的。

在多节点集群中,所有的应用程序和服务想运行起来的前提条件就是必须有Quorum,所谓的法定人数是足够的,否则服务是拒绝启动的。

第四章 fence详解与配置

1、fence设备

在红帽的集群中fence设备是必须的。这个单词本身就可以做“栅栏”解释。在主机跟存储之间放一个栅栏,不允许主机碰存储的这个过程就叫fencing。就fence的行为来说有两种fence方法。

第一种:断电(power fencing)。直接将电源断掉,节点直接下线,然后再加点就会重启。

第二种:存储端fence(Fabric fencing)。任何活着的节点都是用scsi Reserve命令来将存储通道锁定,不准其他的节点再碰触的这样的一个过程,用来阻止某个人不小心再写到存储里面去。

2、Fence Agents

在系统中通过fence-agents安装了一系列的工具,它们放在/usr/sbin/fence_*,通常这些工具都有一个“-h”的选项提供帮助。

fence wti #网络电源交换

fence bladecenter #IBM专用专业fence工具

fence rsa #IBM专业RSA专业fence工具

fence_drac #戴尔出品

fence_ilo #惠普的ilo

fence ipmilan

fence_brocade #存储端fence工具,这是在存储端进行的掐断

fence_egenera #美国的一个存储

fence_rsb #富士通、西门子联合搞出来的一个电源管理

fence_sanbox2 #Qlogic 的fence

fence_xvm #基于虚拟机的断电

fence_apc #APC电源交换

fence _cisco _usc #cisco的ucs

fence_cisco_rhevm

fence_vmware_spap

# yum search feence (看虚拟机的)

img

3、配置luci的fence

img

添加fence的方法

img

img

在默认fence的方法中添加一个实例。最后面fence虚拟机的名字是最关键的可在节点上,使用“fence xvm-olist”查看。配置完成后,node1就配置了fence功能。当有人调用默认的fence方法后,node1就应该被reset。以此类推做好三个节点的fence。

4、fence测试

基于虚拟机的fence是用到了一个加密的message,由主机通过广播跟所有的虚拟机之间进行沟通,然后允许了这个主机上面的hypervisor可以将指定的虚拟不机进行fence。而这个hypervisor针对当前这个计算机它就是一个kvm的模块文件,它是个核心 由它做管理。

在真机上必须安装“fence-virtd-libvirt”和“fence-virtd-multicast”这两个软件包。安装完成后需要在做一个标准4k的随机文件(/etc/cluster/fence xvm.key),而这把 “fence_xvm.key”的钥匙是一种经常要用到的fence钥匙名,最后将所有的钥匙拷贝到所以的节点。这种加密解密的过程被称为对称加解密,所有的节点,包括真机用的都是通一把钥匙

接下来在物理机上对fence守护进程进行配置,运行“fence virtd -c” 监听的模式是多播; 监听的网卡是private网卡,因为它是基于集群的通讯网段;模块调用的是libvirt,最后将服务开启。

#fence_xvm-d-H node2

#fence_xvm-d-H node3

# fence_xvm-d-H node1

参考:

[root@desktop~]#yum install fence-virtd{,-libvirt,-multicast} -y

[root@desktop~]#mkdir /etc/cluster

root@desktop~]#dd if=/dev/urandom of=/etc/cluster/fence xvm.key bs=1k count=1

//dd一个随机的fence 秘钥

root@desktop~]#fence vird -c

交互式界面除了以下选项指定设置其余默认设置

Interface [node]:private

Backend module [checkpoint:libvirt

[root@desktop~]#chkconfig fence_virtd on: service fence virtd start

[root@desktop~#scp/etc/cluster/fence xvmkey root@nodel:/etc/cluster

[root@desktop~]#scp /etc/cluster/fence xvmkey root@node2:/etc/cluster

[root@desktop~]#scp /etc/cluster/fence xvm.key root@node3:/etc/cluster

分别复制fence秘钥给各节点

service fence virtd restart

配置文件在/etc/fence_virtdconf

*测试:*

安装fence服务端:(服务端需在物理机上,虚拟机上没有成功)

[root@libin3 ~]# ifconfig virbr0:1 192.168.1.122/24 增加一个桥接物理机子接口

[root@libin3 ~]# yum install fence-virtd* -y

#[root@libin3 ~]#ifconfig virbr0:1 192.168.1.122/24 增加一个集群互相通信的子接口,这根据自己情况定

[root@libin3 ~]# mkdir /etc/cluster

[root@libin3 ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=4k count=1 做一个fence随机密钥

[root@libin3 ~]# fence_virtd -c 交互式界面除了以下选项指定设置其余默认设置

[root@libin3 ~]# systemctl restart fence_virtd.service

[root@libin3 ~]# systemctl enable fence_virtd.service

[root@libin3 ~]# cd /etc/cluster/;ls 会有一个key

安装fence客户端:

[root@libin2 ~]# yum install fence-virt.x86_64 -y

[root@libin2 ~]# mkdir /etc/cluster

[root@libin2 ~]# cd /etc/cluster/

[root@libin3 cluster]# scp /etc/cluster/fence_xvm.key root@node1:/etc/cluster/

[root@libin2 cluster]# chmod 600 fence_xvm.key

[root@libin2 cluster]# fence_xvm -o reboot -H node1

添加fence

img

第五章 集群日志和通知与集群邮件

1、配置集群日志

配置集群日志

这个目录下是没有任何关于集群日志的,所以需要配置。

cd /var/log/cluster

(1)、集群主配置文件 (我这里在node1节点上操作,有多节点就每各节点都master节点做了存储服务器)

vim /etc/corosync/corosync.conf

=>logfile: /var/log/cluster/corosync.log #在logging中添加一条日志文件,只要是.log结尾

img

(2)、同步配置文件,每个节点的主配置文件都会是一模一样的

# pcs cluster sync

# pcs cluster stop --all #如果没有同步,可以把所有集群节点重启一下。

# pcs cluster start --all #重启

(3)、测试查看日志

#就可以查看到日志了。每个节点的日志都是不一样的,都是记录本节点信息。日志文件名字都可以在主配置文件中修改,修改完成后重启集群服务即可。

# tail /var/log/cluster/corosync.log

# tailf /var/log/cluster/corosync.log #在没有资源运行的节点上植入后台查看日志

# pcs cluster standby master #在资源运行的节点master上运行standby,会发现资源飘到了node1开始生成

# crm_mon -1

img

# tail /var/log/cluster/corosync.log #master节点上的日志就会有变化

img

2、配置集群通知

20、当集群发生变化,发送一封邮件(我这里将master节点作为邮件服务端)

(1)、邮件本地测试、客户端发送给服务端接受测试

# rpm -qa | grep postfix #每个节点安装邮件服务

postfix-2.10.1-9.el7.x86_64

# systemctl status postfix.service #服务已经在运行,没有就安装,centos默认有

# vim /etc/postfix/main.cf #侦听端口和域名(服务端master配置)

==>inet_interfaces = all

==>mydestination = \(myhostname, localhost.\)mydomain, localhost, $mydomain

==>#inet_interfaces = localhost

# systemctl restart postfix.service

# vim /etc/postfix/main.cf #node1节点配置邮件转发到服务器

==>relayhost = [192.168.124.134]

# systemctl restart postfix.service

测试发送一封邮件给自己 (test为标题)

# useradd rhca

# echo helloword | passwd --stdin rhca

# echo "rhca you pass" | mail -s test master rhca@libin3.com

# mail -u rhca #查看邮件自己能不能收

img

img

测试客户端邮件转发到服务端

[root@libin2 ~]# echo "libin is pass rhca" | mail -s test rhca@libin3.com

img

(2)、添加一个邮件服务资源

img

测试:

# crm_mon -1 #先查看资源在哪个节点

img

# pcs cluster standby master #断掉master,让资源跑到node1

[root@libin3 ~]# mail -u rhca #查看rhca用户是否收到邮件

img

# pcs cluster unstandby master

# pcs cluster standby node1 #测试node1节点挂掉,是否会收到邮件

img

3、资源的约束条件

资源的约束条件有三种(后续又增加Ticket Constraints:)

第一种:order。它是用来控制资源启动顺序的。

第二种:location。它是设置资源优先在哪台机器上运行的。

第三种:colocation。它保证了所有资源在同一台机器上运行。

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

bailback

resource-stickiness:

location:限制条件

Is-managed:

priority :优先级

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

(1)、以下操作在我在master节点操作,可以随意节点(order的配置)

# pcs resource group list #列举组的信息

# pcs resource group remove group1 #移除一个组

# pcs constraint show #查看资源的约束条件

img

# pcs constraint order show #查看order的约束条件

# pcs constraint order -h #查看帮助

# pcs constraint order start vip then www-nfs #先启vip,再启文件系统

img

# pcs constraint order start www-nfs then http-server #先启文件系统,再启动服务

img

(注:必须分2次去启动)

img

# pcs constraint order remove www-nfs #移除一个资源的约束条件,约束条件不可能隔空存在,删除中间的就会导致约束条件没了

(2)、localtion的约束条件(由于我只有2个节点,当一台机器挂掉肯定会迁移到另外一个节点;基于组的管理,若多节点并不能保证多资源在同一节点运行)Infinity:无穷大

在测试时:可以将组先移除,变化就跟明显

# pcs constraint location show #查看localtion的约束条件

# pcs constraint location show --full

img

# pcs constraint location vip prefers master=100 #设置vip的约束条件 prefers:优先条件后接节点

# pcs constraint location vip prefers node1=120 #查看资源的变化

img

# pcs constraint location vip prefers master=INFINITY #INFINITY:无穷大,-INFINITY:无限小。资源又会回到master节点,当然2个节点若有一个优先级大的节点挂掉还是会回到另外一个节点,优先级大的恢复又会恢复到优先级大的节点上。

img

# pcs cluster standby master #模拟master节点挂掉,资源到了node1节点

img

# pcs cluster unstandby master #恢复master,资源又会回来

img

# pcs constraint location www-nfs prefers master=-INFINITY #设置master节点文件系统无限小

# pcs constraint location www-nfs prefers node1=-50 #设置node1节点为-50,资源就都不会在二个节点运行

# pcs constraint location www-nfs prefers node1=1 #资源又会回到node1

# pcs constraint location www-nfs prefers master=2 #资源会回到master

img

# pcs resource group remove group1 #移除组

# pcs constraint location http-server prefers node1=100 #设置http-server资源的优先级

# pcs constraint location http-server prefers master=1

# crm_mon -1 #查看资源的变化,此时资源不受组限制了

img

移除location资源限制

# pcs config #可以查看集群所有的资源约束信息ID

# pcs constraint location remove location-http-server-master-1

# pcs constraint location remove location-http-server-master-1

# pcs constraint location remove location-http-server-node1-100

# pcs constraint location remove location-vip-node1-120

# pcs constraint location remove location-vip-master-INFINITY

# pcs constraint location remove location-www-nfs-node1-100

# pcs constraint location remove location-www-nfs-master-90

# pcs constraint location show

(3)、colocation的约束条件,解决了资源不受限制的问题

# pcs constraint colocation add http-server with vip #让http-server跟着vip变动

# pcs constraint colocation show

# crm_mon -1 #查看变化

img

# pcs constraint location www-nfs prefers node1=100

# pcs constraint location www-nfs prefers master=90

img

# pcs constraint colocation add www-nfs with vip #让www-nfs跟着vip变动

img

删除colocation限制:

# pcs constraint colocation show

img

# pcs constraint colocation remove http-server vip

# pcs constraint colocation remove www-nfs vip

img

img

第六章 集群资源组与集群web服务

1、集群资源组

2、Failover Domains(失效域)

3、设置集群web服务

1、集群资源组

cluster service,就是一个服务想给公网使用,而配置的这个东西就叫做集群服务。在红帽的集群套件里面被称为“Resource Group”(资源组),它也可以被称为“Service Group”,在luci上面查看就叫 server group。

资源可以是任何东西,可以是ip地址、文件系统、服务等等。

所有的资源都必须由脚本控制,而这些脚本看起来和sysV服务一样。也就是说无论是ip地址,还是文件系统,它们在应用的时候都有一套脚本,而这个脚本我们称为“resource script”(资源脚本),这些资源脚本就是管理一个资源的启用、关闭和重启的。所以可以统称为sysV初始化脚本。

当一个资源失败的时候,集群会尝试把该资源重启,重启的意思就是修复,或者根据配置把整个集群服务全部重启,又或者是默认模式。如果重启的过程中发现该服务还是无法起来,那么集群会尝试把这个集群服务迁移到另外一个节点上或者干脆关闭。

整个集群中管理集群服务的软件就是“ramanaaer”,它是一个svsV标准的服务。开机的时候要自动启动。

资源是如何来影响集群服务的?

在默认情况下,当集群中任何一个资源出现故障之后,整个资源组都会被影响,这是红帽集群的默认行为。它认为红帽集群中跑的某项资源已经失败了,这是不太稳定的情况,需要把整个集群服务全部restart一下。所以说在默认情况下,一个资源坏会影响一堆。

另外一种情况就是可以把一个独立的资源标记为“Independent Subtree”。打上这个标记的资源就代表独立资源,它要是出了事是绝对不会影响到别的资源的。也不会因为别的资源而引起它的损坏。

还有另外一种资源是比较特别的,它可以标记为 Non-Critical resource(非重要资源),

2、Failover Domains(失效域)

由资源组成完成后的集群服务,在配置完成之后可以加上一些限制,这些限制的方法就叫做失效域。

如果没有失效域,那么这个集群服务可以运行在集群中的任何一个节点上。这样的就会造成集群服务爱去哪里就去哪里,它会在集群上任意节点上运行。

当使用失效域的时候,可以给集群服务下面所有关联的节点配置优先级。

设置优先级后,节点恢复了,依旧会根据以前设定的优先级策略,让集群服务迁移回原节点。但并不是所有的服务都希望这样做的。某些服务一旦迁移之后,不希望迁移回来,集群中也有这样的设置,这个过程叫No Failback。

失效域限制

(1)Restricted

#那么这个集群服务只能跑在你所指定的这若干个节点上。如果所规定的节点都已

经不在了,这个集群服务会stop

(2)Unrestricted

#没有任何限制。不需要限制,它可以跑在集群的任何一个节点上,这种比较倾向

于自己的失效域。

(3)Exclusive

#这个比较重要,而且比较消耗系统的资源,它只任命在一个节点上,并且该节点

上不能有任何的其它服务。

3、设置集群web服务

[root@node1~]#fdisk /dev/mapper/netstorage

#分1G物理分区,修改id号8c

[root@node1~]#partprobe /dev/mapper/netstoragep

#node1\2\3上必须全部探测,才能看到节点上看到分区

[root@node1~]#pvcreate /dev/mapper/netstoragepl

[root0node1~]#vgcreate clusteredvg /dev/mapper/netstoragepl[rootCnode1~]#lvcreate-1 100%free clusteredvg -n webdata[root@node1~]#yum install gfs2* -y

[root@node1~]#man mkfs.gfs2

#最后面有示例

[root@node1~]#mkfs.gfs2 -t testcluster9:disklv p lock_dlm-j3 /dve/clusteredvg/webdata[rootCnode1~]#mount /dve/clusteredvg/webdata mnt

[rootCnode1~]#chcon--reference =/var/www/html /mnt

#修改selinux上下文属性,然后却载

[rootCnode1~]#echo myweb>/var/www/html/index.html

#做一个测试网页

第7章iSCSI服务

1、css命令行

yum install ccs -y

ccs -h node1 --getconf #可以查看集群配置文件

2、SCSI关键字

-Initiator。这是ISCSI客户端的名称

-Portal。代表的是ISCSI服务器的IP地址或者主机名。

-Target。它是由ISCSI服务器所共享出来的存储资源,所以客户端未来使用的是target。

IQN。target如何命名?这是有一套标准的,叫IQN(iscsi qualified name)。

-ISNS。还有一种特殊的用法叫iSNS。这是一种向光纤存储学习的一种iscsi存储发现机制。

3、ISCSI数据访问过程

-首先客户端通过了一个动作叫做discovery,去存储服务器上去发现一下。

-服务器端会把客户端的请求回复给它

-客户端就发出申请的一个要求,其中可能包含了认证信息,也可能没有包含

-服务器端收到了请求之后,会检查一下登陆信息,也可能会不检查。

-如果服务器端审查通过了,然后就会将服务器这个存储共享给客户端来使用,接着客户端会在本地建立一个表,并且在里面列出来,告诉iscsi从哪个地方来,共享到哪个target,它叫什么名字等等一系列的详细信息。

-这样在服务器端共享的target(存储资源),就会出现在本地,并且是以本地磁盘的形式显现出来。

4、IQN命名规范

命名规范,是用的iqn标准,它必须是全局唯一

“iqn.时间.域名反写.自定义字符串:子字符串(任意)”

7、配置ISCSI服务

yum install iscsi-target-utils

vim /etc/tgt/targets.conf

=> => backing-store /dev/vol0/storage=> initartor-address 172.18.1.0/24=>initartor-address 172.19.1.0/24=> scsi sn cluster1-storage

chkconfig tgtd on service tgtd restart

5、****iscsi客户端

(说明:可以结合我的(23)测试)

公网

内网

存储

存储

1)注意:每个虚拟机中必须要先将hosts对应好。ip地址最后两端x,y(x为主机,y为每台虚拟机节点ip)。如下图:1号点上有4个虚拟机,分别地址为1,2,3,4

masterl.privateclusterl.example.com nodel172.17.1.2

node1.privateclusterl.example.com nodel172.17.1.2

node2.private.cluster1.example.com node2172.17.1.3

node3.private.clusterl.example.com

node3172.17.1.4 node4.private.clusterl.exanple.com node4

(1)yum install iscsi-initiator-utils -y

cat /etc/iscsi/initiatorname.iscsi #把自己的名字给报出来,通常情况下,这种软件及设置是不需要的。

iscsiadmin -m discovery -t st -p 172.18.1.3 #iscsi的发现

iscsiadmin -m discovery -t st -p 172.18.1.3 -1 #登陆

fdisk -1 #就可以查看到多了一块硬盘 ,分区,挂载后,service iscsi status#可查看当前状态。

(2)ssh-keygen #为了更加方便,做要是,然后拷贝到四个节点里面去

ssh-copy-id node1 ssh-copy-id node2 ssh-copy-id node3 ssh-copy-id node4

yum install iscsi-initiator-utils -y

cat /etc/iscsi/initiatorname.iscsi #把自己的名字给报出来,通常情况下,这种软件及设置是不需要的。

iscsiadmin -m discovery -t st -p 172.18.1.3 #iscsi的发现

iscsiadmin -m discovery -t st -p 172.18.1.3 -1 #登陆

fdisk -1 #就可以查看到多了一块硬盘,分区,挂载后,service iscsi status#可查看当前状态。

(3)停止使用ISCSI

停止使用ISCSI umount

iscsiadmin -m discovery -t st -p 172.18.1.3 -u

service iscsi restart #会发现iscsi又回来了,根本就没把它删除掉。

假如你彻底不想用它了,以下方式:

iscsiadmin -m discovery -t st -p 172.18.1.3 -u

iscsiadmin -m discovery -t st -p 172.18.1.3 -o delete

如重启服务后,如果还是不行,能发现磁盘。那就清理缓存,以下方式:

cd /var/lib/iscsi #删除iscsi客户端缓存后,可重新连接。

find ./

rm -fr send targets/* node/*

模拟超大磁盘

第一步,一定要换算成扇区:10*2^40/512=21474836480

第二步,echo "0 21474836480 zero" | dmsetup create zerodev

第三步,lvcreate -L 500M vol0 -n cowdev

第四步,echo "0 21474836480 snapshot /dev/mapper/zerodev /dev/vol0/cowdev P 161 dmsetup create hugedev

第五步,

blockdev--getsize /dev/mapper/hugedev

fdisk /dev/mapper/hugedev #大于2T之后,fdisk无法格式化。测试完之后清理:

dmsetup remove hugedev;dmsetup remove zerodev;lvremove /dev/vol0/cowdev

第八章 集群逻辑卷.

1、集群逻辑卷

(说明可以看我的第(24)测试)

集群逻辑卷

集群逻辑卷有两种,一种叫HALVM,另外一种就ELVM,所配置的过程都是一模一样。C LVM用的是本地文件,而CLVM用的是集群级文件系统。要用到集群级文件系统需要订阅服务,也就是gfs订阅。集群级逻辑卷使用起来感觉也本机逻辑卷是一样的,前提条件是每个节点都激活了集群级逻辑卷(clvmd),服务启动之后再每个节点上都会有lvm完整的原数据

1、在集群里面如何使用逻辑卷?底端是iscsi设备,各节点连接上去后,在其中一个节点分区,其他节点是看不到的,需要在每个节点上探测之后才能见到。

scp /etc/multipath.conf node2:/eto #多路径文件分别拷贝到其他节点上去。

scp /etc/multipath.conf node3:/etc

systemctl start multipathd #每个节点上重启服务

multipathd -ll #保证每个节点都能看到多路径。

2、首先需要安装clvm包才能支持集群逻辑卷,还有一个包是dlm,是分布式锁管理。也就是只要在任何节点上创建一个逻辑卷,其他节点都能够看到这个已经创建好的逻辑卷。

yum install dlm lvm2-cluster -y #每个节点上都要安装 dlm和 Ivm2-cluster。clvm的包名就是lvm2-cluster。

在每个节点上同时运行的资源,我们把它归类为“clone”

lvmconf --enable-cluster #每个节点都要启用集群逻辑卷。或者修改配置文件,如

下。

vim /etc/lvm/lvm.conf /1 #搜索“locking_type”

=>locking type = 3 #默认值为1,意思就是使用的是本地逻辑卷的管理。3是使用集群逻辑卷。

2、GFS文件系统(global file system 2)

(说明可以看我的第(25)测试)

dim(lock nodlm)的无锁机制是工作在单机模式中。

clusterx是必须严格严格匹配集群名称,否则文件系充在挂载的时候被拒绝。test是自己取字,这个名字必须全局唯一

yum install gfs2-utils -y

mkfs.gfs2 -p lock dlm -t clusterx:test -j 3-J 64 /dev/cluster/redhat

dlm(lock dlm)的锁机制是工作在集群模式中

dlm(lock nodlm)的无锁机制是工作在单机模式中。

clusterx是必须严格严格匹配集群名称,否则文件系统在挂载的时候被拒绝。test是自己取的名字,这个名字必须全局唯一

j指定日志区有几个,这必须大于或等于集群节点数量,大于的就是预留出来的。

-J是指定的日志的大小。官方给的是8-128M,一般情况下都会大于32M。

gfs增加日志区域。将日志区域扩充代价就是牺牲多余的文件系统空间

gfs2 tool journals /mount point #查询当前日志的个数

gfs2 jadd -j2 -J 64 /mount point #追加一个日志,2个日志区,日志区64M,挂载点

gfs文件系统扩展

gfs文件系统扩展的时候,如果底层是逻辑卷那是最好的,直接把逻辑卷扩展就行。如果底层是物理分区,那就要看物理分区有没有扩展的可能性,如果物理分区的后续物理磁盘是空余的。那就可以把物理分区往大扩,然后再去扩展qfs也行,但是依旧很危险,毕竟是物理分区。

gfs文件系统扩展必须要几个G,想扩展几百M是根本不可能的。若是想要拉伸到一直指定大小,基本上也实现不了,所以gfs增大一般都是巨量级的,都是几个T,几百个G扩展。

3、磁盘配额

gfs文件系统跟传统ext文件系统磁盘配额不太一样。磁盘配额默认是没有开启的,挂载的时候需要加选项“quota=on”

gfs2_tool -h man gfs2_tool #rhel6的,rhel7没有gfs2_tool

gfs2_tool gettune /mnt/shared

gfs2_quota warn -1 200 -u deepak -f /mnt/shared #rhel6的,rhel7没有gfs2_quota

gfs2_quota limit -1 300 -u deepak -f /mnt/shared

lvextend -1 100%free /dev/cluster/redhat

gfs_grow -T(挂载点) #T带有测试效果,如果行的话,在把T选项去掉

gfs_grow(挂载点)

gfs是可以支持acl的,但是需要在挂载选项中加上acl。

posted @ 2022-10-29 17:48  LB_运维技术  阅读(228)  评论(0编辑  收藏  举报