Zookeeper、Solr和Tomcat安裝配置實踐

ymc4 9年前發布 | 33K 次閱讀 Solr 搜索引擎 ZooKeeper

三臺服務器:

192.168.19.210(myid=210) master

192.168.19.211(myid=211) slave1

192.168.19.212(myid=212) slave2

ZooKeeper集群配置

安裝ZooKeeper集群,在上面3分節點上分別安裝,使用的版本是zookeeper-3.4.5。首先在master上安裝配置:

cd /tmp
wget -N http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz
tar -zxf zookeeper-3.4.5.tar.gz
mv ./zookeeper-3.4.5 /opt/zookeeper
mkdir /opt/zookeeper/data
mkdir /opt/zookeeper/logs

echo 'tickTime=2000' > /opt/zookeeper/conf/zoo.cfg
echo 'initLimit=10' >> /opt/zookeeper/conf/zoo.cfg
echo 'syncLimit=5' >> /opt/zookeeper/conf/zoo.cfg
echo 'dataDir=/opt/zookeeper/data' >> /opt/zookeeper/conf/zoo.cfg
echo 'dataLogDir=/opt/zookeeper/logs' >> /opt/zookeeper/conf/zoo.cfg
echo 'clientPort=2181' >> /opt/zookeeper/conf/zoo.cfg
echo 'server.210=master:2888:3888' >> /opt/zookeeper/conf/zoo.cfg
echo 'server.211=slave1:2888:3888' >> /opt/zookeeper/conf/zoo.cfg
echo 'server.212=slave2:2888:3888' >> /opt/zookeeper/conf/zoo.cfg
echo '210' > /opt/zookeeper/data/myid

然后將master上的zookeeper復制到其他兩個節點上:

scp -r /opt/zookeeper root@slave1:/opt/
scp -r /opt/zookeeper root@slave2:/opt/

修改slave1、slave2的myid文件:

vi /opt/zookeeper/data/myid

其他設置:

#開機啟動
echo '/opt/zookeeper/bin/zkServer.sh start' >> /etc/rc.d/rc.local
#環境變量
echo 'export PATH=$PATH:/opt/zookeeper/bin' >> /etc/profile
source /etc/profile
#ZooKeeper服務命令
/opt/zookeeper/bin/zkServer.sh start
/opt/zookeeper/bin/zkServer.sh status
/opt/zookeeper/bin/zkServer.sh stop
/opt/zookeeper/bin/zkServer.sh restart

SolrCloud配置

首先在一個節點上對SOLR進行配置,我們選擇master節點。
cd /tmp
wget -N http://archive.apache.org/dist/lucene/solr/4.2.1/solr-4.2.1.tgz
tar -zxf solr-4.2.1.tgz
mkdir -p /opt/solr/webapps
cd /opt/solr/webapps
jar -xf /tmp/solr-4.2.1/example/webapps/solr.war
mkdir -p /opt/solr/home
vi /opt/solr/home/solr.xml

<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
  <cores defaultCoreName="Designer" adminPath="/admin/cores" host="${host:}" hostPort="${jetty.port:}" zkClientTimeout="${zkClientTimeout:15000}">
  </cores>
</solr>
#master's lib
ln -s /opt/solr/webapps/WEB-INF/lib /opt/solr/lib
#master's conf
mkdir -p /opt/solr/conf

注意:這里并沒有配置任何的core元素,等到整個配置安裝完成之后,通過SOLR提供的REST接口,來實現Collection以及Shard的創建,從而來更新這些配置文件。

ZooKeeper管理監控配置文件:

java -cp .:/opt/solr/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost master:2181,slave1:2181,slave1:2181 -confdir /opt/solr/conf/Designer -confname Designer -solrhome /opt/solr/home

檢查一下ZooKeeper上的存儲情況:

cd /opt/zookeeper
bin/zkCli.sh -server master:2181
ls /
ls /configs

Tomcat配置與啟動:

mkdir -p /opt/tomcat/conf/Catalina/localhost
vi /opt/tomcat/conf/Catalina/localhost/solr.xml
<?xml version="1.0" encoding="UTF-8" ?>
<Context docBase="/opt/solr/webapps" reloadable="true">
  <Environment name="solr/home" type="java.lang.String" value="/opt/solr/home" override="true" />
