solr入门之搭建具有安全控制和权限管理功能的SolrCloud集群

结合上次搭建项目和配置安全控制的经验,工程的搭建过程应该如下:

1.搭建zookeeper集群

2.配置solr的jetty启动配置

3.在solr启动配置中增加zk的acl配置信息

4.使用solr配置,启动solrcloud集群将 集群交给zookeeper管理

5.上传相关的配置文件,创建集合

6.上传安全配置文件

7.登录admin界面,查看集群状态及能否访问到zookeeper上的文件

8.添加数据到solrcloud中

9.配置客户端,使用solrj来操作solrcloud(摸索阶段)

================================================================

1.配置zookeeper集群

1.1上传压缩包到liunx中,解压后进入根目录

压缩包地址:

链接:http://pan.baidu.com/s/1geOTZeN 密码:5bh8

创建一个data文件夹

mkdir data

进入data中

cd  data

vim myid

输入 1

进入conf目录下

mv  zoo_sample.cfg  zoo.cfg

编辑zoo.cfg 内容修改如下

我这里只用了两个节点,按官方推荐应该使用2n+1比较好

同理配置另外一个节点后:

启动zookeeper

zookeeper/bin/zkServer.sh start

两个节点都启动后查看集群状态

zookeeper/bin/zkServer.sh status

我这里只用了两个节点,按官方推荐应该使用2n+1比较好

同理配置另外一个节点后:

启动zookeeper

zookeeper/bin/zkServer.sh start

两个节点都启动后查看集群状态

zookeeper/bin/zkServer.sh status

================

2.配置jetty的启动文件.

2.1 先将solr5.5的项目上传到liunx中,解压:

文件地址:

链接:http://pan.baidu.com/s/1eRQrVfs 密码:rzvu

2.2 将我提供的启动配置信息上传到liunx中

链接:http://pan.baidu.com/s/1nvhE9Hv 密码:yef8

大致目录节后如下

2.3修改solr_8001中的配置信息为符合自己的

(data目录下缺少一个solr.xml文件

cp /root/solr/solr/server/solr/solr.xml  /root/solr/solr_8001/data/

找到类似目录下复制过去即可)

vim solr.in.sh

我修改后配置信息如下

在修改bin下的solr.sh

vim bin/solr.sh

我修改后如下

将修改后的文件复制到另外一个节点上:

scp  -----------

=================

3.在solr启动配置中增加zk的acl配置信息

3.1在solr_8001/data中的solr.xml中增加如下内容

3.2 在solr_8001/solr.in.sh中底部增加如下内容:

这里是设置了一个操作zookeeper的权限用户admin 密码也是admin

================

4.上传相关的配置文件,创建集合(使用自定义的方式)

4.1上传配置文件,这是我写的配置文件的脚本,可以参考

4.2自定义集合方式,创建集合

cd /root/solr/solr_8001/data

分片库的文件夹

mkdir  gome_suggest

编辑该分片的信息

vim  core.properties

另外一个节点只需要讲core_node1变为core_node2即可

这里再说一下,启动的端口也是可以调整的,只需要改正一下 solr.in.sh中的端口信息即可

==========================

5.使用solr配置,启动solrcloud集群将 集群交给zookeeper管理

正常启动solr服务器(两个节点)

/root/solr/solr_8001/bin/solr.sh start

--->失败了 不知道啥原因--->

尝试使用api来建立以下

先关闭solr集群和和zookeeper集群将数据清理完毕,在打开zookeeper集群和solrcloud集群尝试使用

HTTP api 建立集合

http://192.168.119.20:8001/solr/admin/collections?action=CREATE&name=meixin_suggest&numShards=1&replicationFactor=2&collection.configName=meixin_suggest

删除集合:

http://192.168.119.20:8001/solr/admin/collections?action=delete&name=meixin_suggest

===================

6.上传安全配置文件(将原来的保存下来,再上传一遍)

使用如下脚本进行安全文件的上传操作:

