欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 40_04 _Linux集群系列之十八——RHCS集群配置 有大用

fabric: 是一个命令分发工具,是一个python程序,有个命令叫fab,可以方便的使用-H(host)指定主机以后,基于多线程的方式分布式的将命令在远程主机上执行, 也是基于ssh的方式进行的,,,跟我们自己使用ssh差不多,但是比我们在命令行方式下使用 bash shell 的命令机制要高效得多,

image.png


https://docs.fabfile.org/en/2.5/

https://docs.fabfile.org/en/1.6/


官方的页面文档 fabric ,,,,,,,,,,,, python的程序

image.png


马哥在红帽 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, 我们只需要在其中一个节点上安装这个工具就可以了,不需要每个节点都安装,,,当然将来有可能在任意一个节点上执行的话,每个节点都安装也可以


image.png


image.png


cman的集群节点一般是至少需要3个,2个的话需要配置仲裁磁盘( 或者说是表决磁盘 quorum  disk (qdisk) )才可以使用,配置仲裁磁盘是比较麻烦的

image.png

多个节点的话,偶数节点,也很难评判谁是胜出的一方,多个节点的时候,刚好从中间分裂的可能性虽然不大,但是偶尔有,有的时候也可能用到表决磁盘(或者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源

image.png


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有冲突

image.png


#在 192.168.0.45  192.168.0.55  192.168.0.65  卸载掉 corosynclib corosynclib 看看

[root@node3 ~]# yum remove corosync corosynclib     

image.png


[root@192 ~]# ha ssh node$I 'yum -y install cman rgmanager system-config-cluster'; done

image.png

image.png

image.png

image.png

由上面的截图,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 查看当前集群状态的

image.png


[root@node1 ~]# man ccs_tool    #用来在线更新集群的配置文件,而且能够立即生效的工具

image.png


rhcs集群服务启动的前提

1) RHCS: 的集群,为了区别当前节点到底加了哪个集群,(同一个物理网络中,可能有多个集群),每一个集群都有全局唯一的集群名称(集群ID)(并且必须有名称以后,cman服务才能够启动起来),

2) 至少有一个fence设备,如果没有的话,万一某个设备故障的话,就没法有效的隔离掉此设备了,

3) 至少应该有三个节点(两个节点也成,但是要配置表决磁盘qdisk,,,事实上偶数个节点,每个节点都是一票的时候,也需要表决磁盘(仲裁磁盘)) 四个,六个,八个节点,,,虽然可能产生集群分裂,但是这种可能性很小,(两个节点一分裂,一定是各占一半,四个节点分裂的时候,刚好这边两个,那边两个的可能性很小,八个节点,这边四个,那边四个的可能性更小了),,,,,因此在其它偶数节点上,我们的表决磁盘不配置的这种场景也是能接受的,如果是奇数个节点就不用配置了,


可以使用system-config-cluster去配置,也可以使用ccs_tool去配置


如下图图一,打开一个类似于 heartbeat gui一样界面的一个窗口工具,它说没有配置文件,是不是需要指定一个配置文件,这个程序都是在本机操作的,所以它不需要你登录,当你点保存,它会自动ccs服务,将它同步到其它各节点上去,它不需要非得去联系DC的,cman当中是没有DC的概念的,

图一

image.png


image.png


在第一个节点 192.168.0.45 上

我打开 Xshell

image.png


[root@node1 ~]# system-config-cluster & 

image.png


如下图,它说没有配置文件,/etc/cluster/cluster.conf,点击 create new configuration 就创建了一个配置文件,


image.png

给集群起个名

我们这里,叫 tcluster 吧

集群各节点之间是通过多播的方式传递心跳信息的,指定一个多播地址(如果不指,生成一个随机的地址)

要不要使用仲裁磁盘,如果用的话,内部多长时间尝试写一次,如下图的interval

image.png


如下图 

Cluster Nodes,集群当中有哪些节点

Fence Device 有几个fence设备

Failover Domain 故障转移域是什么

Resources 有什么资源

Services 有什么服务

image.png


如下图,把节点加入到集群中来

image.png


如下图,节点名称叫什么,一定是Node Name,而且当前主机上要能够解析那个节点,

image.png

节点名称 node1.magedu.com    要与 # uname -n 保持一致

Quorum Votes: 应该投几票,默认是 1

image.png

同理再加  node2.magedu.com     node3.magedu.com 

结果如下图

image.png


还应该至少有一个fence设备,添加一个fence设备,fence代理,,, apc power device 电源交换机,我们没有,

我们使用肉键方式进行fence,,,,,,manual fencing (手动 fence) 名称 我们叫 meatware (肉件) (fence设备应该有id号,这里标识为meatware )


image.png


image.png

至此配置搞定

资源要想工作起来,要等到服务启动之后才配置

点 文件=>保存
image.png

这里点确定

image.png

这里继续点确定

image.png

点关闭,配置结束

image.png


看一下配置文件

在第一个节点  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服务把会配置文件传递给另外两个节点,而后这个启动才能算是真正完成了

image.png

马哥 启动 node2

image.png

马哥 启动 node3

image.png

