一: 基础讲解
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 组成
Conga由ricci和luci组成
2 luci讲解
Luci装在非节点主机上
3 luci安装
Yum -y install luci
service luci start;chkconfig luci on
登出,授权的账号登陆
4 所有节点操作(ricci)
yum -y install ricci (11111、tcp)
Id ricci (查询账户)
echo redhat | passwd --stdin ricci
service ricci start;chkconfig ricci on
netstat -anptu | grep 11111
5 登陆luci创建集群(有权限用户)
6 节点加入群集失败,查看cman服务
各个节点都应该有的配置文件/etc/cluster/cluster.conf,如果没有拷贝其他服务器上的
/etc/init.d/cman start
7 集群信息查看与通讯问题
群集节点相互通讯问题
8 其他问题
各个节点cman 必须设置开机启动
可以通过watch和ps 查看yum 装的包
Watch -n 1 ps aux | grep yum
9 添加节点
三: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:集群部署
搭建平台不同,选的不同,下面主要以KVM讲解fence-vmx红帽的
将节点加入fencing设备
所有节点都做
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: 资源创建
虚拟VIP 以提供服务
添加apache资源
配置存储 (服务端与客户端多路径)节点都做
在任意一个节点上分区,格式化一块磁盘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,后面一样
集群做高可用
挂载(增加文件系统)
2: 故障切换域
优先级1--99 数字越小,优先级越高
3: 资源组(关联应用)
增加的资源就是上面定义的ip apache 和 文件系统(挂载)
提交,
提交有可能失败 查看每个虚拟机上的磁盘是否都能识别已经分好的区
3:查看clustat -i 1一秒刷新一次
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 资源搭建
所有节点创建文件夹(共享目录)
共享存储分区,multipath -r重读, partprobe 以识别该分区,格式化,挂载,修改selinux上下文(man samba_selinux)
所有节点统一装samba包,统一配置文件,partprobe ,
测试能否挂载,完成之后要卸载。
2 故障转移域
3定义资源组
查看 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 查看,里面没有的根据定义启动
2 父子关系实验(基于NFS)
创建故障转移域
配置NFS共享存储
分区,格式化,挂载测试
别的节点partprobe 识别分区,multipath -r ,创建相同目录/nfs_data,挂载测试,完成后卸载
资源创建
网络通讯问题(注意)
完成用网路ip挂载测试
3: 非关键资源实验
节点观察跑服务的节点多出一个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 关键资源实验
测试,删掉IP
查看日志,在查看设备,设备会恢复
九:仲裁机制
1:仲裁基础讲解
预期票值(所有节点总票制)/2 + 1 仲裁
Expected votes: 3 预期票值(节点票值之和)
Total votes: 3 总票值(当前活动的)
Node votes 1 当前节点票值(可以改值)
Quorum: 2 仲裁票值
2: 查看票值的几种方法
Cman_tool status 查看
ccs_tool lsnode(查看票值)
查看配置文件 (默认值为1时,配置文件不显示)
3: 更改票值
如果查看其他节点没有同步票值,将已有改动文件同步其他节点
直接拷贝
每次修改版本一定会变
[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服务状态
十:第三方仲裁机制
1:仲裁磁盘
防止双节点私网导致fencing循环
2: 仲裁磁盘讲解
仲裁磁盘(两边写入是否成功)
Ping的形式,做探测
仲裁磁盘应用,(双节点,多节点时。群集最后一个正常也能通讯,)
仲裁磁盘设置票值一般为节点数-1 ,或者更大
总裁磁盘配置(节点票数必须为1,需要10M,一定要都能读写,不能使用LVM)
3: 配置仲裁磁盘
登陆双节点之一的设备。划分共享分区1个10M,不能是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个节点
普通用户登陆
Ping -c 1 -W 1 IP W代表一秒不通,返回超时
两个条件都得满足
提交失败,,看日志
[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的时间应该为qdisk的1.7被
Cman默认与qdisk通讯10秒
Man cman 搜索token
修改配置文件vim /etc/cluster/cluster.conf
<cman expected_votes="3"/>
<totem token="66000"/> 在cman下添加该行,此处数值为qdisk的1.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设备
1:fencing之远程控制卡
远程控制卡(基于内部的,基于设备硬件{HP(iL0) IBM(rsall),dell(drac)}卡等)
提供iL0卡的账户密码,使其关机,B让A关机
硬件需要配置IP用户密码等(IPMI(只能平台管理接口))
2: fencing之网络电源交换机
NPS(基于外部的 san switch network switch)
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
启动时lvm默认激活,需要手动改,其他和上面一样配置资源一样
如果没切换到集群模式,可以通过vgcreate、lvcreate -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
所有节点挂载测试,可同时挂载,卸载
文件系统
设置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
转载于:https://blog.51cto.com/13272050/2115774