java  -classpath ./:/root/solr/solr/server/solr-webapp/webapp/WEB-INF/lib/*  -DzkDigestUsername=admin -DzkDigest

Password=admin -DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider  -DzkCrede

ntialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider   org.apache

.solr.cloud.ZkCLI -zkhost 192.168.119.20:2181,192.168.119.21:2181  -cmd  put  /security.json  ‘{"authentication"

:{"class":"solr.BasicAuthPlugin","blockUnknown":true,"credentials":{"root":"v1kx29vsv2JHda4iY+rqpNpHscwW29rH1z6rzI/6LVI= tL5DTOVBr1eRaW8u1Hyo5JluY8bMqkeQJ573pgLynDw="}},"authorization":{"class":"solr.RuleBasedAuthorizationPlugin"}}‘

设置的账户是 root 密码为 songqinghu

=============

7.给安全配置文件设置权限

---->刚刚开始就配置了zk的访问控制的话,是默认就创建了 安全配置文件的

而且 使用solr创建的文件都是有权限的

============

8.登录admin界面,查看集群状态及能否访问到zookeeper上的文件

可以访问zk上的文件内容,证明solr操作zk是有权限的.

9.添加数据到solrcloud中

添加两条数据到数据库中,证明可以通过节点去操作

方便以后测试使用

10.配置客户端,使用solrj来操作solrcloud(摸索阶段)

官方给的资料:

直接连接的尝试:

Caused by: org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for /clusterstate.json

at org.apache.zookeeper.KeeperException.create(KeeperException.java:113)

at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)

at org.apache.zookeeper.ZooKeeper.getData(ZooKeeper.java:1155)

at org.apache.solr.common.cloud.SolrZkClient$7.execute(SolrZkClient.java:345)

at org.apache.solr.common.cloud.SolrZkClient$7.execute(SolrZkClient.java:342)

at org.apache.solr.common.cloud.ZkCmdExecutor.retryOperation(ZkCmdExecutor.java:60)

at org.apache.solr.common.cloud.SolrZkClient.getData(SolrZkClient.java:342)

at org.apache.solr.common.cloud.ZkStateReader.refreshLegacyClusterState(ZkStateReader.java:443)

at org.apache.solr.common.cloud.ZkStateReader.createClusterStateWatchersAndUpdate(ZkStateReader.java:296)

at org.apache.solr.client.solrj.impl.CloudSolrClient.connect(CloudSolrClient.java:467)

... 2 more

可以发现是没有权限的,我们模仿脚本中的参数设置,将相关数据添加到系统的属性中

Properties p  = new Properties();

p.setProperty("zkDigestUsername",  "admin");

p.setProperty("zkDigestPassword", "admin");

p.setProperty("zkCredentialsProvider", "org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider");

p.setProperty("zkACLProvider", "org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider");

System.setProperties(p);

// System.out.println(System.getProperty("zkDigestUsername"));

String zkUrl = "192.168.119.20:2181,192.168.119.21:2181";

//ESystemDefaultHttpClient httpClient = new ESystemDefaultHttpClient(200, 2000);

CloudSolrClient cloudSolrClient = new  CloudSolrClient(zkUrl);

cloudSolrClient.setDefaultCollection("meixin_suggest");

cloudSolrClient.connect();

SolrQuery q  = new SolrQuery();

q.set("q", "*:*");

QueryRequest req = new QueryRequest(q);

req.setBasicAuthCredentials("root", "songqinghu");

QueryResponse response = req.process(cloudSolrClient);

long numFound = response.getResults().getNumFound();

System.out.println("the query numfound is :"+ numFound);

cloudSolrClient.close();

运行再次报错:

xception in thread "main" java.lang.ExceptionInInitializerError

at org.apache.solr.common.cloud.ZkClientConnectionStrategy.createSolrZooKeeper(ZkClientConnectionStrategy.java:103)

at org.apache.solr.common.cloud.DefaultConnectionStrategy.connect(DefaultConnectionStrategy.java:37)

at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:144)

at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:115)

at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:105)

at org.apache.solr.common.cloud.ZkStateReader.<init>(ZkStateReader.java:201)

at org.apache.solr.client.solrj.impl.CloudSolrClient.connect(CloudSolrClient.java:466)

at com.git.solr.auth.SolrJAuthClient.client(SolrJAuthClient.java:45)

at com.git.solr.auth.SolrJAuthClient.main(SolrJAuthClient.java:21)

Caused by: java.lang.NullPointerException

at sun.nio.cs.ext.ExtendedCharsets.init(ExtendedCharsets.java:1300)

at sun.nio.cs.AbstractCharsetProvider.charsetForName(AbstractCharsetProvider.java:160)

at java.nio.charset.Charset.lookupExtendedCharset(Charset.java:455)

at java.nio.charset.Charset.lookup2(Charset.java:480)

at java.nio.charset.Charset.lookup(Charset.java:468)

at java.nio.charset.Charset.isSupported(Charset.java:510)

at java.lang.StringCoding.lookupCharset(StringCoding.java:99)

at java.lang.StringCoding.decode(StringCoding.java:185)

at java.lang.String.<init>(String.java:416)

at java.lang.String.<init>(String.java:481)

at java.net.Inet6AddressImpl.getLocalHostName(Native Method)

at java.net.InetAddress.getLocalHost(InetAddress.java:1444)

at org.apache.zookeeper.Environment.list(Environment.java:61)

at org.apache.zookeeper.Environment.logEnv(Environment.java:98)

at org.apache.zookeeper.ZooKeeper.<clinit>(ZooKeeper.java:95)

... 9 more

可以发现是创建solrclientzookeeper错误:

这里应该如何去解决呢?

连接节点应该类似于 solr服务器去连接zk,进行操作,既然solr可以连接,那么我这里应该也是没有问题的

仿照solr服务器去连接zk,进行操作.

搭建一个服务,设置系统变量到服务器中,

在服务器中直接运行项目

经过长达一天的试验,发现,确实是需要配置到服务器中,参数才会有作用

配置文件如下(window系统)tomcat中的catalina.bat

使用的Java代码如下:

package com.mx.solr.zk.client.servlet.utils;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.CloudSolrClient;

public class SolrClientUitls {

    private static SolrClient client = null;
    public static SolrClient getClient(){
        if(client ==null){
            String zkUrl = "192.168.119.20:2181,192.168.119.21:2181";
            CloudSolrClient cloudSolrClient = new  CloudSolrClient(zkUrl);
            cloudSolrClient.setDefaultCollection("meixin_suggest");
            cloudSolrClient.connect();
            client = cloudSolrClient;
        }
        return client;
    }
}
package com.mx.solr.zk.client.servlet;

import java.io.IOException;
import java.util.Properties;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;

import com.mx.solr.zk.client.servlet.utils.SolrClientUitls;

/**
 * Servlet implementation class ClientServlet
 */