马哥这里并没有使用for循环的方式去执行,因为这里不允许,因为第一个主机执行之后,第二个(第三个)主机才能启动,,,第一个主机要等到第二个(第三个)主机启动后才能启动的;;;;所以不能使用for循环的方式,

马哥 node1 现在启动成功了   node2 现在也启动成功了(不截图了)   node3 现在也启动成功了 (不截图了)  

image.png


我为什么报错呢,看看 /etc/hosts吧

在第一个节点 192.168.0.45  上 好像 node1.magedu.com 解析的是 127.0.0.1 

image.png

[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 上 循环安装

image.png

我们要给三个节点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 图形界面

image.png


[root@node1 ~]# system-config-cluster &

image.png

image.png


创建资源

image.png


这个资源类型,不叫资源代理了

Sybase

SAP Database

Apache Server

File System

IP Address

MySQL Server

NFS Mount # Mount端就是服务器端????好像不是??

NFS Client # NFS客户端

image.png


image.png

此前都是使用服务脚本直接启动的,所以我们使用Script ( 以前称为 lsb 的资源代理类型都被称为script )

Name: 资源名称

File (with path): 可执行脚本的路径(就是 /etc/rc.d/init.d/ 上的httpd吧)

image.png


一)先定义VIP地址(虚拟IP地址)  192.168.0.50  Monitor Link:监控链接? 

Subnet: 24 (掩码长度)

image.png


image.png


二)定义httpd服务

image.png


image.png


资源是没法启动的,这与corosync不一样,,,,,,,资源只能定义成服务,能启动的只能是服务

三)定义服务

image.png


image.png


如下图: Failover Domain 故障转移域,定义它,然后这个web服务只能在哪个故障转移域内转移

Autostart This Service     集群启动的时候,资源配置好以后,它可以自动启动这个服务的

restart 出现故障时,重启)      relocate,重新找一个节点来运行(转移到Failover Domain内的优先级比较高的那个节点上)        disable禁用        (最好优先restart,不成的话再relocate,再disable)

image.png


image.png

image.png


image.png


如上图,资源配置上去了,


下图,把所有上面的配置同步到集群其它节点


(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 , 应该就不会报错了

image.png


下图,当前配置己经传播到整个集群了

image.png



在第一个节点上 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 ~]#

马哥这边看到服务了

image.png

马哥通过#  ip addr show 可以看到vip 

image.png


使用 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,如下图,再把配置发送到集群每一个节点

image.png

[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   能正常访问了

image.png



[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来传递心跳信息的

image.png


[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是物理机


image.png


如下图图一,假设  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地址,配置都能改掉的),,,,,,,,,这里映像文件也是一个道理,,,,,,,这就是云,云架构,,,,,,,,在高可用集群中的节点上,能够运行虚拟服务,然后进行配置好,管理这些虚拟服务,,,,,,,,,,,,比如我们有很多节点,很多虚拟机,虚拟机应该平均运行在这些节点上的,无非是提供一个调度策略,尽可能让虚拟机平均运行在各个节点上,再提供一些额外的管理功能,,,,,,,,所以了解云环境,还得先了解平时所说的虚拟化,高可用集群,共享存储,这些概念,

图一

image.png

图二

image.png


图三

image.png

图四

image.png

[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上了

image.png


[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


下面几图是增加资源

image.png

下图在点确认之前,要保证 集群中的各个节点的 # getenforce 为 Permissive 如果不是,就 # setenforce 0  设置一下

因为假如集群中有节点     # getenforce 的值为 Enforcing,那么挂载nfs之后,挂载过来的内容是没办法被直接访问的,因为没有权限,因为selinux会把它阻止掉的

image.png

image.png



在第一个节点  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         #确认了,没挂上来

image.png


哦 没有 send to cluster ,,,做一下吧

image.png


[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 失败

image.png

rhcs的机制好像没有corosync好用


http://192.168.0.50/index.html         我能访问,马哥的不能访问          

image.png


在第二个节点 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 停了

image.png

马哥 重启 webservice ( # clusvcadm -R webservice ) 但是启动不起来

image.png


马哥手动挂载试试  在 node3 上

 #  mount -t nfs 172.16.100.100:/web/htdocs /var/www/html/  真挂不上来

image.png

马哥尝试解决问题  在跳板机上

image.png

image.png

image.png

马哥依然挂不上来 在 node3上

image.png

马哥再次尝试解决问题  在跳板机上

image.png

image.png

image.png

马哥终于可以挂载上了

image.png

马哥卸掉它吧

image.png


马哥 重启 webservice ( # clusvcadm -R webservice )  现在可以启动了

image.png




[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 ~]#


此时马哥正常了image.png



[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       正常

image.png



[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

    删服务

image.png

    删资源

image.png

image.png


当然我们也可以直接删配置文件 /etc/cluster/cluster.conf


send to cluster 把空的配置发送到集群中的每个节点

image.png


在三个节点上停掉 rgmananger 和 cman 服务吧

# service rgmanager stop         # service cman stop




这里  alias ha='for I in {1..3}; do'        

image.png


现在删掉三个节点上的主配置文件

在跳板机 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配置高可用集群,如何安装,启用,能够去访问,可能还要做初始化的配置,

image.png

普通分类: