solr安装-tomcat+solrCloud构建稳健solr集群
solrCloud的搭建可以有两种方式:使用solr内嵌的jetty来搭建;使用外部web容器tomcat来搭建。对于使用jett来搭建参考solr官方的手册照着做肯定ok,下面我主要讲的是如何使用tomcat来搭建solrCloud。
废话不多说,开始我们的工作!
1.搭建tomcat单机版solr
见我的上一篇博文solr安装-tomcat单机版
2.安装配置zookeeper
具体下载,安装,配置不详细说了,很简单。只列出我的关键配置项,如下:
clientPort=4181
server.2=hadoop.datanode5.com:2888:9888
server.3=hadoop.datanode2.com:2888:9888
server.1=hadoop.datanode3.com:2888:9888
3. 配置solrCloud
(1)先配置主服务器tomcat 10.2.50.46
vim /usr/apache-tomcat-7.0.54/bin/catalina.sh 在图片所示位置加入以下代码
JAVA_OPTS="$JAVA_OPTS -Dbootstrap_confdir=/usr/solr/collection1/conf -Dcollection.configName=myconf -DzkHost=hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181"
注:其中DzkHost是用来指定zookeeper服务器的ip和端口。 confdir目录指定所有的索引库都从collection1索引库中同步字段
(2)配置从服务器tomcat 10.2.50.28 和10.2.50.52
vim /home/tomcat/bin/catalina.sh 在和上图同样的位置加入
JAVA_OPTS="-DzkHost=hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181"
(3)配置solr collection配置文件
/usr/solr/solr.xml:配置hostport为tomcat的服务端口;配置zkHhost。
<solr><solrcloud><str name="host">${host:}</str><int name="hostPort">8080</int><str name="hostContext">${hostContext:solr}</str><int name="zkClientTimeout">${zkClientTimeout:15000}</int><bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool><str name="zkHost">hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181</str></solrcloud><shardHandlerFactory name="shardHandlerFactory"class="HttpShardHandlerFactory"><int name="socketTimeout">${socketTimeout:0}</int><int name="connTimeout">${connTimeout:0}</int></shardHandlerFactory></solr>
/usr/solr/collection1/core.properties:删除该文件(这样集群启动后就没有collection)
/usr/solr/collection1/conf/solrconfig.xml:修改如下配置项:
<dataDir>${solr.data.dir:/data_solr/example-collection}</dataDir>
将所有的这些配置同步到各个节点上。
(3) 保存后依次启动tomcat,输入http://10.2.50.46:8080,看到如下界面说明成功
正常情况下,应该是没有collection和core的,我这里是自己创建了一个collection。
(4)创建collection,shard,core
有两种方式:一种是创建collection,自动分配shard和replica;另一种是创建collection,手动分配shard和replica。推荐后者,因为可控性强。
方式一:
curl
'http://localhost:7070/solr/admin/collections?action=CREATE&name=europe-collection&numShards=3&replicationFactor=3&maxShardsPerNode=3'
这样会出来一个collection,它有3个shard,每个shard有1个数据节点,2个备份节点,即该collection共有9个core
缺点:不灵活,不能选择适合的节点,不能选择数据存放路径,不能选择实例存放路径
方式二:
curl 'http://localhost:8080/solr/admin/cores?action=CREATE&name=cz_collection-shard1-replica1&instanceDir=/usr/solr/cz_collection-shard1-replica1&dataDir=/data_solr/cz_collection-shard1-replica1&collection=cz_collection&shard=shard1'
curl 'http://localhost:8080/solr/admin/cores?action=CREATE&name=cz_collection-shard1-replica2&instanceDir=/usr/solr/cz_collection-shard1-replica2&dataDir=/data_solr/cz_collection-shard1-replica2&collection=cz_collection&shard=shard1'
这样可以创建出一个collection,并自己指定该collection的shard和replica的所有配置项。还可以继续接着创建。
以上两种方式的具体api调用,请参看solr官方文档。
(5)集群运维
a.集群会发生变化的就是collection的配置,因此当collection的配置文件发生变化后就应该使用命令更新zookeeper中配置文件信息,solr很好提供了运维工具:
#collection配置
#将配置文件上传到ZooKeeper中
java -classpath .:/usr/solr/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181 -confdir /usr/solr/collection1/conf -confname myconf
#将上传到ZooKeeper中配置文件与Collection相关联
java -classpath .:/usr/solr/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection cz_collection -confname myconf -zkhost hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181
b.对于collection,shard,core运维使用api接口即可,在此不说了。
参考文章:
http://myjeeva.com/solrcloud-cluster-single-collection-deployment.html#deploying-solrcloud
http://wiki.apache.org/solr/SolrCloudTomcat
http://wiki.apache.org/solr/SolrTomcat
http://blog.csdn.net/woshiwanxin102213/article/details/18793271
转载:http://blog.csdn.net/xyls12345/article/details/27504965
转载于:https://blog.51cto.com/zhoufayong/1438527
相关文章:

