概要描述
对于 TDH 5.x 及其以上版本集群,Manager 使用 Mariadb 数据库来存储后台数据,称为 transwarp-manager-db。在某些情况下,启动或重启 Manager 时启动不了,在 Manager 未开启高可用时,究其原因是 transwarp-manager-db 启动失败。本文旨在收录一些常见的 transwarp-manager-db 启动失败案例,以供故障排查参考。
详细说明
- 目录权限不对
- DNS 域名解析错误
- 依赖文件损坏
- mariadb 数据库冲突或者损坏
1. 日志目录权限不对
现象:
transwarp-manager 启动失败,控制台能看到 [FAILED] start database failed!提示让查看 /var/log/transwarp-manager/master/mysql/transwarp-manager-db.log,可以明显看出是因为 transwarp-manager-db 启动失败了。该问题在 TDH5.2.4 版本常见。

排查:
- 执行
/etc/init.d/transwarp-manager-db restart手动启动 manager-db, 报错和重启 manager 时错误一致 - 执行
systemctl status transwarp-manager-db查看状态,可以发现 “Failed to start LSB:start and stop Transwarp Manager database server”

- 查看 /var/log/transwarp-manager/master/mysql/transwarp-manager-db.log 内容,没有最新的异常信息,
stat /var/log/transwarp-manager/master/mysql/transwarp-manager-db.log查看文件的 mtime,ctime 也都不是当前最新时间 - 执行
/usr/bin/mysqld_safe --defaults-file=/etc/transwarp-manager/master/my.cnf或者是/bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/transwarp-manager/master/my.cnf报错“can’t create/write to file ‘/var/log/transwarp-manager/master/mysql/transwarp-manager-db.log’ (Errcode: 13)”

- 执行
ll /var/log/transwarp-manager/,发现目录 /var/log/transwarp-manager/master 权限为 700

- 再次执行
su mysql -s /bin/bash -c 'more /var/log/transwarp-manager/master/mysql/transwarp-manager-db.log'可以确认 mysql 用户确实不能查看日志内容(Permission denied),更何况写
解决:
既然找到了是日志目录权限的问题,那么就很好解决了。直接执行如下命令启动 Manager。
$ chmod 755 /var/log/transwarp-manager/master && /etc/init.d/transwarp-manager restart
2. 报错 hostname 不能被查到
现象1:
transwarp-manager 启动失败,控制台能看到 [FAILED] start database failed!执行 /etc/init.d/transwarp-manager-db restart 报错如:
--
Neither host 'tdh1' nor 'localhost' could be looked up with
'/usr/sbin/resolveip'
Please configure the 'hostname' command to return a correct
hostname.
--

现象2:
查看 /var/log/transwarp-manager/master/mysql/transwarp-manager-db.log
发现报错 [ERROR] Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist

排查:
该问题基本是出现在新装 TDH 集群时。
- 首先确认执行
hostname命令输出的主机名,和 /etc/hosts 里配置的保持一致 - 如果服务器配置了 DNS 域名解析,确认 /etc/resolv.conf 里配置的 DNS 服务器能正常解析域名
- 分别执行
ping localhost和ping $(hostname)看 ip 信息对不对,网络是否正常
解决:
如果以上有信息不正确,请先解决相关的问题,如果以上信息都正确,请执行如下命令来初始化数据库和启动 manager。
$ /usr/bin/mysql_install_db --user=mysql --defaults-file=/etc/transwarp-manager/master/my.cnf --datadir=/var/lib/transwarp-manager/master/data/mysql --force
$ /etc/init.d/transwarp-manager restart
3. 报错 /usr/share/mysql/english/errmsg.sys 有 incompatible header
现象:
transwarp-manager 启动不了,root cause 还是 transwarp-manager-db 启动失败,/var/log/transwarp-manager/master/mysql/transwarp-manager-db.log 中可以看到如下报错:
--
incompatible header in messagefile '/usr/share/mysql/english/errmsg.sys'. Probably from another version of MariaDB
--
解决:
该问题从报错来看就是 errmsg.sys 文件不是当前 transwarp-manager-db 版本的,版本不匹配。
可以备份当前文件,从相同版本的正常集群通过二进制拷贝一份过来,确保权限啥的和原来的一致,然后再重启 manager。
$ /etc/init.d/transwarp-manager restart
4. 数据库被覆盖或者损坏
表现就是 Manager 启动失败,mysqld_safe 文件不存在;
此时大概率是安装了其他 mysql,覆盖了 mariadb;
使用 rpm -qa |grep mysql 确认一下 mysql 是否符合 Manager 要求。如果不符合要求,则需要卸载原来的,然后安装 /var/lib/transwarp-manager/master/pub/os/Packages 目录下的 Mariadb 包。
附录:故障排查整体思路
