设为首页 收藏本站
查看: 1544|回复: 0

[经验分享] SolrCloud 分布式集群安装部署(solr4.8.1 + zookeeper +tomcat)

[复制链接]

尚未签到

发表于 2015-11-12 01:11:54 | 显示全部楼层 |阅读模式
  SolrCloud
分布式集群安装部署

安装软件包准备

·        apache-tomcat-7.0.54
·        jdk1.7
·        solr-4.8.1
·        zookeeper-3.4.5




注:以上软件都是基于 Linux环境的 64软件,以上软件请到各自的官网下载。

服务器准备

为搭建这个集群,准备三台服务器,分别为
192.168.0.112 --master 角色
192.168.0.113 -- slave 角色
192.168.0.114 -- slave 角色




搭建基础环境

1.      安装 jdk1.7 -这个大家都会安装,就不费键盘了。(记得配置环境变量)
2.     配置主机 /etc/hosts 文件 - 当然,如果内部有内部DNS解析,就不需要配置 hosts文件了。在 3 台服务器的 /etc/hosts 中添加以下记录
192.168.0.112 SOLR-CLOUD-001
192.168.0.113 SOLR-CLOUD-002
192.168.0.114 SOLR-CLOUD-003




zookeeper 部署

Zookeeper 分布式服务框架是 Apache Hadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

注:Zookeeper集群的机器个数推荐是奇数台,半数机器挂掉,服务是可以正常提供的

首先以 192.168.0.112为例来搭建 zookeeper

1.      在软件部署目录下面部署 zookeeper,把下载的 zookeeper-3.4.5解压到软件部署目录 /usr/local