[pytorch][stepbystep]在pytorch上实现卷积神经网路(CNN)的裁剪(purning)
利用VGG-16对Dogs-vs-Cats数据集进行训练,裁剪VGG-16可以获得3x的运算加速和4x的模型减小 简介 puring神经网络是一个古老的idea,具体可以追溯到1990年(与Yann LeCun的最佳脑损伤[1]工作)。这个想法是,在网络中的许多参数中&#…

linux内存布局及页面映射
在Linux系统中,以32bit x86系统来说,进程的4GB内存空间(虚拟地址空间)被划分成为两个部分 ------用户空间和内核空间,大小分别为0-3G,3-4G。用户进程通常情况下,只能访问用户空间的虚拟地址&…

codeforces Kyoya and Colored Balls
题解见:http://blog.csdn.net/libin56842/article/details/46650209 注意这里的组合数取模~~~ 1 /*Author :usedrose */2 /*Created Time :2015/8/7 13:31:44*/3 /*File Name :2.cpp*/4 #pragma comment(linker, "/STACK:1024000000,1024000000") 5 #inc…

存储mysql数据存在特殊字符时处理_转义 存储数据时特殊符号的处理
function url_base64_encode($str){//将这个方法处理后的数据可以存储,不会有特殊符号if($str"")return "";$codebase64_encode($str);//$codedHQ;$codestr_replace(,"!",$code);//把所用""替换成"!"$codestr_re…

虚拟化中的SR-IOV
虚拟化环境中有很多的硬件加速技术,这些技术标准来源于行业内的领导者或各种组织机构,但是在实际项目落地时又有哪些会被启用呢?哪些启用的功能带来了性能上明显的提升呢?那么这些加速技术如果不痛不痒的话那么它们的存在究竟意义…

查看线程的运行状态
实例说明线程共有六个状态,即新建、运行(可运行)、阻塞、等待、计时等待和终止。当使用new操作符创建新线程时,线程处于“新建状态”。当调用start方法时,线程处于运行(可运行)状态。当线程需要…

Linux 的内存管理工具和调优参数
1. free 2. top 3. vmstat 4. slabtop; 5. pmap 6. dmesg 7. /proc/meminfo 8. /proc/sys/vm 目录下的文件 9. sync 10./proc/zoneinfo 11./proc/pagetypeinfo 查看内存工具:1.free free - Display amount of free and used memory in the system rootubuntu:/home/…

java多线程查询_利用Java函数式接口处理多线程查询
Java函数式接口有且只有一个抽象方法的接口被称为函数式接口.FunctionalInterface注解: 该注解可用于一个接口的定义上, 一旦使用该注解来定义接口, 编译器将会强制检查该接口是否确实有且仅有一个抽象方法, 否则将会报错.该注解不是必须的, 只要符合函数式接口的定义,那么这个…

奇妙的算法之LCS妙解
LCS算法妙解 LCS问题简述:最长公共子序列 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则S 称为已知序列的最长公共子序列。 LCS问题的分支:最长公共子串与最长公共子序列 子串&…
关于PreferenceActivity的使用和一些问题的解决(自己定义Title和取值)
android的Setting往往用PreferenceActivity来写的 我们在建立layout文件: <PreferenceScreen xmlns:android"http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title"常规设置" android:key"set_local">&…

python学习-25 函数递归
递归 例如: def abc(n):print(n)if int(n/2) 0:return nreturn abc(int(n/2))abc(10) 运行结果: 10 5 2 1Process finished with exit code 0 2.小程序实例 import time people_list [小明,小红,小刚,小王,小青]def ask(people_list):if len(people_li…

二维指针删除单向链表
Linus slashdot: https://meta.slashdot.org/story/12/10/11/0030249 原文: https://coolshell.cn/articles/8990.html Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点…

对比java_java集合对比
list与Set、Map区别及适用场景1、List,Set都是继承自Collection接口,Map则不是2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注…

.ARM.exidx
简介: .ARM.exidx is the section containing information for unwinding the stack. If your C program has functions that print out a stack backtrace, the functions will likely depend on this section being present. 相关的编译选项 -funwind-tables 二问…

Oracle VM VirtualBox安裝Windows 2000失败
问题:VirtualBox下安装Windows2000,设置网络后进入最后一步,复制组件……然后就是重启;再试还是重启!解决:在Oracle网站上查了一下资料:http://www.virtualbox.org/manual/ch12.html#idp1278616…

用户/目录操作
用户操作 useradd/adduser 创建用户 passwd 修改用户密码 userdel 删除用户 usermod 修改用户信息 -g<群组> 修改用户所属群组 -G<群组> 修改用户所属的附加群组 -l<帐户名> 修改账户名称 -u 修改用户ID -L锁定用户密码 -U 解除密码锁定 adduser -u用…
linux内核 -内存管理模块概图
1.从进程(task)的角度来看内存管理 每个进程对应一个task_struct;每个task_struct 里面包含指向mm_struct 的指针mm, mm_struct 里面的主要成员: a. 指向vma链表的头指针:mmap b. 指向vma红黑树的根节点: mm_rb c. 指向进程列表的指针pgb;vma(vm_are…

求一个字符串中连续出现的次数最多的子串
求一个字符串中连续出现的次数最多的子串。例如字符串“abababc”,最多连续出现的为ab,连续出现三次。要和求一个字符串中的最长重复子串区分开来,还是上面的字符串,那么最长的重复子串为abab。两个题目的解法有些类似,都用到了后…

java ftp 判断文件是否存在_FTP判断文件是否存在
FTP Client使用的是Apache Commons Net 3.3/*** 检查FTP上指定文件是否存在* param remoteFilePartNameList 文件路径* throws BusinessException* throws IOException*/private void checkFtpFileExist(List remoteFilePartNameList) throws BusinessException, IOException {…

软件定义光网络-SDON
为什么80%的码农都做不了架构师?>>> 软件定义光网络-SDON 随着宽带业务与应用的持续增长,光网络面临着新的发展机遇与技术挑战。作为当前业界研究热点之一,SDON聚焦于将软件定义技术融入光网络的综合解决方案,其关键技…

记录一次爬取某昵称网站的爬虫
同学跑去实习了...然后工作的时候要她用python写一个爬虫,爬取一万个可以用的用户昵称。(为什么他们都能找到工作啊QAQ) 然后,她找到了我...然后在我动笔的时候,发现之前写过的爬虫基本上忘完了...无奈下只好对着以前…

《LINUX3.0内核源代码分析》第一章:内存寻址
https://blog.csdn.net/ekenlinbing/article/details/7613334 摘要:本章主要介绍了LINUX3.0内存寻址方面的内容,重点对follow_page函数进行注释,以帮助读者大致了解ARM A9的页表组织。 读者需要理解一些基本概念:虚拟地址、物理地…

java integer int 比较_java Integer和int之间的比较问题是什么?
展开全部java Integer和int之间e68a84e8a2ad3231313335323631343130323136353331333365633864的比较问题。求解释public static void main(String[] args) { // TODO Auto-generated method stub Integer a new Integer(1); Integer b new Integer(1); int c1; Integer e 1;…

Oracle 12C -- 基于sequence的列的默认值
12C支持先创建一个sequence,然后再将该sequence指定为某个列的值的默认表达式。 和"identity column"具有以下不同点: 对列的个数没有限制 sequence必须在列定义之前定义 如果删除了sequence,会导致后面的insert报错 表的owner&…

Python的XML-RPC学习
编写客户端提交数据到服务器处理是程序员最常碰到的几个问题之一。各种不同的语言对此都有相应的解决方案。比如Unix下,C程序员们可以用SUNRPC,Java程序员则使用RMI来处理。大多数语言还都可以使用Web Service或者ICE。它们的使用方法类似,编…

Anaconda安装,jupyter notebook 使用说明
conda install pandas---安装pandas包 conda remove package_names conda update package_names conda list ---列出该环境下安装的package conda install nb_conda --------安装nb_conda用于notebook自动关联nb_conda的环境 conda create -n env_name package_name -------…
ARM32页表-虚拟地址到物理地址的转换
ARM32的页表 页表就是用于将虚拟地址转换为物理地址的转换关系表。访问虚拟地址时,计算机通过页表找到对应的实际物理地址访问。 我们在上一节介绍了内存管理模块概图, 怎么完成从pgd 到 page的转化呢? linux 内核code是通过follow_page来完成的…

java 重载 参数子类_java - Java中带有子类参数的函数重载 - 堆栈内存溢出
这个问题已经在这里有了答案:我有一个扩展了另一个类的类(在这种情况下,这是一个例外):public class NewTypeException extends Exception {private String exceptionField;public String getExceptionField() {return exceptionField;}publi…

Caused by: java.sql.BatchUpdateException
Caused by: java.sql.BatchUpdateException: Table (%s) has been dropped, altered or renamed.解决方法重启项目转载于:https://www.cnblogs.com/mySummer/p/4723561.html

do{ ...}while(0)应用技巧
辅助定义复杂的宏example: #define A(args) do { a(args); b() } while(0);如果定义#define A(args) a(args);b();if(i > 0) A(i) if(i > 0 )do { a(2);b();} while(0) 或者while(1)a(args);b(); 这不是我们想要的,因为第二个b();不会被执行。代替g…