CentOS 6 study notes (14)

CentOS6 environment to build Solr cluster (SolrCloud)

Posted by Chen Xingxu on February 15, 2021

CentOS 6学习笔记(十四)–CentOS6环境搭建Solr集群(SolrCloud)

安装 Solr 单机版

建议阅读我之前发布的笔记:

CentOS 6学习笔记(十)–CentOS6环境安装Solr

搭建 ZooKeeper 集群

建议阅读我之前发布的笔记:

CentOS 6学习笔记(十三)–CentOS6环境搭建ZooKeeper集群

搭建 Solr 集群 (SolrCloud)

本笔记通过在单台服务器上运行 4 个 Solr 实例的方式来模拟 SolrCloud。

创建与配置 Tomcat 实例

创建 4 例 Tomcat

#复制4个tomcat
cp -r /usr/local/apache-tomcat-7.0.47 /usr/local/solr-cloud/tomcat01
cp -r /usr/local/apache-tomcat-7.0.47 /usr/local/solr-cloud/tomcat02
cp -r /usr/local/apache-tomcat-7.0.47 /usr/local/solr-cloud/tomcat03
cp -r /usr/local/apache-tomcat-7.0.47 /usr/local/solr-cloud/tomcat04

cp -r /usr/local/solr/tomcat/webapps/solr /usr/local/solr-cloud/tomcat01/webapps/
cp -r /usr/local/solr/tomcat/webapps/solr /usr/local/solr-cloud/tomcat02/webapps/
cp -r /usr/local/solr/tomcat/webapps/solr /usr/local/solr-cloud/tomcat03/webapps/
cp -r /usr/local/solr/tomcat/webapps/solr /usr/local/solr-cloud/tomcat04/webapps/

配置实例 1

vim /usr/local/solr-cloud/tomcat01/conf/server.xml

配置以下内容

<Server port="8105" shutdown="SHUTDOWN">
    
<Connector port="8180" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    
<Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />

配置实例 2

vim /usr/local/solr-cloud/tomcat02/conf/server.xml

配置以下内容

<Server port="8205" shutdown="SHUTDOWN">
    
<Connector port="8280" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    
<Connector port="8209" protocol="AJP/1.3" redirectPort="8443" />

配置实例 3

vim /usr/local/solr-cloud/tomcat03/conf/server.xml

配置以下内容

<Server port="8305" shutdown="SHUTDOWN">
    
<Connector port="8380" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    
<Connector port="8309" protocol="AJP/1.3" redirectPort="8443" />

配置实例 4

vim /usr/local/solr-cloud/tomcat04/conf/server.xml

配置以下内容

<Server port="8405" shutdown="SHUTDOWN">
    
<Connector port="8480" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    
<Connector port="8409" protocol="AJP/1.3" redirectPort="8443" />

创建与配置 Solrhome

创建 4 例 Solrhome

cp -r /usr/local/solr/solrhome /usr/local/solr-cloud/solrhome01
cp -r /usr/local/solr/solrhome /usr/local/solr-cloud/solrhome02
cp -r /usr/local/solr/solrhome /usr/local/solr-cloud/solrhome03
cp -r /usr/local/solr/solrhome /usr/local/solr-cloud/solrhome04

配置 web.xml

配置实例 1 的 web.xml

vim /usr/local/solr-cloud/tomcat01/webapps/solr/WEB-INF/web.xml

配置以下内容

<env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>/usr/local/solr-cloud/solrhome01/</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

配置实例 2 的 web.xml

vim /usr/local/solr-cloud/tomcat02/webapps/solr/WEB-INF/web.xml

配置以下内容

<env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>/usr/local/solr-cloud/solrhome02/</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

配置实例 3 的 web.xml

vim /usr/local/solr-cloud/tomcat03/webapps/solr/WEB-INF/web.xml

配置以下内容

<env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>/usr/local/solr-cloud/solrhome03/</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

配置实例 4 的 web.xml

vim /usr/local/solr-cloud/tomcat04/webapps/solr/WEB-INF/web.xml

配置以下内容

<env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>/usr/local/solr-cloud/solrhome04/</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

配置 solr.xml

配置实例 1 的 solr.xml

vim /usr/local/solr-cloud/solrhome01/solr.xml

配置以下内容

<solrcloud>
    <str name="host">192.168.25.155</str>
    <int name="hostPort">8180</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>

