zookeeper集群和solr集群的安装整合:
最终实现下面的效果
为了节省服务器资源,我把每一台服务器都装了一个zookeeper服务器和solr服务器
一.zookeeper集群搭建
1.下载 解压缩 重命名
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
tar –zxf zookeeper-3.4.10.tar.gz
mv zookeeper-3.4.10 zk
2.创建zoo.cfg
cd zk/conf
mv zoo_sample.cfg zoo.cfg
3.修改zoo.cfg,进行zookeeper集群配置
vim zoo.cfg
修改内容如下:
dataDir=/kkb/soft/zk/data
# the port at which the clients will connect
clientPort=2181
#集群中每台机器都是以下配置
#2881系列端口是zookeeper通信端口
#3881系列端口是zookeeper投票选举端口
server.1=192.168.96.151:2881:3881
server.2=192.168.96.152:2881:3881
server.3=192.168.96.153:2881:3881
4.在dataDir目录下创建myid文件,文件内容为1,对应server.1中的1。
添加内容如下(其他的zookeeper分别设置为 2和3 ):
1
5.启动zookeeper服务
/kkb/soft/zk/bin/zkServer.sh start
6.查看zookeeper状态
/kkb/soft/zk/bin/zkServer.sh status
其余两个服务器同理。。
二.solrCloud集群搭建
单个solr服务器的安装
下载 解压缩
wget http://archive.apache.org/dist/lucene/solr/4.10.4/solr-4.10.4.tgz
tar -xf solr-4.10.4.tgz
启动方法一:Solr默认提供Jetty(java写的Servlet容器)启动solr服务器。
进入example目录
执行命令:java -jar start.jar
访问地址:http://192.168.96.151:8983/solr
启动方法二:手动使用Tomcat部署
1.安装Tomcat 解压
rz
tar -zxvf apache-tomcat-x.xx.tar.gz
2.部署solr.war
把solr安装目录的webapp里面的solr.war拷贝到tomcat安装目录里面的webapp里面
cp /software/solr-4.10.4/example/webappssolr.war /kkb/server/solr/tomcat-solr/webapps
3.解压缩solr.war
/kkb/server/solr/tomcat-solr/bin/startup.sh
4.添加solr扩展jar包
cp /software/solr-4.10.4/example/ext/* /kkb/server/solr/tomcat-solr/webapps/solr/WEB-INF/lib/
5.添加log4j文件 classes目录需提前创建
cp /software/solr-4.10.4/example/resources/log4j/properties /kkb/server/solr/tomcat-solr/webapps/solr/WEB-INF/classes/
6.配置solrhome路径
vim /kkb/server/solr/tomcat-solr/webapps/solr/WEB-INF/web.xml
修改内容如下:
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-valu>/kkb/server/solr/solrhome/</env-entry-valu>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
7.添加solr中文分词器 需提前上传这些文件
(1).把 IKAnalyzer2012FF_u1.jar 添加到
kkb/server/solr/tomcat-solr/webapps/solr/WEB-INF/lib目录下。
(2).复制IKAnalyzer的配置文件和自定义词典和停用词词典到solr的classes目录下。
cp /root/IK\ Analyzer\ 2012FF_hf1/IKAnalyzer.cfg.xml /kkb/server/solr/tomcat-solr/webapps/solr/WEB-INF/classes/
cp /root/IK\ Analyzer\ 2012FF_hf1/ext.dic /kkb/server/solr/tomcat-solr/webapps/solr/WEB-INF/classes/
cp /root/IK\ Analyzer\ 2012FF_hf1/stopword.dic /kkb/server/solr/tomcat-solr/webapps/solr/WEB-INF/classes/
(3)在 schema.xml 中添加一个自定义的 fieldType ,使用中文分析器。
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
8.启动Tomcat
/kkb/server/solr/tomcat-solr/bin/startup.sh
9.启动之后我习惯看下日志
tail -100f /kkb/server/solr/tomcat-solr/logs/catlina.out
solrcloud服务器的安装
1.Tomcat部署Solr服务
复制单机版Solr服务对应的Tomcat,并修改端口为8888(如果不冲突可以不修改端口) 这里的复制是为了给其他两台服务器进行复制的副本
cp /kkb/server/solr/tomcat-solr /kkb/server/solrcloud/tomcat-8888 -r
vim /kkb/server/solrcloud/tomcat-8888/conf/server.xml
修改三个端口: 8005、8009、8080
2.修改Tomcat中的web.xml
vim /kkb/server/solrcloud/tomcat-8888/webapps/solr/WEB-INF/web.xml
修改内容如下:
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/kkb/server/solrcloud/solrhome8888/</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
3.设置Tomcat的启动参数
vim /kkb/server/solrcloud/tomcat-8888/bin/catalina.sh
在234行下面添加如下内容:
JAVA_OPTS="-DzkHost=192.168.96.151:2181,192.168.96.152:2181,192.168.96.153:2181"
4.复制Tomcat到其他机器
scp -r /kkb/server/solrcloud/tomcat-8888 root@192.168.96.152:/kkb/server/solrcloud/
5.创建solrhome
cp /kkb/server/solr/solrhome /kkb/server/solrcloud/solrhome8888 -r
6.修改solrhome下的solr.xml
vim /kkb/server/solrcloud/solrhome8888/solr.xml
修改内容如下(hostPort参数的值):
<solrcloud>
<str name="host">${host:}</str>
<int name="hostPort">8888</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${zkClientTimeout:30000}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true} </bool>
</solrcloud>
7.复制solrhome到其他机器
scp -r /kkb/server/solrcloud/solrhome8888 root@192.168.96.152:/kkb/server/solrcloud/
8.将solr配置文件上传到zookeeper
只需要一台机器进行操作即可!!!
使用 /kkb/soft/solr-4.10.4/example/scripts/cloud-scripts 下的 zkcli.sh 命令
将 /kkb/server/solrcloud/solrhome8888/collection1/conf 目录上传到 zookeeper 进行配置。
./zkcli.sh -zkhost 192.168.10.135:2181,192.168.10.136:2181,192.168.10.137:2181 -cmd
upconfig -confdir /kkb/server/solrcloud/solrhome8888/collection1/conf -confname
myconf
使用 zookeeper 自带的 zkCli.sh 命令连接 zookeeper 集群,查看上传的配置文件
./zkCli.sh -server localhost:2181
9.启动所有Tomcat
/kkb/server/solr/tomcat-solr/bin/startup.sh
solr服务器的拷贝同理。。。
10.启动效果如图
三.集群分片
1.创建新的集群,名称为collection2,集群中有三个solr节点,将集群分为三片,每片一个副本。
http://192.168.96.151:8888/solr/admin/collections?action=CREATE&name=collection2&numShards=3&replicationFactor=1
效果如图:
2.删除名称为collection1的集群
http://192.168.10.139:8280/solr/admin/collections?action=DELETE&name=collection1
效果如图:
es单机及es集群及插件的安装
安装的时候需要es和Kibana和es中文分词器的安装版本的一致,可在下面链接下载:
http://kan.027cgb.com/613363/es软件.zip
一.es的安装(前提条件:jdk不要装在root目录下面)
1.下载安装包,解压缩
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-
6.5.3.tar.gz
tar -xf elasticsearch-6.5.3.tar.gz -C /kkb/server
2.配置远程访问
vim /kkb/server/elasticsearch-6.5.1/config/elasticsearch.yml
修改内容如下:
network.host: 0.0.0.0
3.配置进程可以拥有的VMA(虚拟内存区域)的数量
vim /etc/sysctl.conf
添加如下内容:
vm.max_map_count=655360
4.生效配置文件
sysctl -p
5.创建启动es的用户并修改允许打开的最大文件描述符数量
groupadd esgroup
useradd esuser -g esgroup -p 111111
vim /etc/security/limits.conf
添加如下内容:
esuser soft nofile 65536
esuser hard nofile 65536
esuser soft nproc 4096
esuser hard nproc 4096
6.设置用户最大线程数
修改内容如下:将* 改为具体的es的启动用户
esuser soft nproc 4096
root soft nproc unlimited
7.更改 elasticsearch 文件夹及内部文件的所属用户及组
chown -R esuser:esgroup /kkb/server/elasticsearch-6.5.1
8.根据服务器内存大小最好先修改一下 jvm.options
vim /kkb/server/elasticsearch-6.5.3/config/jvm.options
修改内容如下:
-Xms256m
-Xmx256m
9.切换用户并启动es
su esuser
后端进程启动:/kkb/server/elas ticsearch-6.5.3/bin/elasticsearch -d
10.访问:http://192.168.96.154:9200/
一.es插件head的安装
1.下载安装包
yum install -y git
git clone git://github.com/mobz/elasticsearch-head.git
2.node.js 下载解压
wget https://nodejs.org/dist/v10.14.2/node-v10.14.2-linux-x64.tar.gz
tar -xvf node-v10.14.2-linux-x64.tar.gz
3.配置环境变量
vim /etc/profile
export NODE_HOME=/kkb/server/node-v10.14.2-linux-x64
export PATH=$PATH:$NODE_HOME/bin
source /etc/profile
4.grunt 下载.解压.安装
wget https://nodejs.org/dist/npm/npm-1.4.12.tgz
tar -xf npm-1.4.12.tgz
cd npm
./configurer
make && make install
5.安装grunt-cli
npm install -g grunt -cli
进入Elasticsearch-head目录:
npm install grunt --save-dev
6.验证
grunt -version
7.head配置文件修改
vim Elasticsearch-head/Gruntfile.js
修改内容如下:
connect: {
server: {
options: {
port: 9100,
base: '.',
keepalive: true,
hostname: '*'
}
}
}
8.修改Elasticsearch-head/_site/app.js文件
修改这一行加入es服务器的地址:
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.96.154:9200";
9.启动head插件
nohup grunt server &
10.访问:http://192.168.96.155:9100/
安装中文分词器IK
1.下载安装包
wget https://github.com/medcl/elasticsearch-analysisik/releases/download/v6.5.3/elasticsearch-analysis-ik-6.5.3.zip
2.解压
yum install -y unzip
解压到/kkb/server/elasticsearch-6.5.3/plugins/ik 目录
3.重新启动es
Kibana安装
1.下载 解压缩
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.1-linuxx86_64.tar.gz
tar -xf kibana-6.5.1-linux-x86_64.tar.gz -C /kkb/server/
2.编辑 kibana.yml 文件
vim /kkb/server/kibana-6.5.1-linux-x86_64/config/kibana.yml
将 server.host、elasticsearch.url 修改成所在服务器的ip地址:
server.host: "192.168.96.155"
elasticsearch.url: "http://192.168.96.155:9200"
3.启动Kibana
nohup /kkb/server/kibana-6.5.1-linux-x86_64/bin/kibana &
4.通过浏览器访问 Kibana:http://192.168.96.155:5601
es集群相关配置
修改每个节点的 elasticsearch.yml :
vim /kkb/server/elasticsearch-6.5.3/config/elasticsearch.yml
# 集群名称要唯一
cluster.name: zhangyang-es
# 集群节点要不同
node.name: node-135
# 设置master和data节点
node.master: true
node.data: true
# 节点将绑定到此主机名或IP地址,我们设置成0.0.0.0为当前主机,允许ip映射访问
network.host: 0.0.0.0
# http访问端口
http.port: 9200
# tcp访问端口
transport.tcp.port: 9300
# 自动发现的路由节点
discovery.zen.ping.unicast.hosts:
["192.168.96.154:9300","192.168.96.155:9300"]
# 集群中最小主节点数,防止脑裂
discovery.zen.minimum_master_nodes: 2
# head 跨域访问
http.cors.enabled: true
http.cors.allow-orig
网上收集的elasticsearch.yml配置文件的解释:
# 集群名称 Use a descriptive name for your cluster:
cluster.name: kkb-es
# ------------------------------------ Node ------------------------------------
# 节点名称 Use a descriptive name for the node:
node.name: node-135
# 既可以选举为主节点,也可以存储数据,也可作为负载器
node.master: true
node.data: true
# 指定节点的部落属性Add custom attributes to the node:
#node.attr.rack: r1
# ----------------------------------- Paths ------------------------------------
# 数据存储地址 Path to directory where to store the data (separate multiple locations
by comma):
path.data: /opt/apps/elasticsearch/data
# Log日志 Path to log files:
path.logs: /opt/apps/elasticsearch/logs
# 临时文件
# path.work: /opt/apps/elasticsearch/tmp
# 设置插件的存放路径,默认是es根目录下的plugins文件夹
#path.plugins: /opt/apps/elasticsearch/plugins
# 设置默认索引分片个数,默认为5片。
# index.number_of_shards: 3
# 设置默认索引副本个数,默认为1个副本。
# index.number_of_replicas: 2
# ----------------------------------- Memory -----------------------------------
# Lock the memory on startup:
# 设置为true来锁住内存 因为当jvm开始swapping时es的效率会降低,所以要保证它不swap
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
# ---------------------------------- Network -----------------------------------
# 绑定的ip地址,本机ip 不写是localhost Set the bind address to a specific IP (IPv4 or
IPv6):
# network.host: 192.168.0.1
network.host: 0.0.0.0
#设置参与集群的端口
transport.tcp.port: 9300
# 端口号 默认是9200 Set a custom port for HTTP:
http.port: 9200
# 设置内容的最大容量,默认100mb
http.max_content_length: 100mb
# --------------------------------- Discovery ----------------------------------
# 单播发现的地址Pass an initial list of hosts to perform discovery when new node is
started:
# The default list of hosts is ["127.0.0.1", "[::1]"] 通过配置这个参数来防止集群脑裂现象
(集群总节点数量/2)+1
# 最小master节点选举数 Prevent the "split brain" by configuring the majority of nodes
(total number of master-eligible nodes / 2 + 1):
discovery.zen.ping_timeout: 30s
discovery.zen.minimum_master_nodes: 2
discovery.zen.fd.ping_timeout: 30s
discovery.zen.ping.unicast.hosts: ["192.168.10.135:9300", "192.168.10.136:9300",
"192.168.10.137:9300"]
# discovery.zen.ping.multicast.enabled: false
# ---------------------------------- Gateway -----------------------------------
# 最多等待5分钟,5分钟还没上线 就重新rebalance
# 足够的节点上线后,才进行shard recovery的过程
# 节点最少数量
gateway.recover_after_time: 5m
gateway.recover_after_nodes: 3
gateway.expected_nodes: 3
# ---------------------------------- Various -----------------------------------
# 禁止在生产环境中删除所有索引 Require explicit names when deleting indices:
# 设置是否可以通过正则或者_all删除或者关闭索引库,默认true表示必须需要显式指定索引库名称
# 生产环境建议设置为true,删除索引库的时候必须显式指定,否则可能会误删索引库中的索引库。
action.destructive_requires_name: true
# ---------------------------------- http.cors ---------------------------------
# 运行带cookie访问-用于head插件
http.cors.enabled: true
http.cors.allow-origin: "*"