欢迎各位兄弟 发布技术文章
这里的技术是共享的
fabric: 是一个命令分发工具,是一个python程序,有个命令叫fab,可以方便的使用-H(host)指定主机以后,基于多线程的方式分布式的将命令在远程主机上执行, 也是基于ssh的方式进行的,,,跟我们自己使用ssh差不多,但是比我们在命令行方式下使用 bash shell 的命令机制要高效得多,
https://docs.fabfile.org/en/2.5/
https://docs.fabfile.org/en/1.6/
官方的页面文档 fabric ,,,,,,,,,,,, python的程序
马哥在红帽 5.8 的 32 位的系统上安装 rhcs 并配置工作起来,
以ha为例
rhcs的几个重要组件:
cman: 依赖于openais,它(openais)会自动安装的???
rgmanager: 它的资源管理器叫rgmanager,
gfs: 如果想使用的集群文件系统,就要安装gfs,它是内核模块,一般来讲是不能装的,一般红帽系统中的内核都已经提供这个模块了,所以可以直接使用,我们需要提供的是gfs2-utils(gfs的分区的格式化,分区调整,分区检测等相关工具,) (这里先不用到它)
lvm-cluster: 就是clvm (这里先不用到它)
system-config-cluster: 红帽的集群套件还提供了一个所谓的基于GUI界面的管理工具system-config-cluster, 我们只需要在其中一个节点上安装这个工具就可以了,不需要每个节点都安装,,,当然将来有可能在任意一个节点上执行的话,每个节点都安装也可以
cman的集群节点一般是至少需要3个,2个的话需要配置仲裁磁盘( 或者说是表决磁盘 quorum disk (qdisk) )才可以使用,配置仲裁磁盘是比较麻烦的
多个节点的话,偶数节点,也很难评判谁是胜出的一方,多个节点的时候,刚好从中间分裂的可能性虽然不大,但是偶尔有,有的时候也可能用到表决磁盘(或者ping node)
今天演示rhcs的时候,不想配置表决磁盘,所以直接上三个节点
node1 node1.magedu.com 192.168.0.45 # uname -n 是 node1.magedu.com
node2 node2.magedu.com 192.168.0.55 # uname -n 是 node2.magedu.com
node3 node3.magedu.com 192.168.0.65 # uname -n 是 node3.magedu.com
steppingstone.magedu.com 192.168.0.100 #跳板主机
配置高可用集群的前提:
1)时间同步
2)名称解析(基于主机名互相访问),且每一个主机的主机名必须要 # uname -n 保持一致 基于主机名互相访问 ,,,还要注意iptables吧
3)配置好每个节点的yum源,steppingstone 能够基于ssh操作这三个节点,这样在跳板机就可以实现在每个节点上安装程序了
ssh互信 我们今天的场景中,只需要steppingstone 能够基于ssh操作这三个节点就可以了,,,,跳板机steppingstone一定要加强它的安全保护 (steppingstone 跳过石头,就是跳板的意思吧)
期望在三个节点上都要执行的命令在steppingstone上使用for循环来执行,,,否则仅连到某个节点上单独去执行它,
为我们能够远程的控制这三个节点各自安装cman等各种软件,三个节点需要事先配置好yum源
RHCS:
cman,rgmanager,system-config-cluster ( 三个节点上都安装这三个软件,可以在跳板机上执行 )
做上面所说的配置高可用集群的前提
1)时间同步
在192.168.0.45上 # 192.168.0.55 192.168.0.65 同样的配置
[root@node1 ~]# ntpdate 192.168.0.100
16 Jan 08:55:51 ntpdate[4635]: step time server 192.168.0.100 offset 4.595664 sec
[root@node1 ~]#
[root@node1 ~]# ntpdate 192.168.0.100
15 Jan 17:02:50 ntpdate[7436]: step time server 192.168.0.100 offset 5.988288 sec
2) 在192.168.0.45上 配置名称解析 # 192.168.0.55 192.168.0.65 同样的配置 在跳板机 192.168.0.100 也要这样配置
[root@node1 ~]# vim /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost node1.magedu.com # node1.magedu.com 这里不同的节点上作不同的配置
::1 localhost6.localdomain6 localhost6
192.168.0.100 steppingstone.magedu.com steppingstone
192.168.0.65 noder3.magedu.com node3
192.168.0.55 node2.magedu.com node2
192.168.0.45 node1.magedu.com node1
在 192.168.0.45 上 # 192.168.0.55 192.168.0.65 同样的配置
[root@node1 ~]# hostname node1.magedu.com #在内存里改
[root@node2 ~]# uname -n
node1.magedu.com
[root@node2 ~]# vim /etc/sysconfig/network #改到硬盘上
NETWORKING=yes
NETWORKING_IPV6=yes
#HOSTNAME=localhost.localdomain
HOSTNAME=node1.magedu.com
3)配置yum源 及在跳板机上配置 ssh 通信
I )
在 192.168.0.45 上 # 192.168.0.55 192.168.0.65 同样的配置
[root@node1 ~]# mount /dev/cdrom /media/cdrom/
[root@node2 ~]# vim /etc/yum.repos.d/cdrom.repo # 配置cdrom.repo
enabled=1
gpgcheck=0
[Cluster]
name=RHEL5 CDROM Server Cluster
baseurl=file:///media/cdrom/Cluster
enabled=1
gpgcheck=0
[ClusterStorage]
name=RHEL5 CDROM Server Cluster Storage
baseurl=file:///media/cdrom/ClusterStorage
enabled=1
gpgcheck=0
[VT]
name=RHEL5 CDROM Server VT
baseurl=file:///media/cdrom/VT
enabled=1
gpgcheck=0
II ) 跳板机上配置 ssh 能连上三个节点
[root@192 ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
Generating public/private rsa key pair.
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
0f:6e:81:8f:99:65:00:57:f1:76:2b:e8:9e:73:71:50 root@192.168.0.148
[root@192 ~]#
[root@192 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1 #公钥复制到node1, #同样也要复制到node2,,node3
15
root@node1's password:
Now try logging into the machine, with "ssh 'root@node1'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
[root@192 ~]# ssh node1 'ifconfig' 验证一下
eth0 Link encap:Ethernet HWaddr 00:0C:29:02:A2:33
inet addr:192.168.0.45 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe02:a233/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:51824 errors:0 dropped:0 overruns:0 frame:0
TX packets:1201 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5148026 (4.9 MiB) TX bytes:175900 (171.7 KiB)
Interrupt:67 Base address:0x2000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:74 errors:0 dropped:0 overruns:0 frame:0
TX packets:74 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5828 (5.6 KiB) TX bytes:5828 (5.6 KiB)
[root@192 ~]#
在跳板机上,给三个节点安装这三个工具
在 跳板机 192.168.0.100 上
[root@192 ~]# alias ha='for I in {1..3}; do' #给for循环的开头部分起个别名
[root@192 ~]# ha ssh node$I 'yum -y install cman rgmanager system-config-cluster'; done #出现报错,意思是说好像与以前安装的corosync有冲突
#在 192.168.0.45 192.168.0.55 192.168.0.65 卸载掉 corosynclib corosynclib 看看
[root@node3 ~]# yum remove corosync corosynclib
[root@192 ~]# ha ssh node$I 'yum -y install cman rgmanager system-config-cluster'; done
由上面的截图,openais也装上了,说明在红帽5上,cman是依赖于openais的
使用for循环,有个缺陷,就是不能并行执行(因为基于bash shell,必须是一个命令执行完后,再执行另外一个)
fabric应该有并行执行的能力,
在第一个节点上 192.168.0.45 上看生成的有哪些文件
[root@node1 ~]# rpm -ql cman
/etc/cluster #配置文件目录,里面是空的,没有任何文件
/etc/rc.d/init.d/cman #服务程序
/etc/rc.d/init.d/qdiskd #仲裁磁盘相关的服务进程
/etc/rc.d/init.d/scsi_reserve #与scsi相关的
/etc/udev/rules.d/51-dlm.rules
/sbin/ccs_test
/sbin/ccs_tool #管理ccs的工具
/sbin/ccsd
/sbin/dlm_controld #分布锁的控制进程
/sbin/dlm_tool #管理分布式锁的工具
/sbin/fence_ack_manual # 一大堆的fence设备,这些是stonith的资源代理,stonith专门用来实现fence某种特定设备时专用的工具 #每一个fence程序专门对于某一种特定场景下的主机对它执行重启,关机等相关操作的,,能够远程发一个命令就能够对它关机或重启操作,比切断电源好用,,,,,,,,,,如果没有电源交换机的话( 当然我们的电源交换机可能是某些特定的厂商所提供的,而这些特定的厂商提供了程序,专门向这样一个交换机,发送 fence 指令的 )
/sbin/fence_apc
/sbin/fence_apc_snmp
/sbin/fence_bladecenter
/sbin/fence_brocade
/sbin/fence_bullpap
/sbin/fence_cisco_mds
/sbin/fence_cisco_ucs
/sbin/fence_drac
/sbin/fence_drac5
/sbin/fence_egenera
/sbin/fence_ifmib
/sbin/fence_ilo
/sbin/fence_ilo_mp
/sbin/fence_ipdu
/sbin/fence_ipmilan
/sbin/fence_lpar
/sbin/fence_manual #手动fence的,肉键,用来模拟实现手动 fence的
/sbin/fence_mcdata
/sbin/fence_node
/sbin/fence_rhevm
/sbin/fence_rps10
/sbin/fence_rsa
/sbin/fence_rsb
/sbin/fence_sanbox2
/sbin/fence_scsi
/sbin/fence_scsi_test
/sbin/fence_tool
/sbin/fence_virsh #专门fence虚拟机的工具,virsh是一个通用的能够管理xen,qvm等的工具,能够让xen,qvm上的虚拟机能够重启,关机等等
/sbin/fence_vixel
/sbin/fence_vmware #专门fence vmware虚拟机的,给vmware发指令
/sbin/fence_vmware_helper
/sbin/fence_vmware_soap
/sbin/fence_wti
/sbin/fence_xvm
/sbin/fence_xvmd
/sbin/fenced
/sbin/gfs_controld
/sbin/group_tool
/sbin/groupd
/usr/lib/fence
/usr/lib/fence/fencing.py
/usr/lib/fence/fencing.pyc
/usr/lib/fence/fencing.pyo
/usr/lib/fence/fencing_snmp.py
/usr/lib/fence/fencing_snmp.pyc
/usr/lib/fence/fencing_snmp.pyo
/usr/lib/fence/telnet_ssl
/usr/lib/libcman.so
/usr/lib/libcman.so.2
/usr/lib/libcman.so.2.0.115
/usr/lib/libdlm.so
/usr/lib/libdlm.so.2
/usr/lib/libdlm.so.2.0.115
/usr/lib/libdlm_lt.so
/usr/lib/libdlm_lt.so.2
/usr/lib/libdlm_lt.so.2.0.115
/usr/libexec/lcrso
/usr/libexec/lcrso/service_cman.lcrso
/usr/sbin/cman_tool
/usr/sbin/mkqdisk
/usr/sbin/qdiskd
/usr/share/man/man3/dlm_cleanup.3.gz
/usr/share/man/man3/dlm_close_lockspace.3.gz
/usr/share/man/man3/dlm_create_lockspace.3.gz
/usr/share/man/man3/dlm_dispatch.3.gz
/usr/share/man/man3/dlm_get_fd.3.gz
/usr/share/man/man3/dlm_lock.3.gz
/usr/share/man/man3/dlm_lock_wait.3.gz
/usr/share/man/man3/dlm_ls_lock.3.gz
/usr/share/man/man3/dlm_ls_lock_wait.3.gz
/usr/share/man/man3/dlm_ls_lockx.3.gz
/usr/share/man/man3/dlm_ls_pthread_init.3.gz
/usr/share/man/man3/dlm_ls_unlock.3.gz
/usr/share/man/man3/dlm_ls_unlock_wait.3.gz
/usr/share/man/man3/dlm_new_lockspace.3.gz
/usr/share/man/man3/dlm_open_lockspace.3.gz
/usr/share/man/man3/dlm_pthread_init.3.gz
/usr/share/man/man3/dlm_release_lockspace.3.gz
/usr/share/man/man3/dlm_unlock.3.gz
/usr/share/man/man3/dlm_unlock_wait.3.gz
/usr/share/man/man3/libdlm.3.gz
/usr/share/man/man5/cluster.conf.5.gz
/usr/share/man/man5/cman.5.gz
/usr/share/man/man5/qdisk.5.gz
/usr/share/man/man7/ccs.7.gz
/usr/share/man/man8/ccs_test.8.gz
/usr/share/man/man8/ccs_tool.8.gz
/usr/share/man/man8/ccsd.8.gz
/usr/share/man/man8/cman_tool.8.gz
/usr/share/man/man8/dlm_controld.8.gz
/usr/share/man/man8/dlm_tool.8.gz
/usr/share/man/man8/fence.8.gz
/usr/share/man/man8/fence_ack_manual.8.gz
/usr/share/man/man8/fence_apc.8.gz
/usr/share/man/man8/fence_apc_snmp.8.gz
/usr/share/man/man8/fence_bladecenter.8.gz
/usr/share/man/man8/fence_brocade.8.gz
/usr/share/man/man8/fence_bullpap.8.gz
/usr/share/man/man8/fence_cisco_mds.8.gz
/usr/share/man/man8/fence_cisco_ucs.8.gz
/usr/share/man/man8/fence_drac.8.gz
/usr/share/man/man8/fence_drac5.8.gz
/usr/share/man/man8/fence_egenera.8.gz
/usr/share/man/man8/fence_ifmib.8.gz
/usr/share/man/man8/fence_ilo.8.gz
/usr/share/man/man8/fence_ilo_mp.8.gz
/usr/share/man/man8/fence_ipdu.8.gz
/usr/share/man/man8/fence_ipmilan.8.gz
/usr/share/man/man8/fence_lpar.8.gz
/usr/share/man/man8/fence_manual.8.gz
/usr/share/man/man8/fence_mcdata.8.gz
/usr/share/man/man8/fence_node.8.gz
/usr/share/man/man8/fence_rhevm.8.gz
/usr/share/man/man8/fence_rib.8.gz
/usr/share/man/man8/fence_rps10.8.gz
/usr/share/man/man8/fence_rsa.8.gz
/usr/share/man/man8/fence_rsb.8.gz
/usr/share/man/man8/fence_sanbox2.8.gz
/usr/share/man/man8/fence_scsi.8.gz
/usr/share/man/man8/fence_scsi_test.8.gz
/usr/share/man/man8/fence_tool.8.gz
/usr/share/man/man8/fence_virsh.8.gz
/usr/share/man/man8/fence_vixel.8.gz
/usr/share/man/man8/fence_vmware.8.gz
/usr/share/man/man8/fence_vmware_soap.8.gz
/usr/share/man/man8/fence_wti.8.gz
/usr/share/man/man8/fence_xvm.8.gz
/usr/share/man/man8/fence_xvmd.8.gz
/usr/share/man/man8/fenced.8.gz
/usr/share/man/man8/gfs_controld.8.gz
/usr/share/man/man8/group_tool.8.gz
/usr/share/man/man8/groupd.8.gz
/usr/share/man/man8/mkqdisk.8.gz
/usr/share/man/man8/qdiskd.8.gz
/usr/share/snmp/mibs/powernet369.mib
/var/run/cluster
[root@node1 ~]# fence_manual -h
Usage:
fence_manual [options]
Options:
-h usage #用法
-q quiet #静默模式
-n <nodename> node to fence #明确指明,fence掉谁,模拟fence成功了
-V version
[root@node1 ~]#
[root@node1 ~]#
[root@node1 ~]# fence_manual -n node3.magedu.com # 这里未执行,,,,fence掉node3,并未真正fence掉,只是模拟,通知集群已经fence掉了,,,没有fence设备,可以使用模拟,,,,,,,事实上许多虚拟机,自带有fence设备的,使用软件模拟出来的fence设备,像xen,VMware也有,但是在VMware Workstation不好用,在VMware Server可以用,尤其es exxi上应该是有的,它们有专门的程序,,,,,,,,,,,,,,虚拟机从来都是程序控制的,点个按钮,就是发送个命令,就可以重启了,所以我们想fence一个主机,让它重启一下(或让它关机),很简单,只需要借助于一个额外的模块就能够实现,很多虚拟机软件提供都有,
[root@node1 ~]# fence_manual -h
Usage:
fence_manual [options]
Options:
-h usage
-q quiet
-n <nodename> node to fence
-V version
[root@node1 ~]# fence_v
fence_virsh fence_vmware fence_vmware_soap
fence_vixel fence_vmware_helper
[root@node1 ~]# fence_v
fence_virsh fence_vmware fence_vmware_soap
fence_vixel fence_vmware_helper
[root@node1 ~]# fence_vmware -h
Usage:
fence_vmware [options]
Options:
-o, --action=<action> Action: status, reboot (default), off or on
-a, --ip=<ip> IP address or hostname of fencing device
-l, --username=<name> Login name #使用哪个帐号
-p, --password=<password> Login password or passphrase #哪个密码
-S, --password-script=<script> Script to run to retrieve password
-n, --plug=<id> Physical plug number on device or
name of virtual machine
-e, --exec=<command> Command to execute #执行命令
-d, --vmware_type=<type> Type of VMware to connect
-x, --ssh Use ssh connection
-k, --identity-file=<filename> Identity file (private key) for ssh
-s, --vmware_datacenter=<dc> VMWare datacenter filter
-v, --verbose Verbose mode
-D, --debug-file=<debugfile> Debugging to output file
-V, --version Output version information and exit
-h, --help Display this help and exit
-C, --separator=<char> Separator for CSV created by 'list' operation
--power-timeout <seconds> Test X seconds for status change after ON/OFF
--shell-timeout <seconds> Wait X seconds for cmd prompt after issuing command
--login-timeout <seconds> Wait X seconds for cmd prompt after login
--power-wait <seconds> Wait X seconds after issuing ON/OFF
--delay <seconds> Wait X seconds before fencing is started
--retry-on <attempts> Count of attempts to retry power on
[root@node1 ~]#
在第一个节点 192.168.0.45 上
[root@node1 ~]# man cman_tool #cman的命令行工具?用来管理集群的工具
有很多子命令,如
join 让一个节点加入到集群中来
leave 将某一个节点从当前集群中移除
expected 期望的票数
votes 总票数(法定票数)
version 当前配置的版本
status 查看当前集群状态的
[root@node1 ~]# man ccs_tool #用来在线更新集群的配置文件,而且能够立即生效的工具
rhcs集群服务启动的前提
1) RHCS: 的集群,为了区别当前节点到底加了哪个集群,(同一个物理网络中,可能有多个集群),每一个集群都有全局唯一的集群名称(集群ID)(并且必须有名称以后,cman服务才能够启动起来),
2) 至少有一个fence设备,如果没有的话,万一某个设备故障的话,就没法有效的隔离掉此设备了,
3) 至少应该有三个节点(两个节点也成,但是要配置表决磁盘qdisk,,,事实上偶数个节点,每个节点都是一票的时候,也需要表决磁盘(仲裁磁盘)) 四个,六个,八个节点,,,虽然可能产生集群分裂,但是这种可能性很小,(两个节点一分裂,一定是各占一半,四个节点分裂的时候,刚好这边两个,那边两个的可能性很小,八个节点,这边四个,那边四个的可能性更小了),,,,,因此在其它偶数节点上,我们的表决磁盘不配置的这种场景也是能接受的,如果是奇数个节点就不用配置了,
可以使用system-config-cluster去配置,也可以使用ccs_tool去配置
如下图图一,打开一个类似于 heartbeat gui一样界面的一个窗口工具,它说没有配置文件,是不是需要指定一个配置文件,这个程序都是在本机操作的,所以它不需要你登录,当你点保存,它会自动ccs服务,将它同步到其它各节点上去,它不需要非得去联系DC的,cman当中是没有DC的概念的,
图一
在第一个节点 192.168.0.45 上
我打开 Xshell
[root@node1 ~]# system-config-cluster &
如下图,它说没有配置文件,/etc/cluster/cluster.conf,点击 create new configuration 就创建了一个配置文件,
给集群起个名
我们这里,叫 tcluster 吧
集群各节点之间是通过多播的方式传递心跳信息的,指定一个多播地址(如果不指,生成一个随机的地址)
要不要使用仲裁磁盘,如果用的话,内部多长时间尝试写一次,如下图的interval
如下图
Cluster Nodes,集群当中有哪些节点
Fence Device 有几个fence设备
Failover Domain 故障转移域是什么
Resources 有什么资源
Services 有什么服务
如下图,把节点加入到集群中来
如下图,节点名称叫什么,一定是Node Name,而且当前主机上要能够解析那个节点,
节点名称 node1.magedu.com 要与 # uname -n 保持一致
Quorum Votes: 应该投几票,默认是 1
同理再加 node2.magedu.com node3.magedu.com
结果如下图
还应该至少有一个fence设备,添加一个fence设备,fence代理,,, apc power device 电源交换机,我们没有,
我们使用肉键方式进行fence,,,,,,manual fencing (手动 fence) 名称 我们叫 meatware (肉件) (fence设备应该有id号,这里标识为meatware )
至此配置搞定
资源要想工作起来,要等到服务启动之后才配置
点 文件=>保存
这里点确定
这里继续点确定
点关闭,配置结束
看一下配置文件
在第一个节点 192.168.0.45 上
[root@node1 ~]# cd /etc/cluster/
[root@node1 cluster]# cat cluster.conf # xml格式的 # cman在一个节点上配置完了以后,已经告知cman节点有哪些了
<?xml version="1.0" ?>
<cluster config_version="2" name="tcluster">
<fence_daemon post_fail_delay="0" post_join_delay="3"/>
<clusternodes> #三个节点 没说使用哪个fence设备,但是下面定义了一个fence设备,说明大家使用同一个fence设备
<clusternode name="node1.magedu.com" nodeid="1" votes="1">
<fence/>
</clusternode>
<clusternode name="node2.magedu.com" nodeid="2" votes="1">
<fence/>
</clusternode>
<clusternode name="node3.magedu.com" nodeid="3" votes="1">
<fence/>
</clusternode>
</clusternodes>
<cman/>
<fencedevices>
<fencedevice agent="fence_manual" name="meatware"/>
</fencedevices>
<rm>
<failoverdomains/>
<resources/>
</rm>
</cluster>
[root@node1 cluster]#
在第二个节点 192.168.0.55 上
[root@node2 ~]# cd /etc/cluster/
[root@node2 cluster]# ls #因为集群服务没有启动,所以没有配置文件
[root@node2 cluster]#
在第一个节点 192.168.0.45 上
[root@node1 cluster]# service cman start #这里第一次启动cman后,,,,我为什么报错,马哥为什么是对的
Starting cluster:
Loading modules... done
Mounting configfs... done
Starting ccsd... done
Starting cman... failed
cman not started: Local host name resolves to 127.0.0.1; fix /etc/hosts before starting cluster. /usr/sbin/cman_tool: aisexec daemon didn't start
[失败]
[root@node1 cluster]#
下图,这里第一次启动cman后,马哥就卡在这里了,它要等待着把配置文件传输到刚才指定的另外两个节点上去,所以cman启动之后,它会自动的启动ccsd服务,,,另外两个节点上 启动cman,它首先ccsd也会启动的,所以ccsd服务把会配置文件传递给另外两个节点,而后这个启动才能算是真正完成了
马哥 启动 node2
马哥 启动 node3
马哥这里并没有使用for循环的方式去执行,因为这里不允许,因为第一个主机执行之后,第二个(第三个)主机才能启动,,,第一个主机要等到第二个(第三个)主机启动后才能启动的;;;;所以不能使用for循环的方式,
马哥 node1 现在启动成功了 node2 现在也启动成功了(不截图了) node3 现在也启动成功了 (不截图了)
我为什么报错呢,看看 /etc/hosts吧
在第一个节点 192.168.0.45 上 好像 node1.magedu.com 解析的是 127.0.0.1
[root@node1 cluster]# ping node1.magedu.com # 看到了吧 node1.magedu.com 解析的是 127.0.0.1,,,应该是 192.168.0.45 吧
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.061 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.023 ms
--- localhost.localdomain ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.023/0.042/0.061/0.019 ms
[root@node1 cluster]#
把 node1.magedu.com 解析的是 127.0.0.1 去掉看看
[root@node1 cluster]# vim /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.0.100 steppingstone.magedu.com steppingstone
192.168.0.65 node3.magedu.com node3
192.168.0.55 node2.magedu.com node2
192.168.0.45 node1.magedu.com node1
同理 把 node2 上 node3 上 steppingstone 上 关于这里的 127.0.0.1 的 node1.magedu.com node2.magedu.com steppingstone.magedu.com 的解析也去掉吧
在第一个节点 192.168.0.45 上
[root@node1 cluster]# service cman start #重新执行 cman 启动
[root@node1 cluster]# service cman start
Starting cluster:
Loading modules... done
Mounting configfs... done
Starting ccsd... done
Starting cman... 卡住
在第二个节点 192.168.0.55 上
[root@node2 cluster]# service cman start
在第二个节点 192.168.0.65 上
[root@node1 cluster]# service cman start
最后发现 三个节点上 全都启动起来了
在第一个节点 192.168.0.45 上
[root@node1 cluster]# service cman start # 启动成功了 ,node2, node3同理就不贴代码了
Starting cluster:
Loading modules... done
Mounting configfs... done
Starting ccsd... done
Starting cman... done
Starting daemons... done
Starting fencing... done
Tuning DLM... done
[确定]
[root@node1 cluster]#
在第二个节点 192.168.0.55 上
[root@node2 cluster]# pwd
/etc/cluster
[root@node2 cluster]# ls #配置文件过来了
cluster.conf
[root@node2 cluster]#
在第三个节点 192.168.0.65 上
[root@node3 ~]# cd /etc/cluster/
[root@node3 cluster]# ls #配置文件也过来了
cluster.conf
[root@node3 cluster]#
cluster.conf 配置文件在所有节点上都是一模一样的,直接同步而来
此时cman服务已经启动
三个节点上启动 rgmanager
在跳板机 192.168.0.100 上
[root@192 ~]# ha ssh node$I 'service rgmanager start'; done #三个节点全部启动
启动 Cluster Service Manager:[确定]
启动 Cluster Service Manager:[确定]
启动 Cluster Service Manager:[确定]
[root@192 ~]#
在第一个节点 192.168.0.45 上
#看看启动以后监听的端口
[root@node1 ~]# netstat -tnlp | grep -E "(cman|rgmanager)"
[root@node1 ~]#
[root@node1 ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN 3936/./hpiod
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:32803 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:901 0.0.0.0:* LISTEN 4002/xinetd
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3949/php-fpm
tcp 0 0 0.0.0.0:875 0.0.0.0:* LISTEN 4052/rpc.rquotad
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 3465/portmap
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 4191/vsftpd
tcp 0 0 192.168.0.45:53 0.0.0.0:* LISTEN 3876/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3876/named
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3970/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3984/cupsd
tcp 0 0 0.0.0.0:50008 0.0.0.0:* LISTEN 4741/ccsd #这里进程名是ccsd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 4318/master
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 3876/named
tcp 0 0 0.0.0.0:731 0.0.0.0:* LISTEN 3517/rpc.statd
tcp 0 0 0.0.0.0:892 0.0.0.0:* LISTEN 4094/rpc.mountd
tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN 3941/python
tcp 0 0 ::1:50006 :::* LISTEN 4741/ccsd
tcp 0 0 :::22 :::* LISTEN 3970/sshd
tcp 0 0 ::1:953 :::* LISTEN 3876/named
[root@node1 ~]#
[root@node1 ~]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN 3936/./hpiod
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:32803 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:901 0.0.0.0:* LISTEN 4002/xinetd
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3949/php-fpm
tcp 0 0 0.0.0.0:875 0.0.0.0:* LISTEN 4052/rpc.rquotad
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 3465/portmap
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 4191/vsftpd
tcp 0 0 192.168.0.45:53 0.0.0.0:* LISTEN 3876/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3876/named
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3970/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3984/cupsd
tcp 0 0 0.0.0.0:50008 0.0.0.0:* LISTEN 4741/ccsd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 4318/master
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 3876/named
tcp 0 0 0.0.0.0:731 0.0.0.0:* LISTEN 3517/rpc.statd
tcp 0 0 0.0.0.0:892 0.0.0.0:* LISTEN 4094/rpc.mountd
tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN 3941/python
tcp 0 0 ::1:50006 :::* LISTEN 4741/ccsd
tcp 0 0 :::22 :::* LISTEN 3970/sshd
tcp 0 0 ::1:953 :::* LISTEN 3876/named
udp 0 0 0.0.0.0:32769 0.0.0.0:* -
udp 0 0 0.0.0.0:2049 0.0.0.0:* -
udp 0 0 0.0.0.0:42765 0.0.0.0:* 4490/avahi-daemon
udp 0 0 192.168.0.45:5405 0.0.0.0:* 4750/aisexec #udp服务
udp 0 0 192.168.0.45:5149 0.0.0.0:* 4750/aisexec #udp服务
udp 0 0 239.192.110.162:5405 0.0.0.0:* 4750/aisexec #udp服务,多播地址(这里239.192.110.162地址是生成的吧,当然也可以指定),监听在5405的端口上,提供多播服务的
udp 0 0 192.168.0.45:53 0.0.0.0:* 3876/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 3876/named
udp 0 0 0.0.0.0:725 0.0.0.0:* 3517/rpc.statd
udp 0 0 0.0.0.0:728 0.0.0.0:* 3517/rpc.statd
udp 0 0 0.0.0.0:5353 0.0.0.0:* 4490/avahi-daemon
udp 0 0 0.0.0.0:875 0.0.0.0:* 4052/rpc.rquotad
udp 0 0 0.0.0.0:111 0.0.0.0:* 3465/portmap
udp 0 0 0.0.0.0:631 0.0.0.0:* 3984/cupsd
udp 0 0 0.0.0.0:892 0.0.0.0:* 4094/rpc.mountd
udp 0 0 :::36048 :::* 4490/avahi-daemon
udp 0 0 :::50007 :::* 4741/ccsd #udp 的 ccsd
udp 0 0 :::5353 :::* 4490/avahi-daemon
#将来定义防火墙的话,这些端口都要开放的,否则节点之间无法通信了
[root@node1 ~]#
高可用服务应该是开机自启动的
配置web服务吧(暂时不使用共享服务)
至少两个资源:
1)VIP
2)httpd
每个节点上装web服务(我本来就有了,就不安装了)
在 跳板机 192.168.0.100 上 循环安装
我们要给三个节点web服务不同页面以示区别,等一会儿迁移以后,我们能够知道它是运行在哪个节点上,
在 跳板机 192.168.0.100 上
[root@steppingstone ~]# alias ha='for I in {1..3}; do'
根据以前,我们知道 我们的三个节点的 web服务首页是 /www/a.org/index.html
[root@steppingstone ~]# ha ssh node$I 'echo node$I > /www/a.org/index.html'; done
[root@steppingstone ~]#
在第一个节点 192.168.0.45 上
[root@node1 ~]# cat /www/a.org/index.html #没看到$I的值
node
[root@node1 ~]#
'echo node$I > /www/a.org/index.html'; 这个命令是在节点上执行的,不是当前shell中执行的,,,所以$I为空
我们在三个节点上分别写吧 分别启动服务,测一下
在第一个节点 192.168.0.45 上
[root@node1 ~]# vim /www/a.org/index.html
node1
[root@node1 ~]# service httpd start
启动 httpd: [确定]
[root@node1 ~]#
http://192.168.0.45/index.html 能正常访问
[root@node1 ~]# service httpd stop #关闭服务
停止 httpd: [确定]
[root@node1 ~]#
[root@node1 ~]# chkconfig httpd off #禁用开机自启动
[root@node1 ~]#
在第二个节点 192.168.0.55 上
[root@node2 ~]# vim /www/a.org/index.html
node2
[root@node2 ~]# service httpd start
启动 httpd: [确定]
[root@node2 ~]#
http://192.168.0.55/index.html 能正常访问
[root@node2 ~]# service httpd stop 关闭服务
停止 httpd: [确定]
[root@node2 ~]#
[root@node2 ~]# chkconfig httpd off #禁用开机自启动
[root@node2 ~]#
在第三个节点 192.168.0.45 上
[root@node3 ~]# vim /www/a.org/index.html
node3
[root@node3 ~]# service httpd start
启动 httpd: [确定]
[root@node3 ~]#
http://192.168.0.65/index.html 能正常访问
[root@node3 ~]# service httpd stop 关闭服务
停止 httpd: [确定]
[root@node3 ~]#
[root@node3 ~]# chkconfig httpd off #禁用开机自启动
[root@node3 ~]#
配置vip为192.168.0.50
在第一个节点 192.168.0.45 上
[root@node1 ~]# cman_tool status #当前集群的状态
Version: 6.2.0 #版本
Config Version: 2 #配置版本
Cluster Name: tcluster #集群名称
Cluster Id: 28212 #集群ID
Cluster Member: Yes #Cluster Member信息是否正常
Cluster Generation: 56
Membership state: Cluster-Member
Nodes: 3 #有几个节点
Expected votes: 3 #期望几票
Total votes: 3 #总共几票
Node votes: 1 #每个节点几票
Quorum: 2 #满足quorum至少几票
Active subsystems: 7
Flags: Dirty
Ports Bound: 0
Node name: node1.magedu.com #当前节点名称
Node ID: 1
Multicast addresses: 239.192.110.162 #多播地址
Node addresses: 192.168.0.45
[root@node1 ~]#
[root@node1 ~]# clustat #也可查看集群相关节点的信息
Cluster Status for tcluster @ Wed Jan 20 13:33:43 2021
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1.magedu.com 1 Online, Local
node2.magedu.com 2 Online
node3.magedu.com 3 Online
[root@node1 ~]#
[root@node1 ~]# clusvcadm -h
Resource Group Control Commands:
clusvcadm -v Display version and exit
clusvcadm -d <group> Disable <group> #禁用一个组(服务,资源)
clusvcadm -e <group> Enable <group> #启用一个组(服务,资源)
clusvcadm -e <group> -F Enable <group> according to failover
domain rules
clusvcadm -e <group> -m <member> Enable <group> on <member> #在哪个成员上(哪个节点上)启用一个组
clusvcadm -r <group> -m <member> Relocate <group> [to <member>]
clusvcadm -M <group> -m <member> Migrate <group> to <member> #迁移一个组(服务,资源,,应该是虚拟机的意思????)到成员(哪个节点上)?????
(e.g. for live migration of VMs)
clusvcadm -q Quiet operation
clusvcadm -R <group> Restart a group in place.
clusvcadm -s <group> Stop <group>
Resource Group Locking (for cluster Shutdown / Debugging):
clusvcadm -l Lock local resource group manager.
This prevents resource groups from
starting on the local node.
clusvcadm -S Show lock state
clusvcadm -u Unlock local resource group manager.
This allows resource groups to start
on the local node.
clusvcadm -Z <group> Freeze group in place
clusvcadm -U <group> Unfreeze/thaw group 冻结组
clusvcadm -c <group> Convalesce (repair, fix) resource group.
Attempts to start failed, non-critical
resources within a resource group.
[root@node1 ~]#
cman集群没有命令去配置资源的,只能直接手动编辑配置文件,而且要是xml格式的
cman提供了 luci/ricci 框架,提供了 system-config-cluster 命令行图形工具
使用 xshell 打开 system-config-cluster 图形界面
[root@node1 ~]# system-config-cluster &
创建资源
这个资源类型,不叫资源代理了
Sybase
SAP Database
Apache Server
File System
IP Address
MySQL Server
NFS Mount # Mount端就是服务器端????好像不是??
NFS Client # NFS客户端
此前都是使用服务脚本直接启动的,所以我们使用Script ( 以前称为 lsb 的资源代理类型都被称为script )
Name: 资源名称
File (with path): 可执行脚本的路径(就是 /etc/rc.d/init.d/ 上的httpd吧)
一)先定义VIP地址(虚拟IP地址) 192.168.0.50 Monitor Link:监控链接?
Subnet: 24 (掩码长度)
二)定义httpd服务
资源是没法启动的,这与corosync不一样,,,,,,,资源只能定义成服务,能启动的只能是服务
三)定义服务
如下图: Failover Domain 故障转移域,定义它,然后这个web服务只能在哪个故障转移域内转移
Autostart This Service 集群启动的时候,资源配置好以后,它可以自动启动这个服务的
restart 出现故障时,重启) relocate,重新找一个节点来运行(转移到Failover Domain内的优先级比较高的那个节点上) disable禁用 (最好优先restart,不成的话再relocate,再disable)
如上图,资源配置上去了,
下图,把所有上面的配置同步到集群其它节点
(Propagation of configuration file failed with the following error: Proposed updated config file does not have greater version number. Current config_version :: 10 Proposed config_version:: 7
) 假如 Send to Cluster 报错了,,多点击几次,使用 Proposed config_version 大于 Current config_version , 应该就不会报错了
下图,当前配置己经传播到整个集群了
在第一个节点上 192.168.0.45 上
[root@node1 ~]# cman_tool status #集群状态,与资源状态没有关系
Version: 6.2.0
Config Version: 3
Cluster Name: tcluster
Cluster Id: 28212
Cluster Member: Yes
Cluster Generation: 56
Membership state: Cluster-Member
Nodes: 3
Expected votes: 3
Total votes: 3
Node votes: 1
Quorum: 2
Active subsystems: 7
Flags: Dirty
Ports Bound: 0
Node name: node1.magedu.com
Node ID: 1
Multicast addresses: 239.192.110.162
Node addresses: 192.168.0.45
[root@node1 ~]#
[root@node1 ~]# ccs_tool -h
Usage::
ccs_tool [options] <command>
Options:
-h Print this usage and exit.
-V Print version information and exit.
Commands:
help Print this usage and exit.
update <xml file> Tells ccsd to upgrade to new config file.
upgrade <location> Upgrade old CCS format to new xml format.
addnode <node> Add a node
delnode <node> Delete a node
lsnode List nodes #与状态也没有关系
lsfence List fence devices #与状态也没有关系
addfence <fencedev> Add a new fence device
delfence <fencedev> Delete a fence device
create Create a skeleton config file
addnodeids Assign node ID numbers to all nodes
[root@node1 ~]#
[root@node1 ~]# clustat #我这个没看到服务 (经检查 rgmanager 没有启动)
Cluster Status for tcluster @ Wed Jan 20 15:07:23 2021
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1.magedu.com 1 Online, Local
node2.magedu.com 2 Online
node3.magedu.com 3 Online
[root@node1 ~]#
马哥这边看到服务了
马哥通过# ip addr show 可以看到vip
使用 ip addr 添加的地址,也可以没有别名的?????只不过是在一个接口上具有了多个地址,所以使用 ifconfig 可能显示不出来
我在三个节点上 都启动 rgmanager 服务
[root@node1 ~]# service rgmanager start
启动 Cluster Service Manager: [确定]
[root@node1 ~]#
[root@node2 ~]# service rgmanager start
启动 Cluster Service Manager: [确定]
[root@node2 ~]#
[root@node3 ~]# service rgmanager start
启动 Cluster Service Manager: [确定]
[root@node3 ~]#
在第一个节点 192.168.0.45 上
[root@node1 ~]# clustat #看到服务了 ,在node1上启动了
Cluster Status for tcluster @ Wed Jan 20 15:38:33 2021
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1.magedu.com 1 Online, Local, rgmanager
node2.magedu.com 2 Online, rgmanager
node3.magedu.com 3 Online, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:webservice node1.magedu.com started
[root@node1 ~]#
在第一个节点 192.168.0.45 上
[root@node1 ~]# netstat -tnlp | grep 80 #为什么看不到80端口
tcp 0 0 0.0.0.0:32803 0.0.0.0:* LISTEN -
[root@node1 ~]#
上面为什么没的看到 80,如下图,再把配置发送到集群每一个节点
[root@node1 ~]# netstat -tnlp | grep 80 #现在有80端口了
tcp 0 0 0.0.0.0:32803 0.0.0.0:* LIST
tcp 0 0 :::80 :::* LIST
[root@node1 ~]#
[root@node1 ~]# ifconfig #没看到 192.168.0.50
eth0 Link encap:Ethernet HWaddr 00:0C:29:02:A2:33
inet addr:192.168.0.45 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe02:a233/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:146190 errors:0 dropped:0 overruns:0 frame:0
TX packets:223687 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16564526 (15.7 MiB) TX bytes:159390781 (152.0 MiB)
Interrupt:67 Base address:0x2000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:68213 errors:0 dropped:0 overruns:0 frame:0
TX packets:68213 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:140516087 (134.0 MiB) TX bytes:140516087 (134.0 MiB)
[root@node1 ~]#
[root@node1 ~]# ip addr show #可以看到 192.168.0.50
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
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 qlen 1000
link/ether 00:0c:29:02:a2:33 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.45/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.50/24 scope global secondary eth0
inet6 fe80::20c:29ff:fe02:a233/64 scope link
valid_lft forever preferred_lft forever
3: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
[root@node1 ~]#
http://192.168.0.50/index.html 能正常访问了
[root@node1 ~]# cman_tool -h
Usage:
cman_tool <join|leave|kill|expected|votes|version|wait|status|nodes|services|debug> [options]
Options:
-h Print this help, then exit
-V Print program version information, then exit
-d Enable debug output
join
Cluster & node information is taken from CCS. These switches are provided to
to allow CCS values to be overridden. Use them with extreme care.
-m <addr> Multicast address to use
-v <votes> Number of votes this node has
-e <votes> Number of expected votes for the cluster
-p <port> UDP port number for cman communications
-n <nodename> The name of this node (defaults to hostname)
-c <clustername> The name of the cluster to join
-N <id> Node id
-w Wait until node has joined a cluster
-q Wait until the cluster is quorate
-t Maximum time (in seconds) to wait
-k <file> Private key file for AIS communications
wait Wait until the node is a member of a cluster
-q Wait until the cluster is quorate
-t Maximum time (in seconds) to wait
leave
-w If cluster is in transition, wait and keep trying
-t Maximum time (in seconds) to wait
remove Tell other nodes to ajust quorum downwards if necessary
force Leave even if cluster subsystems are active
kill
-n <nodename> The name of the node to kill (can specify multiple times)
expected
-e <votes> New number of expected votes for the cluster
votes
-v <votes> New number of votes for this node
status Show local record of cluster status
nodes Show local record of cluster nodes
-f Also show when node was last fenced
-a Also show node address(es)
-n <nodename> Only show information for specific node
-F <format> Specify output format (see man page)
services Show local record of cluster services #cman_tool的子命令,
version
-r <config> A new config version to set on all members
[root@node1 ~]#
[root@node1 ~]# cman_tool services #还没能显示相关服务,,,,,没有级别???,没有节点相关的内容
type level name id state
fence 0 default 00010001 none
[1 2 3]
dlm 1 rgmanager 00020001 none
[1 2 3]
[root@node1 ~]#
[root@node1 ~]# cman_tool services -h
Usage:
cman_tool <join|leave|kill|expected|votes|version|wait|status|nodes|services|debug> [options]
Options:
-h Print this help, then exit
-V Print program version information, then exit
-d Enable debug output
services Show local record of cluster services
[root@node1 ~]#
[root@node1 ~]# man cman_tool
services 子命令,看谁使用了cman的意思,它不是显示相关服务的意思,,,,它的意思是谁利用了cman来传递心跳信息的
[root@node1 ~]# clusvcadm -h
Resource Group Control Commands:
clusvcadm -v Display version and exit
clusvcadm -d <group> Disable <group> #禁用一个组(资源或服务称为组)
clusvcadm -e <group> Enable <group> #启用一个组
clusvcadm -e <group> -F Enable <group> according to failover
domain rules
clusvcadm -e <group> -m <member> Enable <group> on <member>
clusvcadm -r <group> -m <member> Relocate <group> [to <member>] # relocate(重新定位,手动机制迁移)一个组,,,它可以不用指它节点member,会自动选一个节点
clusvcadm -M <group> -m <member> Migrate <group> to <member> # 这表示迁移,感觉与relocate区别不大????,,,,,,,,,,,,-M只能实时迁移虚拟机资源,,,,,,,,,,可以把一个虚拟机定义成高可用服务,虚拟机这会儿运行在node1(物理机)上,过一会儿可以迁移到node2(物理机)上???
(e.g. for live migration of VMs)
clusvcadm -q Quiet operation
clusvcadm -R <group> Restart a group in place. # restart 重启一个组
clusvcadm -s <group> Stop <group> # 停止一个组
Resource Group Locking (for cluster Shutdown / Debugging):
clusvcadm -l Lock local resource group manager. #锁定本地资源组管理器
This prevents resource groups from
starting on the local node.
clusvcadm -S Show lock state
clusvcadm -u Unlock local resource group manager.
This allows resource groups to start
on the local node.
clusvcadm -Z <group> Freeze group in place #冻结组
clusvcadm -U <group> Unfreeze/thaw group #解冻组
clusvcadm -c <group> Convalesce (repair, fix) resource group.
Attempts to start failed, non-critical
resources within a resource group.
如下图,三个物理机做成了高可用集群,虚拟机作为高可用资源,使用xen的方式运行虚拟机(虚拟机有自己的ip地址,使用内存,cpu使用等各种统计),
万一物理机node1挂了,虚拟机作为高可用服务的高可用资源的话,虚拟机会迁移到node2上,虚拟机不会停,迁移过程中,虚拟机不用停机,就叫实时迁移,,,,,,,,,虚拟机不用停,虚拟机所需要的数据,所监听的端口,所打开的文件,等等,都不会受到影响,可以直接从一个节点迁移到另外一个节点上来,,,,,,,,虚拟机本身要依赖于很多数据,这些数据要放在共享存储上,下图node1,node2,node3是物理机
如下图图一,假设 web 高可用服务,平时用户的访问,都定向到node1上,用户的会话,用户浏览的商品,加入购物车的商品,都在node1的内存当中,万一node1故障,ip地址和web服务迁移到node2上,用户的会话信息没了,所以我们要把会话的信息保存到共享的存储(或共享的服务当中),,,,,,万一我们的服务迁移了,就能够从共享的存储里面读到此前的会话信息,,,,,,,,,,,,,假设用户浏览时,正好服务迁移了,就会404(服务不可得),然后刷新一下,因为服务迁移完成了,又有了,,,,假设我们把会话都保存到memcache这个缓存当中,,,,我们就可以解决问题,,,,,,,但是至少我们的服务会中断一下
web服务(httpd)是无状态的(stateless),用户现在访问,断了没关系,一刷新就有了
如果像ssh这个始终在线连接的服务(使用高可用),就不太好用了,
如下图图二把虚拟机做成高可用,若是ssh服务(虚拟机)所在的节点有问题,,,,,,那么虚拟机(包含ssh连接)都统统移到另外的节点上了,,,(连接都不会断开) 下图图二,node1,node2,node3是物理机,,虚拟化在高可用物理集群当中,任何一个物理机故障,虚拟化只需迁移,不会停止服务的,,,,,,,,几百个物理节点,提供一个高可用的集群,让我们的虚拟机在任意一个节点上平均运行,任何一个物理节点故障了,将这个上面运行的虚拟机平均分配到当前正在运行的其它物理机上去运行,,,这就是云,是iaas云,它提供的就是一个虚拟机的高可用环境,,,所以去用云计算环境,人家就是提供一个虚拟机账号,登录进来,提供该使用什么服务就使用什么服务,这边无论哪个节点坏了,也不会影响虚拟机的使用,也不会掉线的,,,,,,,,虚拟机能够在众多节点之间能够迁移,有个前提,这个虚拟机所依赖的存储设备(虚拟磁盘,里面要保存文件),每个节点都能访问到,,,如下图图三,,,我们要用到大的共享存储, 存储里面放的是各个虚拟机的镜像文件(虚拟磁盘文件),这就需要一个专门的存储设备,所以在云当中,我们通常需要一个核心的用来管理每一个虚拟机的映像文件的存储设备,(虚拟磁盘的存储设备,),,,,,,,,,,,,,,,,,,,,,,,,如下图图三,在线注册申请一个云帐号,申请一个虚拟机以后,它就会使用一段程序,自动的创建一个映像文件,然后启动一个虚拟机进程,并且让虚拟机进程关联到映像文件中来,,,,很多云计算提供商,每当申请一个以后,它会自动装好系统,所以说它提供的虚拟机映像文件里面已经装好了系统(里面已经装好了linux根文件系统,里面可能有或者没有(可能依赖于外面的内核进行启动)内核,,,启动以后,就是根文件系统加载进来,此时连接的就是根文件系统,与内核没有关系了),,,,,,,,,,为了能够让给用户提供的每一个虚拟机立即展开为一个根文件系统,我们需要一个额外的系统,如下图图四,这里面提供有各种操作系统的,事先直接展开后就能够当作虚拟磁盘使用的映像文件,,,,,,,因为每一个用户来注册帐号的时候,ip地址要与其它主机不一样,所以这个额外的映像文件里面是没有ip地址的,它把这些独有的资源统统抽离出来,比如ip地址,mac地址等等,,,,,将来需要展开为linux映像文件的时候,下载这个额外的映像文件,然后展开,展开的同时,通过程序注入一个ip地址,,,,,,,,,vmware的虚拟机克隆之后的虚拟机是动态获得地址的,(所以不是百分百的克隆吧),为什么克隆时,能改掉主机的地址,因为它有一种机制,有一个应用程序(物理主机上的应用程序),能够让映像文件有个api接口,物理主机上的应用程序,通过这个api接口,能够操作映像文件中的某些配置的,,,,,,,,,所以看上去是个虚拟机磁盘,实际上是一个文件,这个文件有个api,通过个api能够操作这个文件里的很多内容(可以直接改的,服务不用启动都能改,直接把ip地址,配置都能改掉的),,,,,,,,,这里映像文件也是一个道理,,,,,,,这就是云,云架构,,,,,,,,在高可用集群中的节点上,能够运行虚拟服务,然后进行配置好,管理这些虚拟服务,,,,,,,,,,,,比如我们有很多节点,很多虚拟机,虚拟机应该平均运行在这些节点上的,无非是提供一个调度策略,尽可能让虚拟机平均运行在各个节点上,再提供一些额外的管理功能,,,,,,,,所以了解云环境,还得先了解平时所说的虚拟化,高可用集群,共享存储,这些概念,
图一
图二
图三
图四
[root@node1 ~]#
[root@node1 ~]# clusvcadm -l #锁定本地资源组管理器
Resource groups locked
[root@node1 ~]#
[root@node1 ~]# clusvcadm -u #解锁本地资源组管理器
Resource groups unlocked
[root@node1 ~]#
资源的名称或服务的名称都称为资源组
[root@node1 ~]# clusvcadm -r webservice -m node2.magedu.com #重新定位(或迁移)资源组(资源或服务都称为组)到node2上
Trying to relocate service:webservice to node2.magedu.com...Success
service:webservice is now running on node2.magedu.com
[root@node1 ~]#
http://192.168.0.50/index.html 在node2上了
[root@node1 ~]# clusvcadm -r webservice #自动选一个节点(此时碰巧是node3),进行重新定位
Trying to relocate service:webservice...Success
service:webservice is now running on node3.magedu.com
[root@node1 ~]#
[root@node1 ~]# cman_tool nodes #显示当前集群里的所有节点
Node Sts Inc Joined Name
1 M 84 2021-01-21 12:24:50 node1.magedu.com
2 M 88 2021-01-21 12:24:57 node2.magedu.com
3 M 92 2021-01-21 12:25:00 node3.magedu.com
[root@node1 ~]#
[root@node1 ~]# clustat #也能显示当前集群里的所有节点 还可以显示服务的
Cluster Status for tcluster @ Thu Jan 21 12:27:52 2021
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1.magedu.com 1 Online, Local, rgmanager
node2.magedu.com 2 Online
node3.magedu.com 3 Online
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:webservice node1.magedu.com started
[root@node1 ~]#
[root@node1 ~]# ccs_tool -h #更多的是用来实现管理配置文件的
Usage::
ccs_tool [options] <command>
Options:
-h Print this usage and exit.
-V Print version information and exit.
Commands:
help Print this usage and exit.
update <xml file> Tells ccsd to upgrade to new config file.
upgrade <location> Upgrade old CCS format to new xml format.
addnode <node> Add a node #加一个节点
delnode <node> Delete a node #减一个节点
lsnode List nodes
lsfence List fence devices
addfence <fencedev> Add a new fence device #加一个fence设备
delfence <fencedev> Delete a fence device #减一个fence设备
create Create a skeleton config file #创建一个集群????创建一个骨架配置文件
addnodeids Assign node ID numbers to all nodes
[root@node1 ~]#
rhcs中使用共享存储,使用Filesystem,
假设web服务无论运行在哪个节点上,提供的网页是一样的,就要用到共享存储
DAS 支持多initiator的scsi总线 块级别
SAN 设备 块级别
NAS 文件级别
我们以NFS为例来演示怎么能够实现在rhcs当中也使用文件系统服务的,以跳板机192.168.0.100当作NFS服务器
在跳板机 192.168.0.100 上
[root@steppingstone ~]# mkdir -pv /web/htdocs #创建目录
mkdir: 已创建目录 “/web”
mkdir: 已创建目录 “/web/htdocs”
[root@steppingstone ~]#
[root@steppingstone ~]# vim /etc/exports #只读,共享出去
/web/htdocs 192.168.0.0/24(ro)
[root@steppingstone ~]# service nfs start #启动nfs服务器
启动 NFS 服务: [确定]
关掉 NFS 配额: [确定]
启动 NFS 守护进程: [确定]
启动 NFS mountd: [确定]
Stopping RPC idmapd: [确定]
正在启动 RPC idmapd: [确定]
[root@steppingstone ~]#
[root@steppingstone ~]# chkconfig nfs on #开机自动启动
[root@steppingstone ~]# showmount -e 192.168.0.100 #显示本机 (192.168.0.100) 导出的nfs文件列表
Export list for 192.168.0.100:
/web/htdocs 192.168.0.0/24
[root@steppingstone ~]#
不能让几个节点自动挂载 192.168.0.100 的 /web/htdocs,我们得让集群节点切换到哪个节点,就哪个节点挂载,挂载得与 webservice在一起
[root@steppingstone ~]# cd /web/htdocs/ #共享文件夹提供个页面吧
[root@steppingstone htdocs]# vim index.html
nfs server
下面几图是增加资源
下图在点确认之前,要保证 集群中的各个节点的 # getenforce 为 Permissive 如果不是,就 # setenforce 0 设置一下
因为假如集群中有节点 # getenforce 的值为 Enforcing,那么挂载nfs之后,挂载过来的内容是没办法被直接访问的,因为没有权限,因为selinux会把它阻止掉的
在第一个节点 192.168.0.45 上
[root@node1 ~]# clustat
Cluster Status for tcluster @ Thu Jan 21 15:40:58 2021
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1.magedu.com 1 Online, Local, rgmanager
node2.magedu.com 2 Online
node3.magedu.com 3 Online
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:webservice node1.magedu.com started
[root@node1 ~]#
把 服务 webservice 迁移到 node2 上
[root@node1 ~]# clusvcadm -r webservice -m node2.magedu.com #为什么迁移失败呢 (后来发现应该是service rgmanager 并没有在所有的节点上启动,,,,,,,,在所有的节点上 都执行下 # service rgmanager restart 吧)
Trying to relocate service:webservice to node2.magedu.com...Failed; service running on original owner
[root@node1 ~]#
[root@node1 ~]# tail /var/log/messages #看日志
Jan 21 15:44:19 node1 clurgmgrd[5619]: <notice> Starting stopped service service:webservice
Jan 21 15:44:21 node1 avahi-daemon[4476]: Registering new address record for 192.168.0.50 on eth0.
Jan 21 15:44:22 node1 clurgmgrd[5619]: <notice> Service service:webservice started
Jan 21 15:45:34 node1 clurgmgrd[5619]: <notice> Stopping service service:webservice
Jan 21 15:45:34 node1 avahi-daemon[4476]: Withdrawing address record for 192.168.0.50 on eth0.
Jan 21 15:45:44 node1 clurgmgrd[5619]: <notice> Service service:webservice is stopped
Jan 21 15:45:44 node1 clurgmgrd[5619]: <warning> #70: Failed to relocate service:webservice; restarting locally
Jan 21 15:45:44 node1 clurgmgrd[5619]: <notice> Starting stopped service service:webservice
Jan 21 15:45:46 node1 avahi-daemon[4476]: Registering new address record for 192.168.0.50 on eth0.
Jan 21 15:45:47 node1 clurgmgrd[5619]: <notice> Service service:webservice started
[root@node1 ~]#
[root@node1 ~]# clustat # webservice 还在 node1 上
Cluster Status for tcluster @ Thu Jan 21 15:47:20 2021
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1.magedu.com 1 Online, Local, rgmanager
node2.magedu.com 2 Online
node3.magedu.com 3 Online
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:webservice node1.magedu.com started
[root@node1 ~]#
[root@node1 ~]# clusvcadm -r webservice -m node2.magedu.com #迁移到 node2 吧
Trying to relocate service:webservice to node2.magedu.com...Success
service:webservice is now running on node2.magedu.com
[root@node1 ~]#
[root@node1 ~]# clusvcadm -r webservice -m node1.magedu.com #再迁移到node1
Trying to relocate service:webservice to node1.magedu.com...Success
service:webservice is now running on node1.magedu.com
[root@node1 ~]#
[root@node1 ~]# mount # 好像没有挂上来
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
/dev/mapper/myvg-mydata2 on /mydata2 type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
none on /sys/kernel/config type configfs (rw)
[root@node1 ~]#
http://192.168.0.50/index.html #确认了,没挂上来
哦 没有 send to cluster ,,,做一下吧
[root@node1 ~]# clusvcadm -r webservice -m node2.magedu.com #我的己经迁移到node2上了
Trying to relocate service:webservice to node2.magedu.com...Success
service:webservice is now running on node2.magedu.com
[root@node1 ~]#
马哥迁移到node2 失败
rhcs的机制好像没有corosync好用
http://192.168.0.50/index.html 我能访问,马哥的不能访问
在第二个节点 192.168.0.55 上 可以看到挂载了nfs
[root@node2 a.org]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
/dev/mapper/myvg-mydata2 on /mydata2 type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
none on /sys/kernel/config type configfs (rw)
192.168.0.100:/web/htdocs on /www/a.org type nfs (rw,sync,soft,noac,addr=192.168.0.100)
[root@node2 a.org]#
# 马哥的 webservice 停了
马哥 重启 webservice ( # clusvcadm -R webservice ) 但是启动不起来
马哥手动挂载试试 在 node3 上
# mount -t nfs 172.16.100.100:/web/htdocs /var/www/html/ 真挂不上来
马哥尝试解决问题 在跳板机上
马哥依然挂不上来 在 node3上
马哥再次尝试解决问题 在跳板机上
马哥终于可以挂载上了
马哥卸掉它吧
马哥 重启 webservice ( # clusvcadm -R webservice ) 现在可以启动了
[root@node1 ~]# clustat
Cluster Status for tcluster @ Thu Jan 21 16:32:19 2021
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1.magedu.com 1 Online, Local, rgmanager
node2.magedu.com 2 Online, rgmanager
node3.magedu.com 3 Online, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:webservice node2.magedu.com started # 看服务运行在 node2 上了
[root@node1 ~]#
此时马哥正常了
[root@node1 ~]# clustat
Cluster Status for tcluster @ Thu Jan 21 16:32:19 2021
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1.magedu.com 1 Online, Local, rgmanager
node2.magedu.com 2 Online, rgmanager
node3.magedu.com 3 Online, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:webservice node2.magedu.com started
[root@node1 ~]#
[root@node1 ~]#
[root@node1 ~]# clusvcadm -r webservice -m node1.magedu.com #迁移到node1上,迁移失败
Trying to relocate service:webservice to node1.magedu.com...Failure
[root@node1 ~]#
[root@node1 ~]# clustat
Cluster Status for tcluster @ Thu Jan 21 16:35:09 2021
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1.magedu.com 1 Online, Local, rgmanager
node2.magedu.com 2 Online, rgmanager
node3.magedu.com 3 Online, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:webservice (node2.magedu.com) failed #服务停掉了
[root@node1 ~]# clusvcadm -R webservice
Local machine trying to restart service:webservice...Failure #重启服务失败
[root@node1 ~]#
[root@node1 ~]# tail /var/log/messages #看日志
Jan 21 16:06:41 node1 clurgmgrd[25456]: <notice> Starting stopped service service:webservice
Jan 21 16:06:43 node1 avahi-daemon[4476]: Registering new address record for 192.168.0.50 on eth0.
Jan 21 16:06:44 node1 setroubleshoot: SELinux is preventing httpd from loading /usr/local/apache/modules/libphp5.so which requires text relocation. For complete SELinux messages. run sealert -l 5a2446df-9f1f-45c1-8562-85eb9214eff1
Jan 21 16:06:44 node1 clurgmgrd[25456]: <notice> Service service:webservice started
Jan 21 16:09:52 node1 ccsd[5693]: Update of cluster.conf complete (version 12 -> 13).
Jan 21 16:10:00 node1 clurgmgrd[25456]: <notice> Reconfiguring
Jan 21 16:11:22 node1 clurgmgrd[25456]: <notice> Stopping service service:webservice
Jan 21 16:11:23 node1 avahi-daemon[4476]: Withdrawing address record for 192.168.0.50 on eth0.
Jan 21 16:11:33 node1 clurgmgrd[25456]: <notice> Service service:webservice is stopped
Jan 21 16:35:03 node1 clurgmgrd[25456]: <err> #43: Service service:webservice has failed; can not start.
[root@node1 ~]#
三个节点上 rgmanager 和 cman 都能正常运行
[root@node1 ~]# service rgmanager status
clurgmgrd (pid 25455) 正在运行...
[root@node1 ~]# service cman status
cman is running.
[root@node1 ~]#
三个节点上都重启下 rgmanager 和 cman
[root@node1 ~]# service rgmanager restart
[root@node1 ~]# service cman restart
在第一个节点 node1.magedu.com 上
[root@node1 ~]# clustat
Cluster Status for tcluster @ Thu Jan 21 16:43:25 2021
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1.magedu.com 1 Online, Local, rgmanager
node2.magedu.com 2 Online, rgmanager
node3.magedu.com 3 Online, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:webservice node3.magedu.com started
[root@node1 ~]#
[root@node1 ~]# clusvcadm -r webservice -m node1.magedu.com #手动迁移 webservice 至 node1
Trying to relocate service:webservice to node1.magedu.com...Success
service:webservice is now running on node1.magedu.com
[root@node1 ~]#
http://192.168.0.50/index.html 正常
[root@node1 ~]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
/dev/mapper/myvg-mydata2 on /mydata2 type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
none on /sys/kernel/config type configfs (rw)
192.168.0.100:/web/htdocs on /www/a.org type nfs (rw,sync,soft,noac,addr=192.168.0.100) #看到nfs己挂载
[root@node1 ~]#
停掉 webservice 服务(或者说 组 )
[root@node1 ~]# clusvcadm -s webservice #把服务停掉
Local machine stopping service:webservice...Success
[root@node1 ~]#
删掉 webservice
删服务
删资源
当然我们也可以直接删配置文件 /etc/cluster/cluster.conf
send to cluster 把空的配置发送到集群中的每个节点
在三个节点上停掉 rgmananger 和 cman 服务吧
# service rgmanager stop # service cman stop
这里 alias ha='for I in {1..3}; do'
现在删掉三个节点上的主配置文件
在跳板机 192.168.0.100 上
[root@steppingstone ~]# alias ha='for I in {1..3}; do'
[root@steppingstone ~]#
[root@steppingstone ~]# ha ssh node$I 'rm -f /etc/cluster/cluster.conf'; done;
[root@steppingstone ~]#
在第一个节点 192.168.0.45上 (我们看看 有没有删掉/etc/cluster/cluster.conf)
[root@node1 ~]# ls /etc/cluster/ # 为什么有bak,因为我们每一次在其它主机上修改并同步过来以后,它会把此前的版本会保存一份的
cluster.conf.bak.1 cluster.conf.bak.2 cluster.conf.bak.3
[root@node1 ~]#
我们把这些bak备份也删掉
在跳板机 192.168.0.100 上
[root@steppingstone ~]# ha ssh node$I 'rm -f /etc/cluster/*'; done;
[root@steppingstone ~]#
在第一个节点 192.168.0.45上 (我们看看 有没有删掉/etc/cluster/ 下面的所有文件)
[root@node1 ~]# ls /etc/cluster/ #没有了
[root@node1 ~]#
使用命令的方式配置rhcs让其工作起来,使用命令无法配置资源和服务,我们只是让集群能够启动起来
让集群能够启动起来要配置:1)集群名称 2)节点 3)fence设备
[root@node1 ~]# ccs_tool -h
Usage::
ccs_tool [options] <command>
Options:
-h Print this usage and exit.
-V Print version information and exit.
Commands:
help Print this usage and exit.
update <xml file> Tells ccsd to upgrade to new config file.
upgrade <location> Upgrade old CCS format to new xml format.
addnode <node> Add a node
delnode <node> Delete a node
lsnode List nodes
lsfence List fence devices
addfence <fencedev> Add a new fence device
delfence <fencedev> Delete a fence device
create Create a skeleton config file #为集群创建一个配置文件, 后面能跟个集群名称
#它是创建一个带配置文件的集群
addnodeids Assign node ID numbers to all nodes
在第一个节点 192.168.0.45 上
[root@node1 ~]# ccs_tool create tcluster # tcluster 是集群名称(马哥的意思是说 test cluster )
[root@node1 ~]#
[root@node1 ~]# cd /etc/cluster/ #看到了配置文件
[root@node1 cluster]# ls
cluster.conf
[root@node1 cluster]# cat cluster.conf
<?xml version="1.0"?>
<cluster name="tcluster" config_version="1"> #集群名称 tcluster
<clusternodes/>
<fencedevices/>
<rm>
<failoverdomains/>
<resources/>
</rm>
</cluster>
[root@node1 cluster]#
集群要启动的话,要有fence设备和几个节点
[root@node1 cluster]# ccs_tool -h
Usage::
ccs_tool [options] <command>
Options:
-h Print this usage and exit.
-V Print version information and exit.
Commands:
help Print this usage and exit.
update <xml file> Tells ccsd to upgrade to new config file.
upgrade <location> Upgrade old CCS format to new xml format.
addnode <node> Add a node #添加节点
delnode <node> Delete a node #删除节点
lsnode List nodes #显示(列出)节点
lsfence List fence devices #显示(列出)fence设备
addfence <fencedev> Add a new fence device #添加fence设备
delfence <fencedev> Delete a fence device #删除fence设备
create Create a skeleton config file
addnodeids Assign node ID numbers to all nodes
[root@node1 cluster]#
[root@node1 cluster]# ccs_tool lsfence #没看到fence设备
Name Agent
[root@node1 cluster]#
[root@node1 cluster]# ccs_tool addfence -h #加上 -h 看到子命令addfence的命令使用格式
Usage: ccs_tool addfence [options] <name> <agent> [param=value]
<name>是必须要指定的内容,fence设备的名称
<agent>是必须要指定的内容,fence代理是什么
[param=value] 这个fence代理的参数
-c --configfile Name of configuration file (/etc/cluster/cluster.conf) #这些-开头的属于options 选项吧
-o --outputfile Name of output file (defaults to same as --configfile)
-C --no_ccs Don't tell CCSD about this change
default: run "ccs_tool update" if file is updated in place)
-F --force_ccs Force "ccs_tool upgrade" even if input & output files differ
-h --help Display this help text
[root@node1 cluster]#
[root@node1 cluster]# ccs_tool addfence meatware fence_munual # meatware 是name fence_munual ( 应该是fence_manual ) 是代理,,,,,,,,好像是代理名称不对,,,,,,,下面好像报错
running ccs_tool update...
Unable to connect to the CCS daemon: Connection refused
[root@node1 cluster]#
[root@node1 cluster]# fence
fence_ack_manual fence_drac5 fence_node fence_vixel
fence_apc fence_egenera fence_rhevm fence_vmware
fence_apc_snmp fence_ifmib fence_rps10 fence_vmware_helper
fence_bladecenter fence_ilo fence_rsa fence_vmware_soap
fence_brocade fence_ilo_mp fence_rsb fence_wti
fence_bullpap fence_ipdu fence_sanbox2 fence_xvm
fence_cisco_mds fence_ipmilan fence_scsi fence_xvmd
fence_cisco_ucs fence_lpar fence_scsi_test
fenced fence_manual # 应该是 fence_manual fence_tool
fence_drac fence_mcdata fence_virsh
[root@node1 cluster]# fence
[root@node1 cluster]# ccs_tool delfence meatware #删掉刚刚添加的fence设备吧
running ccs_tool update...
Unable to connect to the CCS daemon: Connection refused
[root@node1 cluster]#
[root@node1 cluster]# ccs_tool addfence meatware fence_manual #出问题了,怎么办?
running ccs_tool update...
Unable to connect to the CCS daemon: Connection refused
[root@node1 cluster]#
[root@node1 cluster]# ccs_tool lsfence #看到了添加了fence设备
Name Agent
meatware fence_manual
[root@node1 cluster]#
[root@node1 cluster]# cat cluster.conf # 配置文件里面也看到了 fence 设备
<?xml version="1.0"?>
<cluster name="tcluster" config_version="4">
<clusternodes/>
<fencedevices><fencedevice name="meatware" agent="fence_manual"/></fencedevices>
<rm>
<failoverdomains/>
<resources/>
</rm>
</cluster>
[root@node1 cluster]#
[root@node1 cluster]# ccs_tool addnode -h #addnode 的用法
Usage: ccs_tool addnode [options] <nodename> [<fencearg>=<value>]...
# <nodename> 表示节点名称吧
-n --nodeid Nodeid (required) # 这里-开头的,表示选项吧
-v --votes Number of votes for this node (default 1) # 表示这个节点所具有的票数
-a --altname Alternative name/interface for multihomed hosts
-f --fence_type Type of fencing to use #表示使用哪个fence设备
-c --configfile Name of configuration file (/etc/cluster/cluster.conf)
-o --outputfile Name of output file (defaults to same as --configfile)
-C --no_ccs Don't tell CCSD about this change
default: run "ccs_tool update" if file is updated in place)
-F --force_ccs Force "ccs_tool upgrade" even if input & output files differ
-h --help Display this help text
Examples:
Add a new node to default configuration file:
ccs_tool addnode -n 1 -f manual ipaddr=newnode
# -n 1 表示 node id 为 1, 在当前集群中唯一的 node id, node 编号
# -f manual 表示使用哪一个fence设备,
# ipaddr=newnode 是???节点名称
Add a new node and dump config file to stdout rather than save it
ccs_tool addnode -n 2 -f apc -o- newnode.temp.net port=1
[root@node1 cluster]#
[root@node1 ~]# ccs_tool addnode -v 1 -n 1 -f meatware node1.magedu.com #增加节点node1
running ccs_tool update...
Unable to connect to the CCS daemon: Connection refused
[root@node1 ~]#
[root@node1 ~]# ccs_tool lsnode #列出节点
Cluster name: tcluster, config_version: 5
Nodename Votes Nodeid Fencetype
node1.magedu.com 1 1 meatware
[root@node1 ~]#
[root@node1 ~]# ccs_tool addnode -v 1 -n 2 -f meatware node2.magedu.com # 增加节点node2
running ccs_tool update...
Unable to connect to the CCS daemon: Connection refused
[root@node1 ~]# ccs_tool addnode -v 1 -n 3 -f meatware node3.magedu.com # 增加节点node3
running ccs_tool update...
Unable to connect to the CCS daemon: Connection refused
[root@node1 ~]#
[root@node1 ~]# ccs_tool lsnode
Cluster name: tcluster, config_version: 7
Nodename Votes Nodeid Fencetype
node1.magedu.com 1 1 meatware #表示使用的fence设备是 meatware
node2.magedu.com 1 2 meatware
node3.magedu.com 1 3 meatware
[root@node1 ~]#
三个节点上都 启动 cman
[root@node1 ~]# service cman start
三个节点上都 启动 rgmanager
[root@node1 ~]# service rgmanager start
后面的其它配置,能编辑配置文件,直接编辑就可以了,编辑完以后,使用ccs同步一下(我这边操作好像是自动同步的吧)
使用命令行的方式也可以启动集群?????
将来用到集群文件系统的话,不需要定义别的资源,集群文件系统也要依赖于ha服务的,,,,,,,,,,,
此时集群文件系统完全在命令行下就可以配置,不用启动窗口界面,只要不需要配置额外其它的资源和服务,都不需要图形界面了
红帽没有提供一个专门的工具,能够让我们直接去编辑服务的,只能直接去修改配置文件cluster.conf
下面讲iscsi,以及如何把iscsi配置为集群文件系统....
摸索一下luci/ricci配置高可用集群,如何安装,启用,能够去访问,可能还要做初始化的配置,