您的位置:首页 > 运维架构 > Tomcat

SolrCloud 分布式集群安装部署(solr4.8.1 + zookeeper +tomcat)

2014-08-08 00:10 906 查看
 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的时间长度,总的时间长度就是 22000=4秒

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

dataLogDir: Zookeeper的日志文件位置。

server.A=B:C:D:其中 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="1.0"encoding="UTF-8" ?>
<solr persistent="true">
<logging enabled="true">
<watcher size="100"threshold="INFO" />
</logging>
<cores defaultCoreName="collection1"adminPath="/admin/cores"host="${host:}"hostPort="8080"hostContext="${hostContext:solr}"zkClientTimeout="${zkClientTimeout:15000}">
</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="1.0"encoding="UTF-8"?>
<Context docBase="/usr/local/tomcat7/webapps/solr"debug="0"crossContext="true">
<Environment name="solr/home"type="java.lang.String"value="/usr/local/solr-cores"override="true"/>
</Context>

1.      修改 tomcat/bin/cataina.sh ,加入以下内容
CATALINA_OPTS="$CATALINA_OPTS-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9060-Djava.rmi.server.hostname=`/sbin/ifconfig bond0 |grep -a "inet addr:" |awk -F":" '{print$2}' |egrep -o '([0-9]{1,3}\.?){4}'`"
CATALINA_OPTS="$CATALINA_OPTS-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS-DzkHost=GD6-SOLR-CLOUD-001:2181,GD6-SOLR-CLOUD-002:2181,GD6-SOLR-CLOUD-003:2181"
JAVA_OPTS="$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=\"/usr/local/logs/tomcat/java_error.log\""

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 可以看到下图



  
创建 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'
 



 

 

 

配置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="text_ik"class="solr.TextField">
<analyzertype="index" isMaxWordLength="false"class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzertype="query" isMaxWordLength="true"class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

 

同样可以加入数据库定义字段:

例如:

<field name="title" type="text_ik"indexed="true" stored="true"/>
<fieldname="path" type="string" indexed="false"stored="true"/>

 

 

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="1.0" encoding="UTF-8"?>

<schema name="zwx_solr" version="1.5">

<fields>
<fieldname="_version_" type="long" indexed="true"stored="true"/>

<!--数据库中的字段-->
<fieldname="id" type="string" indexed="true"stored="true" multiValued="false"required="true"/>

<fieldname="title" type="text_ik" indexed="true" stored="true"/>
<fieldname="path" type="string" indexed="false"stored="true"/>
<fieldname="content" type="text_ik" indexed="true"stored="true"/>
<fieldname="time" type="tdate" indexed="true"stored="true"/>
<fieldname="author" type="text_ik" indexed="true"stored="true"/>
<fieldname="fromsite" type="text_ik" indexed="true"stored="true"/>
<fieldname="url" type="string" indexed="true"stored="true"/>

</fields>

<uniqueKey>id</uniqueKey>

<types>

<fieldTypename="string" class="solr.StrField"sortMissingLast="true" />

<fieldTypename="boolean" class="solr.BoolField"sortMissingLast="true"/>

<fieldTypename="int" class="solr.TrieIntField"precisionStep="0" positionIncrementGap="0"/>
<fieldTypename="float" class="solr.TrieFloatField"precisionStep="0" positionIncrementGap="0"/>
<fieldTypename="long" class="solr.TrieLongField"precisionStep="0" positionIncrementGap="0"/>
<fieldTypename="double" class="solr.TrieDoubleField"precisionStep="0" positionIncrementGap="0"/>

<fieldTypename="tint" class="solr.TrieIntField" precisionStep="8"positionIncrementGap="0"/>
<fieldTypename="tfloat" class="solr.TrieFloatField"precisionStep="8" positionIncrementGap="0"/>
<fieldTypename="tlong" class="solr.TrieLongField"precisionStep="8" positionIncrementGap="0"/>
<fieldTypename="tdouble" class="solr.TrieDoubleField"precisionStep="8" positionIncrementGap="0"/>

<fieldTypename="date" class="solr.TrieDateField"precisionStep="0" positionIncrementGap="0"/>

<fieldTypename="tdate" class="solr.TrieDateField" precisionStep="6"positionIncrementGap="0"/>

<fieldtypename="binary" class="solr.BinaryField"/>

<fieldTypename="random" class="solr.RandomSortField"indexed="true" />

<fieldTypename="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzertype="index">
<tokenizerclass="solr.StandardTokenizerFactory"/>
<filterclass="solr.StopFilterFactory" ignoreCase="true"words="stopwords.txt" />

<filterclass="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzertype="query">
<tokenizerclass="solr.StandardTokenizerFactory"/>
<filterclass="solr.StopFilterFactory" ignoreCase="true"words="stopwords.txt" />
<filterclass="solr.SynonymFilterFactory" synonyms="synonyms.txt"ignoreCase="true" expand="true"/>
<filterclass="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

<!--ik分词-->
<fieldTypename="text_ik" class="solr.TextField">
<analyzertype="index" isMaxWordLength="false"class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzertype="query" isMaxWordLength="true"class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

<!--#号分词 自定义分词-->
<fieldTypename="text_xx" class="solr.TextField">

</fieldType>
</types>

</schema>

原文出自:http://blog.segmentfault.com/yexiaobai/1190000000595712
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息