启动MongoDB报version `OPENSSL_1.0.2‘ not found的两种解决办法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了启动MongoDB报version `OPENSSL_1.0.2‘ not found的两种解决办法相关的知识,希望对你有一定的参考价值。

问题描述:

在部署MongoDB的时候,启动过程中有遇到“version `OPENSSL_1.0.2‘ not found ”这样的报错,导致MongoDB服务起不来:

[[email protected] 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)
[[email protected] lib]#

原因分析:

报这样的错误,就是因为openssl的版本问题导致的。因此需要更新openssl。查看当前的版本号:

[[email protected]~]# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
[[email protected] ~]#
[[email protected] ~]# rpm -qa openssl
openssl-1.0.1e-60.el7.x86_64
[[email protected] ~]#

解决办法:

解决办法有两种,一种是yum自动更新,这种方法很简单。还有一种情况就是当这台机器完全阻断了外网,不能用yum的时候,就只有手动解决了。

解决办法1——yum自动更新

重新安装openssl: yum -y install openssl,安装完成之后,检查版本已经OK。重启mongodb就好了:

 [[email protected] ~]# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017
[[email protected] ~]# 
[[email protected] ~]# rpm -qa openssl
openssl-1.0.2k-8.el7.x86_64
[[email protected] ~]# 

解决办法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

[[email protected] 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 #将原来的软连接更名备份
[[email protected] tmp]#

3、然后再启动mongodb,就成功了

======================安装 openssl-1.0.2k.tar.gz步骤======================
1)看/usr/local/openssl是否已经存在,若存在,就将openssl目录改个名字,做个备份

2) 解压文件
[[email protected] tmp]# tar -xzf openssl-1.0.2k.tar.gz

3) 配置?

[[email protected] tmp]# cd openssl-1.0.2k/
[[email protected] openssl-1.0.2k]#  ./config shared --prefix=/usr/local/openssl --openssldir=/usr/lib/openssl
  shared 表示生成动态库
  prefix?表示安装目录
  openssldir?表示配置文件目录,ubuntu默认是/usr/lib/openssl,若设置其他目录,执行openssl命令时会有警告.

4)编译?& 安装

[[email protected] openssl-1.0.2k]#  make & make install

5)设置环境变量
vim /etc/profile,在最后一行添加export PATH=$PATH:/usr/local/openssl/bin?保存退出;
使用source /etc/profile使其生效

6)创建符号链接

[[email protected] openssl-1.0.2k]#  ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl  #执行这一步的时候有可能会失败,提示/usr/bin/openssl已经存在,那就将/usr/bin/openssl改个名字,重新做软连接
[[email protected] 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)测试查看版本就已经更新了

[[email protected] ~]# openssl version   #版本就已经更新了
OpenSSL 1.0.2k  26 Jan 2017
[[email protected] ~]#

======================替换/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:

[[email protected] 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 #将原来的软连接更名备份
[[email protected] tmp]#

然后再重启MongoDB就可以启动了。

以上是关于启动MongoDB报version `OPENSSL_1.0.2‘ not found的两种解决办法的主要内容,如果未能解决你的问题,请参考以下文章

net start MongoDB启动MongoDB服务失败 报100错误

使用Robomongo 连接MongoDB 报 Authorization failed 解决办法

Spring boot 启动报错:com.mongodb.MongoSocketOpenException: Exception opening socket

mongodb启动报错,child process failed, exited with error number 1

mongodb启动服务时候报错。错误1067,进程意外终止。

转 Nexus启动报错:Unsupported major.minor version 51.0