• SolrCloud集群

    1 SolrCloud简介

    1.1什么是SolrCloud

      SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用 SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用 SolrCloud 来满足这些需求。

      SolrCloud 是基于 Solr 和Zookeeper的分布式搜索方案,它的主要思想是使用 Zookeeper作为集群的配置信息中心。

      它有几个特色功能:

        1)集中式的配置信息

        2)自动容错

        3)近实时搜索

        4)查询时自动负载均衡

    1.2 SolrCloud系统架构  

        分享图片

     

      【1】物理结构

        三个 Solr 实例( 每个实例包括两个 Core),组成一个 SolrCloud。

      【2】逻辑结构

        索引集合包括两个 Shard(shard1 和 shard2),shard1 和 shard2 分别由三个 Core 组成,其中一个 Leader 两个 Replication,Leader 是由 zookeeper 选举产生,zookeeper 控制每个shard上三个 Core 的索引数据一致,解决高可用问题。

        用户发起索引请求分别从 shard1 和 shard2 上获取,解决高并发问题。

      (1)Collection  

        Collection 在 SolrCloud 集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个 Shard(分片),它们使用相同的配置信息。

        比如:针对商品信息搜索可以创建一个 collection。

        collection=shard1+shard2+....+shardX

      (2) Core

        每个 Core 是 Solr 中一个独立运行单位,提供 索引和搜索服务。一个 shard 需要由一个Core 或多个 Core 组成。由于 collection 由多个 shard 组成所以 collection 一般由多个 core 组成。

      (3)Master 或 Slave

        Master 是 master-slave 结构中的主结点(通常说主服务器),Slave 是 master-slave 结构中的从结点(通常说从服务器或备服务器)。同一个 Shard 下 master 和 slave 存储的数据是一致的,这是为了达到高可用目的。

      (4)Shard

        Collection 的逻辑分片。每个 Shard 被化成一个或者多个 replication,通过选举确定哪个是 Leader。

     2 搭建SolrCloud

    2.1搭建要求

      分享图片

      

      Zookeeper 作为集群的管理工具

        1、集群管理:容错、负载均衡。

        2、配置文件的集中管理

        3、集群的入口

        需要实现 zookeeper 高可用,需要搭建zookeeper集群。建议是奇数节点。需要三个 zookeeper 服务器。

        搭建 solr 集群需要 7 台服务器(搭建伪分布式,建议虚拟机的内存 1G 以上):

        需要三个 zookeeper 节点

        需要四个 tomcat 节点。

    2.2准备工作

      环境准备

        CentOS-6.5-i386-bin-DVD1.iso

        jdk-7u72-linux-i586.tar.gz

        apache-tomcat-7.0.47.tar.gz

        zookeeper-3.4.6.tar.gz

        solr-4.10.3.tgz

      步骤:

        (1)搭建Zookeeper集群(我们在上一小节已经完成)

        (2)将已经部署完solr 的tomcat的上传到linux

        (3)在linux中创建文件夹 /usr/local/solr-cloud  创建4个tomcat实例

    [[email protected] ~]# mkdir /usr/local/solr-cloud
    [[email protected] ~]# cp -r tomcat-solr /usr/local/solr-cloud/tomcat-1
    [[email protected] ~]# cp -r tomcat-solr /usr/local/solr-cloud/tomcat-2
    [[email protected] ~]# cp -r tomcat-solr /usr/local/solr-cloud/tomcat-3
    [[email protected] ~]# cp -r tomcat-solr /usr/local/solr-cloud/tomcat-4

        (4)将本地的solrhome上传到linux

        (5)在linux中创建文件夹 /usr/local/solrhomes ,将solrhome复制4份

    [[email protected] ~]# mkdir /usr/local/solrhomes
    [[email protected] ~]# cp -r solrhome /usr/local/solrhomes/solrhome-1
    [[email protected] ~]# cp -r solrhome /usr/local/solrhomes/solrhome-2
    [[email protected] ~]# cp -r solrhome /usr/local/solrhomes/solrhome-3
    [[email protected] ~]# cp -r solrhome /usr/local/solrhomes/solrhome-4

        (6)修改每个solr的 web.xml 文件, 关联solrhome(/usr/local/solr-cluster/tomcat-1/webapps/solr/WEB-INF/web.xml)

        <env-entry>
           <env-entry-name>solr/home</env-entry-name>
           <env-entry-value>/usr/local/solrhomes/solrhome-1</env-entry-value>
           <env-entry-type>java.lang.String</env-entry-type>
        </env-entry>

      (7)修改每个tomcat的原运行端口8005 8080 8009  ,分别为

        8105  8180  8109

        8205  8280  8209

        8305  8380  8309

        8405  8480  8409 

        

        8005端口是用来关闭TOMCAT服务的端口。  

        8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。

        8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。

    2.3配置集群

      (1)修改每个 tomcat实例 bin 目录下的 catalina.sh 文件

          把此配置添加到catalina.sh中

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

          JAVA_OPTS ,顾名思义,是用来设置JVM相关运行参数的变量 .  此配置用于在tomcat启动时找到 zookeeper集群。

       (2)配置 solrCloud 相关的配置。每个 solrhome 下都有一个 solr.xml,把其中的 ip 及端口号配置好(是对应的tomcat的IP和端口)。

         solrhomes/solrhome-1/solr.xml

     <solrcloud>
        <str name="host">192.168.25.101</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>

        solrhomes/solrhome-2/solr.xml

      <solrcloud>
        <str name="host">192.168.25.101</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>

        solrhomes/solrhome-3/solr.xml

     <solrcloud>
        <str name="host">192.168.25.140</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>

        solrhomes/solrhome-4/solr.xml

     <solrcloud>
        <str name="host">192.168.25.140</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>

      (3)让 zookeeper 统一管理配置文件。

          需要上传solr源码包中的zkcli.sh 

          1.上传solr-4.10.3.tgz.tgz

          2.解压: tar -zxvf solr-4.10.3.tgz.tgz 

          3.找到/usr/local/solr-4.10.3/example/scripts/cloud-scripts目录下

          4.输入命令:

    ./zkcli.sh -zkhost 192.168.25.101:2181,192.168.25.101:2182,192.168.25.101:2183 -cmd upconfig -confdir /usr/local/solrhomes/solrhome-1/collection1/conf -confname myconf

          参数解释

            -zkhost  :指定zookeeper地址列表

            -cmd    :指定命令。upconfig 为上传配置的命令

            -confdir  : 配置文件所在目录

            -confname : 配置名称

    2.4启动集群

      (1)启动每个 tomcat 实例。要保证 zookeeper 集群是启动状态。

           进入 /usr/local/solr-cluster/tomcat-1/bin   目录

         执行:(发现权限不够:回到/usr/local下给solr-cluster/授权:执行:chmod -R 777 solr-cluster) ./startup.sh

          依次将四个tomcat全部启动

         (注意在拷贝文件的时候,建议等几秒,不然可能考不完,发生项目缺少jar,或者文件导致启动失败) 

      地址栏输入:http://192.168.25.101:8180/solr/#/  左侧有一个cloud表名集群ok了

    3 代码连接集群

      1.将之前的单机版注解掉,使用新的:

        在SolrJ中提供一个叫做CloudSolrServer的类,它是SolrServer的子类,用于连接solrCloud

        它的构造参数就是zookeeper的地址列表,另外它要求要指定defaultCollection属性(默认的 collection名称)

        我们现在修改springDataSolrDemo工程的配置文件 ,把原来的solr-server注销,替换为CloudSolrServer .指定构造参数为地址列表,设置默认 collection名称

      

      <bean id="solrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
            <constructor-arg value="192.168.25.140:2181,192.168.25.140:2182,192.168.25.140:2183" />
            <property name="defaultCollection" value="collection1"></property>
        </bean>

      2.使用mavenProfile方式修改打包类型

        solr.xml修改配置如下:

       <!-- solr服务器地址 -->
        <solr:solr-server id="solrServer_dev" url="http://127.0.0.1:8080/solr" />
        <bean id="solrServer_pro" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
            <constructor-arg value="192.168.25.101:2181,192.168.25.101:2182,192.168.25.101:2183" />
            <property name="defaultCollection" value="collection1"></property>
        </bean>
        <!-- solr模板,使用solr模板可对索引库进行CRUD的操作 -->
        <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
            <constructor-arg ref="solrServer_${env}" />
        </bean>

        pom新增如下:

      <properties>
            <env>dev</env>
        </properties>
        <profiles>
            <profile>
                <id>dev</id>
                <properties>
                    <env>dev</env>
                </properties>
            </profile>
            <profile>
                <id>pro</id>
                <properties>
                    <env>pro</env>
                </properties>
            </profile>
        </profiles>

      在pom文件中build新增:

          <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                </resource>
            </resources>

    4 分片配置

      1  创建新的 Collection 进行分片处理。

        在浏览器输入以下地址,可以按照我们的要求  创建新的Collection 

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

        参数:

          name:将被创建的集合的名字
          numShards:集合创建时需要创建逻辑碎片的个数
          replicationFactor:分片的副本数。

          看到这个提示表示成功

      分享图片

     

     

       2删除不用的 Collection。执行以下命令

    http://192.168.25.101:8480/solr/admin/collections?action=DELETE&name=collection1
    相关文章
    相关标签/搜索
    香港马会资枓大全2019天空彩彯天下彩天空彩票与你同行2019今晚开码结果开奖现场历史开奖资料记录在线查询 环江| 社会| 五寨县| 黔江区| 青川县| 花垣县| 博白县| 久治县| 沁源县| 隆林| 阿克陶县| 桃江县| 汾阳市| 那曲县| 孝昌县| 西充县| 庄浪县| 昔阳县| 诏安县| 佳木斯市| 黔东| 长寿区| 通江县| 阳山县| 疏勒县| 关岭| 壤塘县| 镇江市| 定西市| 上饶县| 贡觉县| 白山市| 华宁县| 巴林左旗| 汤阴县| 仁寿县| 贺兰县| 油尖旺区| 休宁县| 阿巴嘎旗| 雷州市| 铜山县| 屯留县| 临沂市| 商洛市| 乌拉特中旗| 丘北县| 涞源县| 五指山市| 织金县| 秀山| 长丰县| 永定县| 响水县| 鄄城县| 潢川县| 泾阳县| 江西省| 牙克石市| 昭苏县| 利津县| 女性| 景洪市| 玉屏| 沈丘县| 南平市| 阳东县| 沙洋县| 海宁市| 岐山县| 东源县| 克山县| 西和县| 黄浦区| 西畴县| 南川市| 平邑县| 梁山县| 富民县| 宜宾市| 延川县| 涞水县| 漾濞| 托克逊县| 乌拉特中旗| 南靖县| 论坛| 唐海县| 炉霍县| 汾西县| 手机| 阿坝县| 乌苏市| 黔南| 嵊州市| 名山县| 昭通市| 潞西市| 商城县| 南平市| 安吉县| 务川| 原平市| 洛南县| 西青区| 利辛县| 龙门县| 敖汉旗| 宜都市| 宕昌县| 女性| 吉安县| 广昌县| 霍山县| 固镇县| 朔州市| 星座| 玛曲县| 郎溪县| 秀山| 伊吾县| 年辖:市辖区| 定远县| 玉溪市| 涞水县| 赤城县| 双鸭山市| 伽师县| 阳原县| 雷州市| 邹城市| 孙吴县| 徐水县| 时尚| 榆社县| 晋宁县| 龙南县| 印江| 德保县| 凯里市| 荃湾区| 如皋市| 绥芬河市| 化隆| 巴塘县| 金阳县| 崇左市| 盐城市| 铁岭市| 甘谷县| 宣城市| 布尔津县| 出国| 永清县| 武邑县| 徐州市| 临海市| 沈阳市| 图片| 广宁县| 清远市| 通化市| 台安县| 海原县| 凭祥市| 峨山| 田东县| 特克斯县| 花莲市| 磴口县| 铁力市| 湛江市| 团风县| 湛江市| 潮安县| 英山县| 巴林左旗| 信阳市| 定远县| 商都县| 仁布县| 南漳县| 从江县| 洪江市| 山西省| 曲阜市| 隆回县| 德钦县| 兰州市| 巴林左旗| 中卫市| 康乐县| 新田县| 海宁市| 大洼县| 温宿县| 巴东县| 德钦县| 东乌珠穆沁旗| 荆州市| 治多县| 克什克腾旗| 蓝田县| 邢台市| 望都县| 衢州市| 泰兴市| 衡阳市| 新沂市| 贺兰县| 泰兴市| 论坛| 门源| 都匀市| 五常市| 武陟县| 仁寿县| 万宁市| 咸丰县| 双桥区| 若尔盖县| 星子县| 高邮市| 彭阳县| 巩义市| 镶黄旗| 南川市| 启东市| 清涧县| 广灵县| 临沭县| 托里县| 永丰县| 城口县| 筠连县| 黄大仙区| 孝昌县| 浠水县| 安远县| 建平县| 永昌县| 莒南县| 西青区| 黑水县| 宁晋县| 汕尾市| 景泰县| 望江县| 临高县| 七台河市| 满洲里市| 高阳县| 赤城县| 陵水| 灌阳县| 龙山县| 太康县| 县级市| 南雄市| 邹城市| 鹰潭市| 乌苏市| 亳州市| 比如县| 乌兰浩特市| 丹棱县| 邯郸市| 九江市| 新化县| 大英县| 平罗县| 阳原县| 介休市| 道孚县| 巴南区| 来安县| 兴海县| 浮梁县| 潼南县| 临城县| 衡阳县| 丹巴县| 搜索| 姚安县| 永宁县| 彰化县| 巨鹿县| 临泽县| 翁源县| 江津市| 通山县| 乌拉特后旗| 喀喇| 岫岩| 洪泽县| 上思县| 英吉沙县| 吴桥县| 海安县| 阳山县| 凉山| 楚雄市| 高碑店市| 华阴市| 屯留县| 突泉县| 玉门市| 阳东县| 郓城县| 交口县| 洱源县| 文水县| 罗田县| 秦安县| 临江市| 仙桃市| 新泰市| 海宁市| 呼玛县| 霍林郭勒市| 漯河市| 缙云县| 宁津县| 中超| 康平县| 永济市| 古蔺县| 出国| 望都县| 宁德市| 荣昌县| 镇安县| 临漳县| 屯留县| 阿拉善左旗| 新野县| 当阳市| 丰都县| 恩平市| 遂川县| 永吉县| 鲜城| 邵武市| 西城区| 无棣县| 秦安县| 宝坻区| 华蓥市| 望都县| 滨海县| 盘锦市| 虎林市| 秭归县| 兖州市| 新野县| 武平县| 栖霞市| 宁海县| 延安市| 海丰县| 鄂温| 灵武市| 信丰县| 香格里拉县| 湖口县| 水城县| 成安县| 崇明县| 卢湾区| 梓潼县| 武穴市| 永康市| 武义县| 宽甸| 合肥市| 宕昌县| 浠水县| 赤城县| 揭西县| 绍兴县| 马尔康县| 墨脱县| 五峰| 镇雄县| 昭苏县| 墨竹工卡县| 大同市| 论坛| 古田县| 新绛县| 武定县| 遂平县| 内黄县| 拜泉县| 蕉岭县| 酉阳| 安康市| 林口县| 惠州市| 天峨县| 华坪县| 威信县| 仁寿县| 古蔺县| 南漳县| 涟水县| 安平县| 石泉县| 胶南市| 丽水市| 南和县| 毕节市| 宁化县| 韩城市| 额济纳旗| 临湘市| 易门县| 施秉县| 乡宁县| 青州市| 泰安市| 闽侯县| 公主岭市| 三原县| 申扎县| 囊谦县| 许昌市| 保定市| 永春县| 上犹县| 抚远县| 团风县| 日喀则市| 英吉沙县| 固原市| 江华| 湄潭县| 承德市| 金平| 九龙坡区| 龙江县| 博湖县| 古丈县| 海宁市| 凉山| 二连浩特市| 白朗县| 绥化市| 桂东县| 屯门区| 扎赉特旗| 双鸭山市| 岳西县| 吉林市| 额济纳旗| 花莲市| 彭水| 石屏县| 南宁市| 青冈县| 名山县| 建德市| 禄丰县| 林口县| 什邡市| 普兰县| 闽侯县| 荥经县| 巴南区| 徐水县| 剑阁县| 新源县| 屯门区| 和林格尔县| 宜春市| 杭锦后旗| 博白县| 任丘市| 江津市| 葫芦岛市| 崇左市| 科技| 永和县| 上栗县| 罗田县| 会理县| 禄丰县| 东源县| 灵台县| 安龙县| 德州市| 凤城市| 景宁| 绍兴县| 精河县| 宝丰县| 丰原市| 大冶市| 珲春市| 长顺县| 新乐市| 喀喇沁旗| 诸暨市| 台前县| 阳新县| 郧西县| 义马市| 湖北省| 平顶山市| 芮城县| 贵德县| 楚雄市| 田林县| 阿尔山市| 黎平县| 林甸县| 泾川县| 北安市| 信宜市| 集安市| 民县| 兴宁市| 白朗县| 荃湾区| 礼泉县| 邯郸市| 阿坝| 玉溪市| 沾化县| 婺源县| 太湖县| 深水埗区| 恩平市| 青阳县| 玉门市| 台州市| 古交市| 泌阳县| 宕昌县| 夏津县| 浑源县| 庄河市| 米易县| 广安市| 平昌县| 衡东县| 内乡县| 磐安县| 读书| 南城县| 循化| 金沙县| 平南县| 临西县| 南丰县| 大洼县| 米易县| 武清区| 赣榆县| 太湖县| 上蔡县| 正阳县| 平舆县| 龙南县| 洞头县| 安泽县| 尼玛县| 荆州市| 五大连池市| 洪泽县| 柯坪县| 胶南市| 临洮县| 海门市| 湘阴县| 秦安县| 新绛县| 四会市| 冕宁县| 清原| 宝兴县| 林芝县| 和田县| 临夏市| 什邡市| 遂溪县| 韶关市| 徐州市| 大埔区| 武鸣县| 长兴县| 凯里市| 泰宁县| 晴隆县| 杨浦区| 简阳市| 杂多县| 吴桥县| 洞头县| 临海市| 金门县| 内黄县| 芜湖市| 克什克腾旗| 新民市| 湟源县| 肇庆市| 东阿县| 芮城县| 盐亭县| 上栗县| 古浪县| 桐乡市| 连平县| 麦盖提县| http://m.ysgnqj.fit http://wap.bm1961xajorz.fit http://m.hkusgm.fit http://wap.lyxgnh.fit http://gfkvop.fit http://www.weymya.fit http://www.chbmwn.fit http://m.jrjphq.fit http://www.gcytbt.fit http://m.lonxmo.fit http://m.jmijkq.fit http://m.ydguox.fit http://m.mskvck.fit http://m.dvshag.fit http://www.favwri.fit http://m.rycwxp.fit http://www.kmlhru.fit http://m.swcmwv.fit