配置实例 2 的 solr.xml

vim /usr/local/solr-cloud/solrhome02/solr.xml

配置以下内容

<solrcloud>
    <str name="host">192.168.25.155</str>
    <int name="hostPort">8280</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>

配置实例 3 的 solr.xml

vim /usr/local/solr-cloud/solrhome03/solr.xml

配置以下内容

<solrcloud>
    <str name="host">192.168.25.155</str>
    <int name="hostPort">8380</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>

配置实例 4 的 solr.xml

vim /usr/local/solr-cloud/solrhome04/solr.xml

配置以下内容

<solrcloud>
    <str name="host">192.168.25.155</str>
    <int name="hostPort">8480</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>

配置 catalina.sh

配置实例 1 的 catalina.sh

vim /usr/local/solr-cloud/tomcat01/bin/catalina.sh

配置以下内容

JAVA_OPTS="-DzkHost=192.168.25.155:2181,192.168.25.155:2182,192.168.25.155:2183"

配置实例 2 的 catalina.sh

vim /usr/local/solr-cloud/tomcat02/bin/catalina.sh

配置以下内容

JAVA_OPTS="-DzkHost=192.168.25.155:2181,192.168.25.155:2182,192.168.25.155:2183"

配置实例 3 的 catalina.sh

vim /usr/local/solr-cloud/tomcat03/bin/catalina.sh

配置以下内容

JAVA_OPTS="-DzkHost=192.168.25.155:2181,192.168.25.155:2182,192.168.25.155:2183"

配置实例 4 的 catalina.sh

vim /usr/local/solr-cloud/tomcat04/bin/catalina.sh

配置以下内容

JAVA_OPTS="-DzkHost=192.168.25.155:2181,192.168.25.155:2182,192.168.25.155:2183"

使用 zkcli.sh 工具上传配置文件

yum install -y unzip zip
cd /usr/local/solr-4.10.3/example/scripts/cloud-scripts/
./zkcli.sh -zkhost 192.168.25.155:2181,192.168.25.155:2182,192.168.25.155:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf

查看状态

cd /usr/local/solr-cloud/zookeeper01/bin
./zkCli.sh -server 192.168.25.155:2182
ls /configs/myconf
quit

编写启动 Tomcat 集群的脚本

vim /usr/local/solr-cloud/start-tomcat-all.sh
cd /usr/local/solr-cloud/tomcat01/bin
./startup.sh
cd /usr/local/solr-cloud/tomcat02/bin
./startup.sh
cd /usr/local/solr-cloud/tomcat03/bin
./startup.sh
cd /usr/local/solr-cloud/tomcat04/bin
./startup.sh

修改权限

cd /usr/local/solr-cloud
chmod u+x start-tomcat-all.sh

开启 Tomcat 集群

/usr/local/solr-cloud/start-tomcat-all.sh

查看启动日志

tail -f /usr/local/solr-cloud/tomcat01/logs/catalina.out
tail -f /usr/local/solr-cloud/tomcat02/logs/catalina.out
tail -f /usr/local/solr-cloud/tomcat03/logs/catalina.out
tail -f /usr/local/solr-cloud/tomcat04/logs/catalina.out

编写关闭 Tomcat 集群的脚本

vim /usr/local/solr-cloud/shutdown-tomcat-all.sh
cd /usr/local/solr-cloud/tomcat01/bin
./shutdown.sh
cd /usr/local/solr-cloud/tomcat02/bin
./shutdown.sh
cd /usr/local/solr-cloud/tomcat03/bin
./shutdown.sh
cd /usr/local/solr-cloud/tomcat04/bin
./shutdown.sh

修改权限

cd /usr/local/solr-cloud
chmod u+x shutdown-tomcat-all.sh

关闭 Tomcat 集群

/usr/local/solr-cloud/shutdown-tomcat-all.sh

创建新的 Collection 进行分片处理

在浏览器中访问以下网址

http://192.168.25.155:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2

访问

http://192.168.25.155:8180/solr/#/~cloud

可看到结果

删除不用的 Collection

在浏览器中访问以下网址

http://192.168.25.155:8180/solr/admin/collections?action=DELETE&name=collection1

访问

http://192.168.25.155:8180/solr/#/~cloud

可看到结果

开机自启

vim /etc/rc.d/rc.local

添加

/usr/local/solr-cloud/start-tomcat-all.sh