问题描述:
在部署 MongoDB 的时候, 启动过程中有遇到 "version `OPENSSL_1.0.2' not found " 这样的报错, 导致 MongoDB 服务起不来:
- [root@slave-4 lib]# /usr/local/mongodb/bin/mongod -f /etc/mongodb/mongo.conf
- /usr/local/mongodb/bin/mongo: /lib64/libcrypto.so.10: version `OPENSSL_1.0.2' not found (required by /usr/local/mongodb/bin/mongo)
- [root@slave-4 lib]#
原因分析:
报这样的错误, 就是因为 openssl 的版本问题导致的. 因此需要更新 openssl. 查看当前的版本号:
- [root@slave-4~]# openssl version
- OpenSSL 1.0.1e-fips 11 Feb 2013
- [root@slave-4 ~]#
- [root@slave-4 ~]# rpm -qa openssl
- openssl-1.0.1e-60.el7.x86_64
- [root@slave-4 ~]#
解决办法:
解决办法有两种, 一种是 yum 自动更新, 这种方法很简单. 还有一种情况就是当这台机器完全阻断了外网, 不能用 yum 的时候, 就只有手动解决了.
解决办法 1--yum 自动更新
重新安装 openssl: yum -y install openssl, 安装完成之后, 检查版本已经 OK. 重启 mongodb 就好了:
- [root@slave-4 ~]# openssl version
- OpenSSL 1.0.2k-fips 26 Jan 2017
- [root@slave-4 ~]#
- [root@slave-4 ~]# rpm -qa openssl
- openssl-1.0.2k-8.el7.x86_64
- [root@slave-4 ~]#
解决办法 2-- 手动更新
因为这次遇到这个报错的机器, 因为限制不能使用外网, 于是尝试这手动解决了一把. 做了下面几个步骤:
1, 手动编译安装 openssl-1.0.2k.tar.gz 这个包
2, 从其他的 openssl 版本 OK 的机器上拷贝一个 libcrypto.so.1.0.2k 到这台报错的服务器的 / lib64 下面, 然后将原来的 libcrypto.so.10-> libcrypto.so.1.0.1e 改成 libcrypto.so.10 -> libcrypto.so.1.0.2k
[root@mongodb tmp]# ll /lib64/|grep libcrypto
lrwxrwxrwx 1 root root 19 Jun 20 11:22 libcrypto.so.10 -> libcrypto.so.1.0.2k #新做的软连接
- -rwxr-xr-x. 1 root root 2025472 Nov 6 2016 libcrypto.so.1.0.1e
- -rwxr-xr-x 1 root root 2512448 Jun 20 11:19 libcrypto.so.1.0.2k #从其他机器拷贝过来的文件
lrwxrwxrwx. 1 root root 19 Aug 2 2017 libcrypto.so.10.bak -> libcrypto.so.1.0.1e #将原来的软连接更名备份
[root@mongodb tmp]#
3, 然后再启动 mongodb, 就成功了
====================== 安装 openssl-1.0.2k.tar.gz 步骤 ======================
1) 看 / usr/local/openssl 是否已经存在, 若存在, 就将 openssl 目录改个名字, 做个备份
2) 解压文件
[root@mongodb tmp]# tar -xzf openssl-1.0.2k.tar.gz
3) 配置?
- [root@mongodb tmp]# cd openssl-1.0.2k/
- [root@mongodb openssl-1.0.2k]# ./config shared --prefix=/usr/local/openssl --openssldir=/usr/lib/openssl
shared 表示生成动态库
prefix? 表示安装目录
openssldir? 表示配置文件目录, ubuntu 默认是 / usr/lib/openssl, 若设置其他目录, 执行 openssl 命令时会有警告.
4) 编译?& 安装
[root@mongodb openssl-1.0.2k]# make & make install
5) 设置环境变量
vim /etc/profile, 在最后一行添加 export PATH=$PATH:/usr/local/openssl/bin? 保存退出;
使用 source /etc/profile 使其生效
6) 创建符号链接
- [root@mongodb openssl-1.0.2k]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl #执行这一步的时候有可能会失败, 提示 / usr/bin/openssl 已经存在, 那就将 / usr/bin/openssl 改个名字, 重新做软连接
- [root@mongodb openssl-1.0.2k]# ln -s /usr/local/ssl/openinclude/openssl /usr/include/openssl
7) 刷新动态库配置 (有些安装文档有这一步, 不过我没做)
vim /etc/ld.so.conf 在文件末尾加入 / usr/local/ssl/lib
8) 测试查看版本就已经更新了
[root@mongodb ~]# openssl version #版本就已经更新了
OpenSSL 1.0.2k 26 Jan 2017
[root@mongodb ~]#
====================== 替换 / lib64 下面的软连接 ======================
只是安装了 openssl-1.0.2k.tar.gz, 虽然 openssl version 看到版本更新了, 但是启动 MongoDB 的时候还是会报同样的错. 发现在这台机器的 / lib64 下面的软连接 libcrypto.so.10 还是指向的 libcrypto.so.1.0.1e, 而不是 libcrypto.so.1.0.2k. 于是从另外一台服务器拷贝了 libcrypto.so.1.0.2k 文件上传到这台不能联网的报错机器 / lib64 下面, 重新做软连接, 将 libcrypto.so.10-> libcrypto.so.1.0.1e 改成 libcrypto.so.10 -> libcrypto.so.1.0.2k:
[root@mongodb tmp]# ll /lib64/|grep libcrypto
lrwxrwxrwx 1 root root 19 Jun 20 11:22 libcrypto.so.10 -> libcrypto.so.1.0.2k #新做的软连接
- -rwxr-xr-x. 1 root root 2025472 Nov 6 2016 libcrypto.so.1.0.1e
- -rwxr-xr-x 1 root root 2512448 Jun 20 11:19 libcrypto.so.1.0.2k #从其他机器拷贝过来的文件
lrwxrwxrwx. 1 root root 19 Aug 2 2017 libcrypto.so.10.bak -> libcrypto.so.1.0.1e #将原来的软连接更名备份
[root@mongodb tmp]#
然后再重启 MongoDB 就可以启动了.
来源: http://www.bubuko.com/infodetail-2651776.html