gcware对集群进行管理,可能出现的错误包括:gcware服务无法启动或停止操作、执行gcadmin集群命令时节点出现offline状态或者数据状态出现非0(locked状态)等,这些问题都会对集群造成很大的影响,发现问题需要及时处理,下面介绍相关的错误处理方法。
1.
gcware启动失败
现象:
#
service gcware start
Starting
GCWARE (gcwexec): [FAILED]
原因:
分析产生此问题的原因可能是下面3 种情况:
(1).corosync的配置文件丢失
(2).corosync的配置文件错误
(3).corosync的authkey
丢失
诊断方法:
(1).此时单独启动corosync服务,也发现启动失败。
#
service corosync start
Starting
Corosync Cluster Engine (corosync): [FAILED]
(2).查看corosync.log
日志文件,并没有发现错误原因。
(3).使用corosync
-f 命令诊断错误信息,根据错误信息排除错误。
解决方法:
(1).
corosync的配置文件丢失
#
corosync -f
corosync
[MAIN ] Corosync Cluster Engine ('1.4.1'): started and
ready
to provide service.
corosync
[MAIN ] Corosync built-in features: nss dbus rdma snmp
corosync
[MAIN ] Can't read file /etc/corosync/corosync.conf
reason
= (No such file or directory)
从错误信息得知是corosync
的配置文件corosync.conf
不存在造成的。
查看/etc/corosync/corosync.conf
文件是否存在,如果不存在,则根据/etc/corosync/corosync.conf.example
文件设置/etc/corosync/corosync.conf
文件。
(2). corosync的配置文件错误
#
corosync -f
Successfully
read main configuration file
'/etc/corosync/corosync.conf'.
parse
error in config: This totem parser can only parse version 2 configurations.
Corosync
Cluster Engine exiting with status 8 at main.c:1708.
从上面错误信息得知是corosync的配置文件corosync.conf存在配置内容错误,解决方法跟上面一样,根据/etc/corosync/corosync.conf.example例子文件设置/etc/corosync/corosync.conf文件。
(3).
corosync 的authkey 丢失
#
corosync -f
Successfully
read main configuration file
'/etc/corosync/corosync.conf'.
Could
not open /etc/corosync/authkey: No such file or directory
Corosync
Cluster Engine exiting with status 8 at main.c:1702.
如果/etc/corosync/corosync.conf文件中secauth
设置为on,但是/etc/corosync/authkey
文件不存在,这样也会造成gcware
启动失败。解决方法就是将其他节点上的/etc/corosync/authkey
拷贝过来,并且各节点上此文件保持一致,然后重新执行
service gcware start。
2.
gcware无法关闭
现象:
使用service
gcware stop命令停止集群操作时失败。
原因:
当gcware服务退出时,要等待gclusterd和gnoded两个服务进程退出,gcware
通过向这两个进程发送信号,并循环检查gclusterd
和gnoded两个进程是否已经退出。由于gclusterd和gnoded在某些情况下,即使接收到结束运行的信号,也不会终止,因此会造成gcware在退出时的长时间等待。
解决:
(1).手工kill 相关进程
手工停止corosync进程,这样有可能产生gbased和gclusterd的僵尸进程,在下一次service
gcware start的时候僵尸进程会被自动删除。
# ps
-ef|grep corosync
root
8790 1 0 13:41 ? 00:00:00 corosync
root
8841 8667 0 13:46 pts/0 00:00:00 grep corosync
#
kill -9 8790
(2).服务器执行reboot
命令重启。
#
reboot
3.
gcadmin 显示节点状态不一致
现象:
在不同节点上执行gcadmin命令,显示节点状态不一致。
原因:
造成这一现象,通常是由于意外打开了防火墙造成的。
解决方法:
确认显示Offline
状态节点的防火墙已关闭。
4.
gcadmin 显示其它节点Offline
gcadmin 显示其它节点是offline状态,例如:
+==============================================================
|node1 执行gcadmin
GCLUSTER INFORMATION |
+==============================================================
+-----+----------+----------------+--------+--------+---------+
|rowid| nodename | IpAddress | sgname |
dpname | gcware |
+-----+----------+----------------+--------+--------+---------+
| 1 | node1 | 192.168.100.101| sg01 | n1 |
Online |
+-----+----------+----------------+--------+--------+---------+
| 2 | node2 | 192.168.100.102| sg01 | n2 |
Offline |
+-----+----------+----------------+--------+--------+---------+
+=========================================================+
| GCLUSTER INFORMATION |
+=========================================================+
+---------+----------+------------+-----------+-----------+
| gnode | gcluster | syncserver | datastate |
nodestate |
+---------+----------+------------+-----------+-----------+
| OPEN | OPEN | OPEN | [0] | [0] |
+---------+----------+------------+-----------+-----------+
| OPEN | OPEN | OPEN | [0] | [0] |
+---------+----------+------------+-----------+-----------+
+==============================================================
|node2 执行gcadmin
GCLUSTER INFORMATION |
+==============================================================
+-----+----------+----------------+--------+--------+---------+
|rowid| nodename | IpAddress | sgname |
dpname | gcware |
+-----+----------+----------------+--------+--------+---------+
| 1 | node1 | 192.168.100.101| sg01 | n1 |
Offline |
+-----+----------+----------------+--------+--------+---------+
| 2 | node2 | 192.168.100.102| sg01 | n2 |
Online |
+-----+----------+----------------+--------+--------+---------+
+=========================================================+
| GCLUSTER INFORMATION |
+=========================================================+
+---------+----------+------------+-----------+-----------+
| gnode | gcluster | syncserver | datastate |
nodestate |
+---------+----------+------------+-----------+-----------+
| OPEN | OPEN | OPEN | [0] | [0] |
+---------+----------+------------+-----------+-----------+
| OPEN | OPEN | OPEN | [0] | [0] |
+---------+----------+------------+-----------+-----------+
解决方法:
查看配置文件corosync.conf中的secauth值,设置是否相同。当节点的secauth值设置不一致时,可能导致gcadmin显示其它节点为Offline。
5.
集群无法看到其他节点
现象:
安装4个节点的集群,执行gcadmin命令,只能看到自己,不能看到其他节点。
原因:
集群无法看到其他节点的原因可能有两类:
(1).
corosync的配置文件不一致 (/etc/corosync/corosycon.conf)
a. 各节点secauth
配置不一致
查看各节点/etc/corosync/corosync.conf文件中,secauth项有的设置为on,有的设置为off;或由于多次不同版本的安装,造成secauth为on,但是各节点对应的/etc/corosync/authkey文件不同。
解决方法:
修改/etc/corosync/corosync.conf文件,各节点的secauth配置都设置成一样的。如果是/etc/corosync/authkey文件不同,各节点要设置成一致的。
建议corosync.conf中secauth项应设为off。
配置文件修改之后,各节点要重新启动gcware服务。
b. 各节点mcastaddr和port配置不一致
各节点的配置文件都应该设置成一样的地址和端口号。
mcastaddr:
226.94.1.23
mcastport:
5432
解决方法:
修改/etc/corosync/corosync.conf文件,各节点的mcastaddr和port配置都设置成一样的。
配置文件修改之后,各节点重新启动gcware服务。
(2). 交换机对于mcast
组播包的限制
配置corosync采用udp通讯替代mcast组播通讯。
解决方法:
参照/etc/corosync/corosync.conf.example.udpu示例文件,修改/etc/corosync/corosync.conf文件,配置corosync使用UDP通讯方式,transport:
udpu配置文件修改之后,各节点重新启动gcware服务。
6.
重新启动某个节点仍无法恢复
现象:
集群故障后(gcadmin无法正常工作),重新启动某个节点仍无法恢复正常。
原因:
集群处于锁住状态。
解决:
对于gcware而言集群是个整体,单独重启某个节点不一定能够改变整个集群的锁住状态,需要重新启动整个集群,即首先停止所有节点上的gcware服务,然后再重新启动各个节点上的gcware
服务,集群就会恢复状态。
7.
gbase用户无法执行gcadmin命令
现象:
只有root用户可以执行gcadmin命令,而gbase用户gcadmin无法执行
原因:
corosync用户授权文件丢失,导致非root用户没有corosync服务的访问
权限。
解决:
首先查看/etc/corosync/uidgid.d目录是否存在,目录下的文件是否存在,
可参照安装包中此目录下的示例文件,为gbase用户定义权限文件。
8.
节点处于Offline状态
现象:
节点处于Offline状态,查看/var/log/corosync.log日志文件,出现类似
“Invalid Packet”日志内容。
原因:
原因有可能是集群各节点/etc/corosync/corosync.conf配置文件中secauth设置不一致造成的,有的设置为on,有的设置为off,或者因为多次安装卸载导致集群各节点间/etc/corosync/authkey文件不一致。
解决:
检查集群各节点间/etc/corosync/corosync.conf配置文件,查看secauth设置是否是on。
如果集群各节点上配置文件设置都一致,再检查/etc/corosync/authkey二进制文件是否都一致。
如果有不一致的情况,只要将安装包中例子文件复制过来即可。注意每个节点都要复制一遍,确保各节点authkey文件一致性。如果节点上缺少authkey
文件,则在/var/log/corosync.log出现找不到文件的错误:
确认各节点上的/etc/corosync/authkey文件和corosync配置文件都一致
后,重新启动集群服务。
# /sbin/service gcware restart
Signaling GCWARE (gcware) to terminate: [确定]
Waiting for gcware services to unload:.[确定]
Starting GCWARE (gcwexec): [确定]
9.
无法与其他节点进行通讯
现象:
网卡配置正常,Ping 正常,Corosync却无法与其他节点进行通讯
原因:
节点主机配置了多块网卡,并且网卡IP 地址在同一网段,corosync自动选择的IP 地址对应的网卡上没有网线连接
解决:
将多块网卡配置为不同的网段,或将不用的网卡关闭掉
10.
扩展节点时提示输入密码
现象:
扩展节点时,gcadmin提示输入密码。
原因:
没有设置新扩展节点与原节点gbase用户之间SSH 授信
解决:
设置gbase用户的SSH互信。




