1.问题
在上面已经搭建好了MongoDB的集群。
https://blog.csdn.net/EEEEEEcho/article/details/109196275
剩下的任务是使用ElasticSearch与MongoDB进行通信,也即实现实时同步。
因为我是搭建的集群,所以我不用和mongod数据库进程通信,而是要和路由route进程进行通信,所以,要搞明白问题所在。
通信所用的工具mongo-connector(一个年久失修的工具)
2.ElasticSearch环境的搭建
首先,去官网下载就行了,具体我就不多说了,根据自己操作系统进行下载,我的是linux的Centos系统。所以下载好对应的压缩包,传到服务器上。
我将压缩包解压到了/usr/local/es中。接下来就是对配置文件进行修改。
修改/usr/local/es/config/elasticsearch.yml.
接下来,到/usr/local/es/bin 中 启动es
记住:千万不能用root用户启动,千万不能用root用户启动,千万不能用root用户启动。
虽然没有什么大影响,但是,你会报错。如果没有其他用户的话,你就自己创建一个用户(你都有root了),然后切换成你的非root用户启动。
这里,你可能会报以下错误。
错误一:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
每个进程最大同时打开文件数太小,可通过下面2个命令查看当前数量
ulimit -Hn
ulimit -Sn
修改/etc/security/limits.conf文件,增加配置,用户退出后重新登录生效。
* soft nofile 65536
* hard nofile 65536
重新登录后,使用上面的ulimit命令查看以下,进行确认。
错误二:max number of threads [3818] for user [es] is too low, increase to at least [4096]
问题同上,最大线程个数太低。修改配置文件/etc/security/limits.conf(和问题1是一个文件),增加配置。
* soft nproc 4096
* hard nproc 4096
可通过命令查看
ulimit -Hu
ulimit -Su
错误三:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
修改/etc/sysctl.conf文件,增加配置vm.max_map_count=262144
通过以下方式修改。
vi /etc/sysctl.conf
sysctl -p
错误四:Exception in thread “main” java.nio.file.AccessDeniedException: /usr/local/elasticsearch/elasticsearch-6.2.2-1/config/jvm.options
elasticsearch用户没有该文件夹的权限,执行命令
chown -R hhh /usr/local/elasticsearch/
反正我是莫名其妙都遇到了。
接下来,正常启动就行了.
3.安装mongo-connector
这个东西是跟ES版本有关的!这个东西是跟ES版本有关的!这个东西是跟ES版本有关的!所以,因为我这个版本是ES7.9,所以我需要下载mongo-connector[elastic5]。这个是有个版本对应表的,如下。
注意啊。注意啊。这个Elasticsearch 5.x 它并不单单指5.几的版本啊。。应该是5.x+ 。意思就是5.x版本以上的。
安装方式:pip install ‘mongo-connector[elastic5]’
这时候,你会发现你没有pip.所以你去网上找到了如何安装pip,你也装上了,然后你执行这条命令。他就报错了。
没错,说直白点,你装的pip是和你Centos中自带的python2.7是一家子的。但是这个mongo-connector[elastic5]是用python3的。。。
这里插播一个错误,如果你直接执行了,pip install mongo-connector,即用的python2的mongoconnector那么你在连接的时候
mongo-connector -m 192.168.98.42:10050 -t 192.168.98.42:9200 -d elastic2_doc_manager
它是可以运行的,但是,你就是没有办法进行同步,集群中存了东西,你会读不到,而且你去查看mongo-connector的日志,你会发现 TransportError(406, u’Content-Type header is not supported’) 这个错误。这就是因为旧版本的mongo-connector与新版es不兼容的问题。 所以就是用这个mongo-connector[elastic5]
然后你就去网上找如何安装python3.我还是在这里说了怎么装吧,我也是参考的博客,写的很好,对本机的python无影响。
安装python依赖
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
下载安装包
这时候你可能发现没有wget,那就先安装wget
yum -y install wget
这里下载的python3.6。
解压
tar -zxvf Python-3.6.5.tgz
进入文件夹
cd Python-3.6.5
创建安装目录
mkdir /usr/local/python3
指明安装路径
./configure -prefix=/usr/local/python3
这时候你可能又会发现没有编译器!
yum -y install gcc
编译安装
sudo make && make install
出现如图,即可成功
建立链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3 #为python3创建软连接
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 #为pip3创建软连接
验证
python3 # 输入
pip3 -V #V大写
接下来就使用pip3 来安装mongo-connector[elastic5]。直接pip3 install mongo-connector[elastic5]。
安装完成后,还是不能直接用mongo-connector -m 10.8.5.99:27017 -t 10.8.5.101:9200 -d elastic2_doc_manager 这条命令来进行连接。
需要安装elastic2_doc_manager,这个东西可以直接用pip(不是pip3)来安装,我记得我是直接pip的,应该没错。
pip install elastic2_doc_manager
4.执行连接
做完上述工作后,还是不能直接连接。如果是未初始化的mongodb单机或者集群。建议参照另一个大佬的博客,初始化之后,再安装,安装可以参考我的。
https://blog.csdn.net/laoyang360/article/details/51842822
但是我的集群是初始化好的,所以我不用初始化了。但是我也不能直接执行命令。
因为mongo-connector并不是在环境变量中,即并没有用原生的pip安装,只能找到其路径,我直接上命令吧。
python3 /usr/local/python3/lib/python3.6/site-packages/mongo_connector/connector.py -m 192.168.98.42:10050 -t 192.168.98.42:9200 -d elastic2_doc_manager
我用pip3下载的connector在那个一大长串的路径中,而且需要python3进行执行。只有这样才能成功启动。这样启动不是后台执行的,如果后台执行的话。命令要这样。
nohup python3 /usr/local/python3/lib/python3.6/site-packages/mongo_connector/connector.py -m 192.168.98.42:10050 -t 192.168.98.42:9200 -d elastic2_doc_manager&
好了,结束了。
5.进行测试。
进入一个mongod
mongo --port 10011
然后退出 查看es中的同步情况。
同步成功!