@WebServlet("/ClientServlet")
public class ClientServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public ClientServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            SolrClient client = SolrClientUitls.getClient();
            SolrQuery q  = new SolrQuery();
            q.set("q", "*:*");
            QueryRequest req = new QueryRequest(q);
            req.setBasicAuthCredentials("root", "songqinghu");
            QueryResponse res;
            try {
                res = req.process(client);
                long numFound = res.getResults().getNumFound();
                System.out.println("the query numfound is :"+ numFound);
                SolrDocumentList docs = res.getResults();
                for (SolrDocument doc : docs) {
                    System.out.println("suggestId :"+doc.getFieldValue("suggestId").toString());
                    System.out.println("word :"+doc.getFieldValue("word").toString());
                }
            } catch (SolrServerException e) {
                e.printStackTrace();
            }
           // cloudSolrClient.close();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

运行结果如下:

如果使用maven启动的话,只需要在下图的位置设置变量即可:

到现在为止,一个具有安全控制功能的SolrCloud集合就搭建完成了,当然你在搭建的过程中可能会遇到很多问题,如果需要一起讨论,请加博主QQ群.

488252920

时间: 2024-08-08 11:39:49

solr入门之搭建具有安全控制和权限管理功能的SolrCloud集群的相关文章

搭建LVS+Keepalived+nginx+tomcat高可用性,高性能jsp集群

LVS-master:192.168.0.210 LVS-backup:192.168.0.211 LVS-VIP:192.168.0.209 nginx+tomcat:192.168.0.212 nginx+tomcat:192.168.0.227 安装nginx所需包: Nginx-1.6.0.tar.gz和pcre-8.35.zip 一.安装pcre-8.35 1 #unzip pcre-8.35.zip 2 #cd pcre-8.35 3 #./configure 4 #make 5 #