</Context>

#tomcat catelina.sh
vi /opt/tomcat/bin/catalina.sh
JAVA_OPTS="
 -Xmx6G
 -Xms6G
 -Xss256K
 -Xmn2300M
 -XX:SurvivorRatio=5
 -XX:+UseParNewGC
 -XX:PermSize=128M
 -XX:MaxPermSize=128M
 -XX:MaxDirectMemorySize=768m
 -XX:LargePageSizeInBytes=128m
 -XX:+DisableExplicitGC
 -XX:SoftRefLRUPolicyMSPerMB=0
 -XX:+OptimizeStringConcat
 -XX:+UseFastAccessorMethods
 -XX:CompileThreshold=100
 -XX:+AggressiveOpts
 -XX:+TieredCompilation
 -XX:+DoEscapeAnalysis
 -XX:+UseBiasedLocking
 -XX:+EliminateLocks
 -XX:BiasedLockingStartupDelay=0
 -XX:+UseConcMarkSweepGC
 -XX:CMSInitiatingOccupancyFraction=70
 -XX:+UseCMSCompactAtFullCollection
 -XX:CMSFullGCsBeforeCompaction=2
 -XX:+CMSParallelRemarkEnabled
 -XX:+UseCMSInitiatingOccupancyOnly
 -XX:+CMSClassUnloadingEnabled
 -XX:+CMSPermGenPrecleaningEnabled
 -Dsun.net.inetaddr.ttl=0
 -Dnetworkaddress.cache.ttl=30
 -Djava.awt.headless=true
 -DAllowManagedFieldsInDefaultFetchGroup=true
 -DAllowMediatedWriteInDefaultFetchGroup=true

 -Djetty.port=8080
 -DzkHost=master:2181,slave1:2181,slave2:2181
 -DzkClientTimeout=15000
"

tomcat 常用命令:

#啟動
/opt/tomcat/bin/startup.sh
#查看日志
tail -f /opt    /tomcat/logs/catalina.out

查看一下ZooKeeper中的數據狀態:

cd /opt/zookeeper
bin/zkCli.sh -server master:2181
ls /
ls /live_nodes
ls /collections

這時候,SolrCloud集群中只有一個活躍的節點,而且默認生成了一個Designer實例,這個實例實際上虛擬的,因為通過web界面無法訪問master:8080/solr,看不到任何有關SolrCloud的信息.

同步數據和配置信息,啟動其他節點

scp -r /opt/tomcat/ root@slave1:/opt/
scp -r /opt/tomcat/ root@slave2:/opt/
scp -r /opt/solr/ root@slave1:/opt/
scp -r /opt/solr/ root@slave2:/opt/

啟動其他Solr服務器節點:

/opt/tomcat/bin/startup.sh

查看ZooKeeper集群中數據狀態:

ls /live_nodes

這時已經存在3個活躍的節點了,但是SolrCloud集群并沒有更多信息.

創建Collection、Shard和Replication

創建Collection及初始Shard

直接通過REST接口來創建Collection:

[root@master]$ curl 'http://master:8080/solr/admin/collections?action=CREATE&name=Article&numShards=3&replicationFactor=1'

如果成功,會輸出如下響應內容:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">4103</int>
    </lst>
    <lst name="success">
        <lst>
            <lst name="responseHeader">
                <int name="status">0</int>
                <int name="QTime">3367</int>
            </lst>
            <str name="core">Article_shard2_replica1</str>
            <str name="saved">/opt/solr/home/solr.xml</str>
        </lst>
        <lst>
            <lst name="responseHeader">
                <int name="status">0</int>
                <int name="QTime">3280</int>
            </lst>
            <str name="core">Article_shard1_replica1</str>
            <str name="saved">/opt/solr/home/solr.xml</str>
        </lst>
        <lst>
            <lst name="responseHeader">
                <int name="status">0</int>
                <int name="QTime">3690</int>
            </lst>
            <str name="core">Article_shard3_replica1</str>
            <str name="saved">/opt/solr/home/solr.xml</str>
        </lst>
    </lst>
</response>

上面鏈接中的幾個參數的含義,說明如下:

name                待創建Collection的名稱
numShards           分片的數量
replicationFactor   復制副本的數量

