文章目录
操作系统:CentOS 7.X
rpm安装包:官网下载地址 elasticsearch-6.7.2.rpm
JDK: 官网下载地址 JDK1.8
systemctl命令:通过此命令ps -p 1,检查自己的Linux系统是否可以使用systemctl指令。
结果如下,说明可以使用systemd指令。
[root@tttt~]# ps -p 1
PID TTY TIME CMD
1 ? 00:00:09 systemd
修改/etc/security/limits.conf
vim /etc/security/limits.conf
增加以下配置
elasticsearch nproc 4096
elasticsearch nofile 65535
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
修改/etc/sysctl.conf
增加以下配置
vm.max_map_count=262144
vm.swappiness=0
vm.overcommit_memory=1
vm.zone_reclaim_mode=0
net.ipv4.tcp_retries2=5
优化项说明
| 配置 | 描述 |
|---|---|
| elasticsearch nproc 4096 | 确保elasticsearch用户可以创建的线程数至少为 4096 |
| elasticsearch nofile 65535 | Elasticsearch 使用大量文件描述符或文件句柄。 用完文件描述符可能是灾难性的,很可能会导致数据丢失。 确保将运行 es 的用户的打开文件描述符数量限制增加到 65536 或更高。 |
| elasticsearch soft memlock unlimited | allow user ‘elasticsearch’ mlockall |
| elasticsearch hard memlock unlimited | allow user ‘elasticsearch’ mlockall |
| vm.max_map_count=262144 | 限制虚拟内存 |
| vm.swappiness=0 | 1、Linux系统上可用的另一个选项是确保sysctl值vm.swappiness设置为1。这减少了内核的交换倾向,在正常情况下不会导致交换,同时仍允许整个系统在紧急情况下交换。 2、1是elsatic官网的建议,但是我们一般都是禁止使用swappiness,所以直接将vm.swappiness设置为0。 |
| vm.overcommit_memory=1 | 内存分配控制 |
| vm.zone_reclaim_mode=0 | 这个参数可以取值0,1,3,4。0表示在local内存不够用的情况下可以去其他的内存区域分配内存;1表示在local内存不够用的情况下本地先回收再分配;3表示本地回收尽可能先回收文件缓存对象;4表示本地回收优先使用swap回收匿名内存。由此可见,将其设为0可以降低swap发生的概率。 |
| net.ipv4.tcp_retries2=5 | TCP重传超时。(此设置适用于所有TCP连接,也会影响与Elasticsearch集群以外的系统的通信可靠性。如果集群通过低质量网络与外部系统通信,则可能需要为net.ipv4.tcp_retrys2选择更高的值。) |
将JDK的tar包解压到/opt/software路径下,得到jdk1.8.0_131。将JDK做成软连接到系统目录/usr/bin中,或者将JDK配置到环境变量中
# 采用已解压的JDK 将java注册到/usr/bin
[root@demo ~]# ln -s /opt/software/jdk1.8.0_131/bin/java /usr/bin/java
执行rpm安装程序
# 执行安装
# 将rpm包copy至/usr/local目录
[root@demo ~]# mv /opt/elasticsearch-6.7.2.rpm /usr/local/elasticsearch-6.7.2.rpm
[root@demo ~]# rpm -ivh /usr/local/elasticsearch-6.7.2.rpm
执行结果如下:
[root@demo ~]# rpm -ivh /usr/local/elasticsearch-6.7.2.rpm
警告:/usr/local/elasticsearch-6.7.2.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中... ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
正在升级/安装...
1:elasticsearch-0:6.7.2-1 ################################# [100%]
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
Created elasticsearch keystore in /etc/elasticsearch
Elasticsearch在安装后不会自动启动。通过systemd启动和停止Elasticsearch。
根据elasticsearch-6.7.2.rpm中的配置,默认情况下:
rpm安装之后elasticsearch的程序位置/usr/share/elasticsearch
rpm安装之后elasticsearch的配置文件的位置/etc/elasticsearch
rpm安装之后elasticsearch默认日志文件的位置/var/log/elasticsearch
注册elasticsearch.service,可以在/etc/systemd/system/multi-user.target.wants目录下,查到注册的elasticsearch.service。
# 注册elasticsearch.service
[root@demo ~]# sudo systemctl daemon-reload
[root@demo ~]# sudo systemctl enable elasticsearch.service
# 进入 systemd目录 查看elasticsearch服务
[root@demo ~]# ll /etc/systemd/system/multi-user.target.wants
修改elasticsearch配置
新建日志目录和数据目录
# 创建需要更改的路径
[root@demo ~]# mkdir -p /opt/software/elasticsearch/data
[root@demo ~]# mkdir -p /opt/software/elasticsearch/log
elasticsearch.yml配置项
# 修改相关配置文件
[root@demo ~]# vim /etc/elasticsearch/elasticsearch.yml
单机配置项说明
# 集群名称
cluster.name: es-cluster-demo
# 节点名称
node.name: es-cluster-demo-node-1
# 节点角色
node.master: true
node.data: true
# 数据路径
path.data: /opt/software/elasticsearch/data
# 日志路径
path.logs: /opt/software/elasticsearch/log
# 内存锁
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
# 绑定地址 本机IP
network.host: 192.168.0.1
# 服务HTTP与TCP端口,跨域
http.port: 9600
transport.tcp.port: 9601
http.cors.enabled: true
http.cors.allow-origin: "*"
# 广播发现 网关地址一般是拥有master角色的地址
discovery.zen.ping.unicast.hosts: ["192.168.0.1"]
# 线程优化配置项
thread_pool:
bulk:
size: 20
queue_size: 2000
search:
size: 100
queue_size: 2000
index:
size: 20
queue_size: 2000
集群部署需要增加以下配置
# 广播发现 网关地址一般是拥有master角色的地址
discovery.zen.ping.unicast.hosts: ["192.168.0.1","192.168.0.2","192.168.0.3"]
# 选主投票需要拥有的最低节点数(拥有master角色的节点),通过配置大多数节点(符合主控条件的节点总数/2+1)来防止 "脑裂"。
discovery.zen.minimum_master_nodes: 2
discovery.zen.fd.connect_on_network_disconnect: true
discovery.zen.ping_timeout: 30s
discovery.zen.fd.ping_timeout: 120s
discovery.zen.fd.ping_retries: 6
discovery.zen.fd.ping_interval: 5s
gateway.expected_nodes: 3
#设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。
gateway.expected_master_nodes: 3
#和上一条基本相同不过这个参数限定了必须是master节点
gateway.expected_data_nodes: 3
#和第一条基本相同不过这个参数限定了必须是data节点
gateway.recover_after_time: 5m
#这个参数从另一个维度进行了数据恢复的限定,配置等待时间,节点从上线到心跳交流有一个时间过程。如果在限定的时间内指定的node数量未达到,则集群开始等待5-7的条件,如果未设置则开始数据恢复。只要设置了任意一个expected_nodes参数,启用默认时间5m。和expected_nodes配置不冲突,那个配置的条件先达到那个配置就提前生效。
gateway.recover_after_nodes: 2
#只要有足够的节点数量就开始恢复数据。足够就是此参数配置的值
gateway.recover_after_master_nodes: 2
#只要有足够的master节点数量就开始恢复数据。足够就是此参数配置的值
gateway.recover_after_data_nodes: 2
#只要有足够的data节点数量就开始恢复数据。足够就是此参数配置的值
jvm.options配置项
# 修改内存
[root@demo ~]# vim /etc/elasticsearch/jvm.options
配置项说明
# 改成机器内存一半的大小 最大32G
-Xms4g
# 改成机器内存一半的大小 最大32G
-Xmx4g
修改系统配置
启动elasticsearch服务
[root@demo ~]# sudo systemctl start elasticsearch.service
[root@demo ~]# sudo systemctl status elasticsearch.service
如果未对系统进行优化,可能出现以下错误,详见 【错误总结】小节。
验证服务
查看集群健康状态
[root@demo ~]# curl -XGET 'http://192.168.0.1:9600/_cat/health?v'
查看节点状态
[root@demo ~]# curl -XGET 'http://192.168.0.1:9600/_cat/nodes?v&s=name'
/opt/software/elasticsearch/log/my-application.log在日志文件中会出现以下错误
[2022-12-09T19:02:41,412][WARN ][o.e.b.JNANatives ] [node-1] Unable to lock JVM Memory: error=12, reason=Cannot allocate memory
[2022-12-09T19:02:41,416][WARN ][o.e.b.JNANatives ] [node-1] This can result in part of the JVM being swapped out.
[2022-12-09T19:02:41,417][WARN ][o.e.b.JNANatives ] [node-1] Increase RLIMIT_MEMLOCK, soft limit: 65536, hard limit: 65536
[2022-12-09T19:02:41,417][WARN ][o.e.b.JNANatives ] [node-1] These can be adjusted by modifying /etc/security/limits.conf, for example:
# allow user 'elasticsearch' mlockall
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
解决方式
修改vim /etc/security/limits.conf,
* soft nofile 51200
* hard nofile 51200
* soft nproc 65536
* hard nproc 65536
* soft memlock unlimited
* hard memlock unlimited
[2022-12-09T19:02:51,467][ERROR][o.e.b.Bootstrap ] [node-1] node valida
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
针对锁定内存配置增加以下内容
[root@demo ~]# systemctl edit elasticsearch
添加:
[Service]
LimitMEMLOCK=infinity
# 检查elasticsearch服务状态
systemctl status elasticsearch.service;
# 停止elasticsearch服务状态
systemctl stop elasticsearch.service;
# 提出elasticsearch服务
systemctl disable elasticsearch;
# 重载系统服务
systemctl daemon-reload;
# 查询rpm安装的elasticsearch
rpm -qa | grep elasticsearch;
# rpm卸载elasticsearch,elasticsearch-6.7.2-1.noarch名称 需要根据查询上一步查询结果来
rpm -e --nodeps elasticsearch-6.7.2-1.noarch;
# 删除残留文件
rm -rf /etc/elasticsearch;
# 删除elasticsearch自定义文件
rm -rf /opt/software/elasticsearch;
/bin/systemctl daemon-reload:重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。
systemctl 常用指令表格
| systemctl 指令 | 说明 | 举例 |
|---|---|---|
| systemctl enable XXX.service | 使服务自启动 | systemctl enable elasticsearch.service |
| systemctl disable XXX.service | 使服务不自启动 | systemctl disable elasticsearch.service |
| systemctl status XXX.service | 检查服务状态,展示详细信息 | systemctl status elasticsearch.service |
| systemctl is-enable XXX.service | 仅仅显示是否active | systemctl is-enableelasticsearch.service |
| systemctl list-units --type=service | 显示所有已启动服务 | list-units --type=service |
| systemctl start XXX.service | 启动服务 | systemctl start elasticsearch.service |
| systemctl stop XXX.service | 停止服务 | systemctl stop elasticsearch.service |
| systemctl restart XXX.service | 重启服务 | systemctl restart elasticsearch.service |
| systemctl reload XXX.service | 服务重新加载配置文件 | systemctl reload elasticsearch.service |
rpm安装不建议自定义路径
| 路径 | 说明 |
|---|---|
| /usr/bin | 普通可执行程序文件目录 |
| /usr/sbin | 服务器执行程序文件和管理程序文件目录 |
| /etc | 应用程序配置文件(安装目录) |
| /var/log | 日志文件目录 |
| /usr/share/doc | 应用程序文档文件目录 |
| /usr/share/man | 应用程序手册页文件目录 |
| /usr/lib | 程序使用的动态函数库目录 |
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=