注:为了统一部署,以及以后自动化方便,必须统一软件部署目录,目前我这边是以 ``/usr/local```为软件部署主目录

2.     建立 zookeeper的数据、日志以及配置文件目录

mkdir -p /usr/local/data/zookeeper-data/
mkdir -p /usr/local/data/zookeeper-data/logs/



注: /usr/local/data 是定义的统一存放数据的目录

1.       zookeeper
conf
目录下面的 zoo_sample.cfg 修改成 zoo.cfg,并且对其内容做修改

cp -av /usr/local/zookeeper-3.4.5/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.5/conf/zoo.cfg


修改 zoo.cfg 的内容,主要是修改
dataDir
dataLogDir server.1-3

# The number of millisecondsof each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here isjust
# example sakes.
dataDir=/usr/local/data/zookeeper-data
dataLogDir=/usr/local/data/zookeeper-data/logs
server.1=SOLR-CLOUD-001:2888:3888
server.2=SOLR-CLOUD-002:2888:3888
server.3=SOLR-CLOUD-003:2888:3888
# the port at which the clients will connect
clientPort=2181
#
# Be sure to read the maintenance sectionof the
# administrator guide before turning on autopurge.
#
#http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retainindataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" todisable auto purge feature
#autopurge.purgeInterval=1




注:

tickTime
:这个时间是作为 Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime时间就会发送一个心跳。

initLimit
:这个配置项是用来配置 Zookeeper接受客户端(这里所说的客户端不是用户连接 Zookeeper服务器的客户端,而是
Zookeeper
服务器集群中连接到 Leader Follower服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过
10
个心跳的时间(也就是tickTime)长度后 Zookeeper服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是52000=10秒。

syncLimit
:这个配置项标识 Leader Follower之间发送消息,请求和应答时间长度,最长不能超过多少个
tickTime
的时间长度,总的时间长度就是 2
2000=4

dataDir
:顾名思义就是 Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。

dataLogDir
Zookeeper的日志文件位置。

server.A=B
CD:其中 A是一个数字,表示这个是第几号服务器;B是这个服务器的
ip
地址;C
表示的是这个服务器与集群中的 Leader服务器交换信息的端口;D表示的是万一集群中的 Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的
Leader
,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B都是一样,所以不同的 Zookeeper实例通信端口号不能一样,所以要给它们分配不同的端口号。

clientPort
:这个端口就是客户端连接 Zookeeper服务器的端口,Zookeeper会监听这个端口,接受客户端的访问请求。

1.      同步 zookeeper的配置以及相关目录到其他两台服务中

scp -r /usr/local/zookeeper-3.4.5 solr@192.168.0.113:/usr/local
scp -r /usr/local/data/zookeeper-data solr@192.168.0.113:/usr/local/data
scp -r /usr/local/zookeeper-3.4.5 solr@192.168.0.114:/usr/local
scp -r /usr/local/data/zookeeper-data solr@192.168.0.114:/usr/local/data
注:也可以采用命令 scp -r /usr/local/zookeeper-3.4.5  192.168.0.114:/usr/local
来同步(输入密码即可)




1.      创建 myid文件存储该机器的标识码,比如 server.1的标识码就是
“1”
myid文件的内容就一行: 1

192.168.0.112
echo"1" >> /usr/local/data/zookeeper-data/myid
192.168.0.113
echo"2" >> /usr/local/data/zookeeper-data/myid
192.168.3
echo"3" >> /usr/local/data/zookeeper-data/myid




1.      分别启动三台服务器的 zookeeper

cd /usr/local/zookeeper-3.4.5/bin


./zkServer.sh start

查看 zookeeper的状态

[solr@SOLR-CLOUD-001 bin]$ ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: leader
[solr@SOLR-CLOUD-002 bin]$ ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[solr@SOLR-CLOUD-003 bin]$ ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower




Solrcloud分布式集群搭建

1.      解压部署 tomcat -解压部署后的目录为 /usr/local/apache-tomcat-7.0.54

2.     解压 solr-4.8.1的压缩包,并且把solr-4.8.1/example/webapps/solr.war解压至
/usr/local/solr
目录下

3.      solr-4.8.1\example\lib\ext下的 jar包放到solr\WEB-INF\lib

4.      192.168.0.112为例,创建以下目录

mkdir -p /usr/local/solrcloud/config-files
mkdir -p /usr/local/solrcloud/solr-lib




1.       solr/WEB-INF/lib下的所有 jar包拷贝到
/usr/local/solrcloud/solr-lib
目录

cp -av /usr/local/solr/WEB-INF/lib/*.jar /usr/local/solrcloud/solr-lib

1.      solr/example/solr/collection1/conf下的所有文件拷贝到 /usr/local/solrcloud/config-files目录

cp -av /usr/local/solr/example/solr/collection1/conf/*/usr/local/solrcloud/config-files/

1.       /usr/local/solr目录拷贝到 /usr/local/apache-tomcat-7.0.54/webapps目录下面

cp -av /usr/local/solr /usr/local/apache-tomcat-7.0.54/webapps

1.      创建 solr的数据目录 /usr/local/solr-cores 并在该目录下生成 solr.xml这是 solr 的核心配置文件

原始的配置文件如下

<?xml version=&quot;1.0&quot;encoding=&quot;UTF-8&quot; ?>
<solr persistent=&quot;true&quot;>
<logging enabled=&quot;true&quot;>
<watcher size=&quot;100&quot;threshold=&quot;INFO&quot; />
</logging>
<cores defaultCoreName=&quot;collection1&quot;adminPath=&quot;/admin/cores&quot;host=&quot;${host:}&quot;hostPort=&quot;8080&quot;hostContext=&quot;${hostContext:solr}&quot;zkClientTimeout=&quot;${zkClientTimeout:15000}&quot;>
</cores>
</solr>




1.      创建/usr/local/apache-tomcat-7.0.54/conf/Catalina目录
/usr/local/apache-tomcat-7.0.54/conf/Catalina/localhost
目录

mkdir -p /usr/local/apache-tomcat-7.0.54/conf/Catalina
mkdir -p /usr/local/apache-tomcat-7.0.54/conf/Catalina/localhost




1.       /usr/local/apache-tomcat-7.0.54/conf/Catalina/localhost下创建 solr.xml文件,此文件为
Solr/home
的配置文件

<?xml version=&quot;1.0&quot;encoding=&quot;UTF-8&quot;?>
<Context docBase=&quot;/usr/local/tomcat7/webapps/solr&quot;debug=&quot;0&quot;crossContext=&quot;true&quot;>
<Environment name=&quot;solr/home&quot;type=&quot;java.lang.String&quot;value=&quot;/usr/local/solr-cores&quot;override=&quot;true&quot;/>
</Context>




1.      修改 tomcat/bin/cataina.sh ,加入以下内容

CATALINA_OPTS=&quot;$CATALINA_OPTS-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9060-Djava.rmi.server.hostname=`/sbin/ifconfig bond0 |grep -a &quot;inet addr:&quot; |awk -F&quot;:&quot; '{print$2}' |egrep -o '([0-9]{1,3}\.?){4}'`&quot;
CATALINA_OPTS=&quot;$CATALINA_OPTS-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false&quot;
JAVA_OPTS=&quot;$JAVA_OPTS-DzkHost=GD6-SOLR-CLOUD-001:2181,GD6-SOLR-CLOUD-002:2181,GD6-SOLR-CLOUD-003:2181&quot;
JAVA_OPTS=&quot;$JAVA_OPTS -Xmx8192m -Xms8192m -Xmn4g -Xss256k-XX:ParallelGCThreads=24 -XX:+UseConcMarkSweepGC -XX:PermSize=256m-XX:MaxPermSize=256m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps-XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime-XX:+PrintHeapAtGC -Xloggc:/usr/local/logs/tomcat/gc`date +%Y%m%d%H%M%S`.log -XX:ErrorFile=\&quot;/usr/local/logs/tomcat/java_error.log\&quot;&quot;




1.      将以上配置同步到其他两台服务器

scp -r /usr/local/apache-tomcat-7.0.54 solr@192.168.0.113:/usr/local
scp -r /usr/local/solrcloud solr@192.168.0.113:/usr/local
scp -r /usr/local/solr-cores solr@192.168.0.113:/usr/local
scp -r /usr/local/apache-tomcat-7.0.54 solr@192.168.0.114:/usr/local
scp -r /usr/local/solrcloud solr@192.168.0.114:/usr/local
scp -r /usr/local/solr-cores solr@192.168.0.114:/usr/local





1.      SolrCloud是通过 ZooKeeper集群来保证配置文件的变更及时同步到各个节点上,所以,需要将配置文件上传到
ZooKeeper
集群中:执行如下操作(以下ip均可使用域名进行操作)

java -classpath .:/usr/local/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmdupconfig -zkhost192.168.0.112:2181,192.168.0.113:2181,192.168.0.114:2181 -confdir /usr/local/solrcloud/config-files/  -confname myconf




1.      校验 zookeeper的配置文件

cd /usr/local/zookeeper-3.4.5/bin
./zkCli.sh -server 192.168.0.112:2181
[zk: 192.168.01.2:2181(CONNECTED)0] ls /
[configs, collections, zookeeper]
[zk: 192.168.01.2:2181(CONNECTED)1] ls /configs
[myconf]
[zk: 192.168.01.2:2181(CONNECTED)2] ls /configs/myconf
[admin-extra.menu-top.html, currency.xml, protwords.txt,mapping-FoldToASCII.txt, solrconfig.xml, lang, stopwords.txt, spellings.txt, mapping-ISOLatin1Accent.txt, admin-extra.html, xslt, scripts.conf, synonyms.txt, update-script.js, velocity, elevate.xml, admin-extra.menu-bottom.html, schema.xml]
[zk: 192.168.01.2:2181(CONNECTED)3]




1.      启动 tomcat,首先启动 master 192.168.0.112上面的
tomcat

cd /usr/local/apache-tomcat-7.0.54/bin

./startup.sh

1.      启动 192.168.0.113 192.168.0.114
tomcat

2.     访问 http://192.168.0.112:8080/solr 可以看到下图

DSC0000.jpg DSC0001.jpg

  

创建 Collection及初始 Shard

curl 'http://192.168.0.112:8080/solr/admin/collections?action=CREATE&name=mycollection&numShards=1&replicationFactor=1'
curl 'http://192.168.0.113:8080/solr/admin/collections?action=CREATE&name=mycollection&numShards=1&replicationFactor=1'
curl 'http://192.168.0.114:8080/solr/admin/collections?action=CREATE&name=mycollection&numShards=1&replicationFactor=1'



DSC0002.jpg

  

  
  
配置IK分词

  1.        进入目录:cd /usr/local/solr-cores
  创建lib目录:mkdir lib 在lib中加入文件IKAnalyzer.cfg.xml、stopword.dic
  
  2.        进入目录:cd /usr/local/tomcat7/webapps/solr/WEB-INF/lib
  加入jar包:IKAnalyzer2012FF_u1.jar
  
  3.  Cd /usr/local/solrcloud/config-files
  打开schema.xml文件在最后添加如下内容:
  <!--ik分词-->
  <fieldType name=&quot;text_ik&quot;class=&quot;solr.TextField&quot;>
<analyzertype=&quot;index&quot; isMaxWordLength=&quot;false&quot;class=&quot;org.wltea.analyzer.lucene.IKAnalyzer&quot;/>
<analyzertype=&quot;query&quot; isMaxWordLength=&quot;true&quot;class=&quot;org.wltea.analyzer.lucene.IKAnalyzer&quot;/>
</fieldType>




  
  同样可以加入数据库定义字段:
  例如:
  <field name=&quot;title&quot; type=&quot;text_ik&quot;indexed=&quot;true&quot; stored=&quot;true&quot;/>
<fieldname=&quot;path&quot; type=&quot;string&quot; indexed=&quot;false&quot;stored=&quot;true&quot;/>


  
  
  4.  将以上配置同步到另外两台机器上
  


  5.  最后将配置文件同步到zookeeper上
  执行命令:
  java-classpath .:/usr/local/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmdupconfig -zkhost 192.168.0.112:2181,192.168.0.113:2181,192.168.0.114:2181-confdir /usr/local/solrcloud/config-files/ -confname myconf
  
  6.  重新启动即可
  

  
  
  注:
  也可以完全自定义schema.xml文件,配置自己所需要的内容(初学者最好不要这样做)
  <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>
<schema name=&quot;zwx_solr&quot; version=&quot;1.5&quot;>
<fields>
<fieldname=&quot;_version_&quot; type=&quot;long&quot; indexed=&quot;true&quot;stored=&quot;true&quot;/>
<!--数据库中的字段-->
<fieldname=&quot;id&quot; type=&quot;string&quot; indexed=&quot;true&quot;stored=&quot;true&quot; multiValued=&quot;false&quot;required=&quot;true&quot;/>
<fieldname=&quot;title&quot; type=&quot;text_ik&quot; indexed=&quot;true&quot; stored=&quot;true&quot;/>
<fieldname=&quot;path&quot; type=&quot;string&quot; indexed=&quot;false&quot;stored=&quot;true&quot;/>
<fieldname=&quot;content&quot; type=&quot;text_ik&quot; indexed=&quot;true&quot;stored=&quot;true&quot;/>
<fieldname=&quot;time&quot; type=&quot;tdate&quot; indexed=&quot;true&quot;stored=&quot;true&quot;/>
<fieldname=&quot;author&quot; type=&quot;text_ik&quot; indexed=&quot;true&quot;stored=&quot;true&quot;/>
<fieldname=&quot;fromsite&quot; type=&quot;text_ik&quot; indexed=&quot;true&quot;stored=&quot;true&quot;/>
<fieldname=&quot;url&quot; type=&quot;string&quot; indexed=&quot;true&quot;stored=&quot;true&quot;/>
</fields>
<uniqueKey>id</uniqueKey>
<types>
<fieldTypename=&quot;string&quot; class=&quot;solr.StrField&quot;sortMissingLast=&quot;true&quot; />
<fieldTypename=&quot;boolean&quot; class=&quot;solr.BoolField&quot;sortMissingLast=&quot;true&quot;/>
<fieldTypename=&quot;int&quot; class=&quot;solr.TrieIntField&quot;precisionStep=&quot;0&quot; positionIncrementGap=&quot;0&quot;/>
<fieldTypename=&quot;float&quot; class=&quot;solr.TrieFloatField&quot;precisionStep=&quot;0&quot; positionIncrementGap=&quot;0&quot;/>
<fieldTypename=&quot;long&quot; class=&quot;solr.TrieLongField&quot;precisionStep=&quot;0&quot; positionIncrementGap=&quot;0&quot;/>
<fieldTypename=&quot;double&quot; class=&quot;solr.TrieDoubleField&quot;precisionStep=&quot;0&quot; positionIncrementGap=&quot;0&quot;/>
<fieldTypename=&quot;tint&quot; class=&quot;solr.TrieIntField&quot; precisionStep=&quot;8&quot;positionIncrementGap=&quot;0&quot;/>
<fieldTypename=&quot;tfloat&quot; class=&quot;solr.TrieFloatField&quot;precisionStep=&quot;8&quot; positionIncrementGap=&quot;0&quot;/>
<fieldTypename=&quot;tlong&quot; class=&quot;solr.TrieLongField&quot;precisionStep=&quot;8&quot; positionIncrementGap=&quot;0&quot;/>
<fieldTypename=&quot;tdouble&quot; class=&quot;solr.TrieDoubleField&quot;precisionStep=&quot;8&quot; positionIncrementGap=&quot;0&quot;/>
<fieldTypename=&quot;date&quot; class=&quot;solr.TrieDateField&quot;precisionStep=&quot;0&quot; positionIncrementGap=&quot;0&quot;/>
<fieldTypename=&quot;tdate&quot; class=&quot;solr.TrieDateField&quot; precisionStep=&quot;6&quot;positionIncrementGap=&quot;0&quot;/>
<fieldtypename=&quot;binary&quot; class=&quot;solr.BinaryField&quot;/>
<fieldTypename=&quot;random&quot; class=&quot;solr.RandomSortField&quot;indexed=&quot;true&quot; />
<fieldTypename=&quot;text_general&quot; class=&quot;solr.TextField&quot; positionIncrementGap=&quot;100&quot;>
<analyzertype=&quot;index&quot;>
<tokenizerclass=&quot;solr.StandardTokenizerFactory&quot;/>
<filterclass=&quot;solr.StopFilterFactory&quot; ignoreCase=&quot;true&quot;words=&quot;stopwords.txt&quot; />
<filterclass=&quot;solr.LowerCaseFilterFactory&quot;/>
</analyzer>
<analyzertype=&quot;query&quot;>
<tokenizerclass=&quot;solr.StandardTokenizerFactory&quot;/>
<filterclass=&quot;solr.StopFilterFactory&quot; ignoreCase=&quot;true&quot;words=&quot;stopwords.txt&quot; />
<filterclass=&quot;solr.SynonymFilterFactory&quot; synonyms=&quot;synonyms.txt&quot;ignoreCase=&quot;true&quot; expand=&quot;true&quot;/>
<filterclass=&quot;solr.LowerCaseFilterFactory&quot;/>
</analyzer>
</fieldType>
<!--ik分词-->
<fieldTypename=&quot;text_ik&quot; class=&quot;solr.TextField&quot;>
<analyzertype=&quot;index&quot; isMaxWordLength=&quot;false&quot;class=&quot;org.wltea.analyzer.lucene.IKAnalyzer&quot;/>
<analyzertype=&quot;query&quot; isMaxWordLength=&quot;true&quot;class=&quot;org.wltea.analyzer.lucene.IKAnalyzer&quot;/>
</fieldType>
<!--#号分词 自定义分词-->
<fieldTypename=&quot;text_xx&quot; class=&quot;solr.TextField&quot;>
</fieldType>
</types>
</schema>




  


  原文出自:http://blog.segmentfault.com/yexiaobai/1190000000595712

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-138055-1-1.html 上篇帖子: solr suggest检查建议 下篇帖子: 测试tomcat同solr的连接
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表