11.SolrCloud集群环境搭建

转载请出自出处:http://www.cnblogs.com/hd3013779515/ 我们基于Solr4.10.3版本进行安装配置SolrCloud集群,通过实践来实现索引数据的分布存储和检索. 一.准备工作 1.服务器 solrcloud01 192.168.137.171 solrcloud02 192.168.137.172 solrcloud03 192.168.137.173 2.资源文件 上传到/home/test apache-solr-dataimportscheduler.

solrcloud集群搭建

solrcloud 集群搭建 初始条件: 1. 三台服务器 IP 地址分别为 192.168.1.133 192.168.1.134 192.168.1.135 2. 使用 solr-5.3.1,zookeeper-3.4.6 3. Linux version 3.16.0-23-generic, Ubuntu 4.9.1-16ubuntu6 搭建步骤: step1:搭建 zookeeper 服务器 分别上传 zookeeper-3.4.6 到三台服务器,并解压到某目录记为 <zookeeper

ubuntu14.04环境下利用docker搭建solrCloud集群

主要内容: 技术关键点:docker17.06.3安装,docker自制镜像及相关容器操作,docker分配固定IP及添加端口映射,solrCloud集群部署等 主要思路:在Ubuntu14.04操作系统的宿主机中,安装docker17.06.3,将宿主机的操作系统制作成docker基础镜像,之后使用自制的基础镜像在docker中启动3个容器,分配固定IP,再在3个容器中配置solrCloud集群. 注:solrCloud采用的solr内置jetty,需要单独配置zookeeper 容器IP及名

Solr5.5.4+Zookeeper3.4.6+Tomcat8搭建SolrCloud集群

Solr5.5.4+Zookeeper3.4.6+Tomcat8搭建SolrCloud集群 SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求.SolrCloud 是基于Solr和Zookeeper的分布式搜索方案,具体拥有以下几个特色功能: 1)集中式的配置信息     

Linux环境下SolrCloud集群环境搭建关键步骤

Linux环境下SolrCloud集群环境搭建关键步骤. 前提条件:已经完成ZooKeeper集群环境搭建. 一.下载介质 官网下载地址:http://www.apache.org/dyn/closer.lua/lucene/solr/7.3.1 历史版本下载:http://archive.apache.org/dist/lucene/solr/ 二.上传介质 通过工具将下载好的安装介质上传至服务器目录. 三.解压安装 解压即可完成安装. unzip solr-5.5.5.zip 四.修改配置文

JAVAEE——宜立方商城08:Zookeeper+SolrCloud集群搭建、搜索功能切换到集群版、Activemq消息队列搭建与使用

1. 学习计划 1.solr集群搭建 2.使用solrj管理solr集群 3.把搜索功能切换到集群版 4.添加商品同步索引库. a) Activemq b) 发送消息 c) 接收消息 2. 什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求. So

搭建 SolrCloud 集群服务

一.概述 Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库 Solr是以Lucene为基础实现的文本检索应用服务.Solr部署方式有单机方式.多机Master-Slaver方式.Cloud方式. SolrCloud是基于Solr和Zookeeper的分布式搜索方案.当索引越来越大,一个单一的系统无法满足磁盘需求,查询速度缓慢,此时就需要分布式索引.在分布式索引中,原来的大索引,将会分成多个小索引,solr可以将这些小索引返回的结果合并,然后返回给客户端. 二.特色功能 Solr

RHEL6搭建 keepalived (HA) 任意单故障节点的高可用集群

搭建 keepalived (HA) 任意单故障节点的高可用集群 实验拓扑图: 实验要求: 使用Keepalived实现web服务器的高可用 Web服务器IP地址分别为192.168.4.53和192.168.4.54 Web服务器53 为主服务器,Web服务器54为备服务器 Web服务器的VIP地址为192.168.4.251 客户端通过访问VIP地址访问Web页面 实验步骤: 实验准备 配置yum源 # service iptables stop            //关闭防火墙 # c