使用 systemd 管理 MySQL Router
文章目录
- 使用 systemd 管理 MySQL Router
- 排错过程
- 升级操作系统内核
- 未修改相关文件的属主,直接用 mysqlrouter 重新引导
- 配置操作系统 limit 相关参数
- 用户及其权限问题
- 结语
在之前的文章 【 InnoDB Cluster 】安装部署 MySQL Router 中介绍了如何安装、部署 MySQL Router ,当时遇到一个问题,MySQL Router 部署好后无法使用 systemd 来启动,会报如下错误:
图1 systemd 启动 mysqlrouter 报错
当时我以为是 systemd 版本过低的问题,升级了还是报错,就怀疑是操作系统内核太低的问题。今天验证了一下,其实是引导 MySQL Router 所用的操作系统用户及其权限的问题。后面我在 MySQL Router 的文档里找到了相关介绍——配置文件选项 user 。所以,有时间的话,还是应先看书学习理论(对于 MySQL 也可说是先看说明书),再实践操作。
排错过程
升级操作系统内核
使用 Yum 仓库包升级操作系统内核至 kernel-3.10.0-1160.80.1.el7.x86_64 版本,并删除旧的内核和 RPM 包,最后重启。
yum upgrade -y kernel*
#查看已安装的内核 RPM 包
rpm -qa|grep kernel
#移除旧的内核
kernel-install remove 旧的内核名称
rpm -e 旧的内核名称
然后重启。如想了解详细信息,请关注我后面的文章。
图2 最终效果
重启后发现还是报错,证明不是它的问题。
未修改相关文件的属主,直接用 mysqlrouter 重新引导
然后我立即想到是引导时使用的操作系统账户的问题,因为当时提示了不能使用 superuser root 来引导,如果非要这么做,请指定--user=root
,然后我当时就这么做了。
但重新引导后查看systemctl status mysqlrouter
仍然报同样的错误,这让我很困惑,所以怀疑到打开文件数的 limit 上去了。直到使用journalctl -xe
查看报错消息(当时并没有想到这),才确定是用户权限问题。
然后我试着修改了一些文件的属主为mysqlrouter:myqlrouter
,再次journalctl -xe
发现报错不同了。
搜索相关报错信息并没有找到明确的解决办法,但发现有几个网页里最终发现都是权限、属主问题,再次印证了我的想法。
配置操作系统 limit 相关参数
看到报错中有 start-limit ,怀疑是配置操作系统 limit 相关参数中 openfiles 导致的。
ulimit -n -u
ulimit -n 1024000
vim /etc/security/limits.conf
#末尾添加
# “-”表示soft和hard都配置为相同值
* - nofile 1024000
* - nproc 1024000
结果还是不行,也不是它的问题。
用户及其权限问题
查询包含 mysqlrouter 关键字的文件:
find / -name mysqlrouter
分别查看各文件及文件夹的属主、权限后,发现属主有些为 mysqlrouter ,有些为 root ,而我并没有手动创建 mysqlrouter 账户,故应该是安装它时自动创建的。
那么我们看一下服务程序是否有问题,这里是/usr/lib/systemd/system/mysqlrouter.service
。
vim /usr/lib/systemd/system/mysqlrouter.service
发现默认是 mysqlrouter,问题原因找到了!
注意
此处注释中的 root 是我后加的,而非原来就有的。
此时,有两种解决方案:
-
重新使用选项
--user=mysqlrouter
引导 MySQL Router 。这是推荐的方案。
重新引导前,必须先将 mysqlrouter 相关的文件属主修改为 mysqlrouter 才行。建议使用上面的find
命令查找出的结果,结合经验和文件名称、作用,对怀疑的文件或文件夹逐个尝试修改属主。mysqlrouter --bootstrap ic_admin@ic-source:3306 --account=myRouter1 --user=mysqlrouter
然后修改/etc/mysqlrouter
目录的属主。chown -R mysqlrouter:mysqlrouter /etc/mysqlrouter
-
将 mysqlrouter 替换为 root ,改完保存后执行
systemctl daemon-reload
,再使用systemctl start mysqlrouter
即可成功启动。vim /usr/lib/systemd/system/mysqlrouter.service
结语
造成此问题的原因是我不听劝强制使用 root 引导 MySQL Router ,但也是因为我看到有提示信息显示支持--user=root
的方式强制用 root 引导才做的。而提示信息和报错信息并没有说明这么做的隐患和错在哪里,mysqlrouter -?
也找不到相应信息。
解决问题后,我想找到问题产生的原因,于是在 MySQL 官网的 《MySQL Router 8.0》文档三次跳转页面才找到了相关信息的!这也是我觉得 MySQL 官网文档难于学习的一点——写的太乱,还有就是措辞偏外国人,文化习惯差异导致不利于快速学习。他们可以将一个知识点的相关内容放在多个章节里,甚至多个文档里,更可气的是标题还都差不多,很多只有时态、词性方面的差异,内容有些也有很高的重复率,关键差异信息只有一点,而这恰恰是你需要的呀!这就很烦!
我时间紧张,近期任务是快速学习搭建 MySQL InnoDB ClusterSet ,没那么多时间去先看文档再操作。这在如今的社会很正常吧,你买来一个诸如手机的电子产品,纵使它说明再全,你一开始也不会去先看说明再去摆弄,而是在遇到摆弄不明白的地方时才想着去看说明书,查资料。IT 技术的官方文档也是如此,本质上就是说明书,而 MySQL 这样的产品本质上就是个工具,很多人的需求只是会用就行,不关心内部设计细节,只有 DBA 这类人员才需要关注更多。
生活就是这样,任何事情只要肯琢磨,门道都挺深的。职场工作也分两条发展路线,一种是 纵 ,即精益求精的资深专家路线;一种是 横 ,即博学多才的全面型人才。是不是感觉架构里的 Scale-Up、Scale-Out 很像?两者也都有缺陷:专家路线容易把路子走窄了,尤其是所学的知识将要被淘汰了时,专家的待遇将直线下滑;全面型人才容易样样都通样样不精,中国人叫他们“一瓶子不满半瓶子晃荡”、“鼯鼠”,美国人叫他们“Jack of all trades”。在当今社会分工如此细化的社会,一般来讲,做专家的待遇要优于做全能型人才,至少票子上的表现是如此;而如果脱离社会或遇到荒野迷路、战争动荡、末世求生,全能型人才的优势将是巨大的。