執行上述操作如果沒有異常,已經創建了一個Collection,名稱為Article,而且每個節點上存在一個分片。這時,也可以查看ZooKeeper中狀態:

ls /collections
ls /collections/Article

可以通過Web管理頁面,訪問master:8080/solr/#/~cloud,查看SolrCloud集群的分片信息. 我們從master節點可以看到,SOLR的配置文件內容,已經發生了變化,如下所示:

cat /opt/solr/home/solr.xml
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
    <cores defaultCoreName="Designer" host="${host:}" adminPath="/admin/cores" zkClientTimeout="${zkClientTimeout:15000}" hostPort="${jetty.port:}">
            <core loadOnStartup="true" shard="shard3" instanceDir="Article_shard3_replica1/" transient="false" name="Article_shard3_replica1" collection="Article" />
    </cores>
</solr>

創建Replication

下面對已經創建的初始分片進行復制。 shard1已經在slave1上,我們復制分片到master和slave2上,執行如下命令:

curl 'http://master:8080/solr/admin/cores?action=CREATE&collection=Aritcle&name=Aritcle_shard1_replica_2&shard=shard1'
<?xml version="1.0" encoding="UTF-8"?>
<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">1485</int>
    </lst>
    <str name="core">Aritcle_shard1_replica_2</str>
    <str name="saved">/opt/solr/home/solr.xml</str>
</response>

curl 'http://master:8080/solr/admin/cores?action=CREATE&collection=Aritcle&name=Aritcle_shard1_replica_3&shard=shard1'
<?xml version="1.0" encoding="UTF-8"?>
<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">2543</int>
    </lst>
    <str name="core">Aritcle_shard1_replica_3</str>
    <str name="saved">/opt/solr/home/solr.xml</str>
</response>

curl 'http://master:8080/solr/admin/cores?action=CREATE&collection=Aritcle&name=Aritcle_shard1_replica_4&shard=shard1'
<?xml version="1.0" encoding="UTF-8"?>
<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">2405</int>
    </lst>
    <str name="core">Aritcle_shard1_replica_4</str>
    <str name="saved">/opt/solr/home/solr.xml</str>
</response>

最后的結果是,slave1上的shard1,在master節點上有2個副本,名稱為Articleshard1replica2和Articleshard1replica3,在slave2節點上有一個副本,名稱為Articleshard1replica_4. 也可以通過查看master和slave2上的目錄變化,如下所示:

ll /opt/solr/conf/
總用量 24
drwxrwxr-x. 4 root root 4096 6月   1 09:58 Designer
drwxrwxr-x. 3 root root 4096 6月   1 15:41 Article_shard1_replica_2
drwxrwxr-x. 3 root root 4096 6月   1 15:42 Article_shard1_replica_3
drwxrwxr-x. 3 hadoop root 4096 6月   1 15:23 Article_shard3_replica1

ll /opt/solr/conf/
總用量 20
drwxrwxr-x. 4 root root 4096 6月   1 14:53 Designer
drwxrwxr-x. 3 root root 4096 6月   1 15:44 Article_shard1_replica_4
drwxrwxr-x. 3 root root 4096 6月   1 15:23 Article_shard2_replica1

其中,Articleshard3replica1和Articleshard2replica1都是創建Collection的時候自動生成的分片,也就是第一個副本。 通過Web界面,可以更加直觀地看到shard1的情況.

我們再次從master節點可以看到,SOLR的配置文件內容,又發生了變化,如下所示:

cat /opt/solr/home/solr.xml
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
    <cores defaultCoreName="Designer" host="${host:}" adminPath="/admin/cores" zkClientTimeout="${zkClientTimeout:15000}" hostPort="${jetty.port:}">
            <core loadOnStartup="true" shard="shard3" instanceDir="Article_shard3_replica1/" transient="false" name="Article_shard3_replica1" collection="Article" />
            <core loadOnStartup="true" shard="shard1" instanceDir="Article_shard1_replica_2/" transient="false" name="Article_shard1_replica_2" collection="Article" />

            <core loadOnStartup="true" shard="shard1" instanceDir="Article_shard1_replica_3/" transient="false" name="Article_shard1_replica_3" collection="Article" />
    </cores>
</solr>

到此為止,我們已經基于3個物理節點,配置完成了SolrCloud集群。

參考資料

 本文由用戶 ymc4 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!