下载solr 4.4.0和zookeeper-3.4.5版本, 3台Redhat 6.1操作系统的虚拟机。其中三台安装搭建zookeeper集群,5台机器上都部署solr应用。
更改各个主机的hosts文件,在文件末尾添加:
10.128.90.45 zk1
10.128.90.46 zk2
10.128.90.47 zk3
重启系统。(如果和其他应用冲突,可以更改成其他的主机名称)
三台主机
ip地址 机器名简称
10.128.90.45 zk1
10.128.90.46 zk2
10.128.90.47 zk3
3.1修改三台服务器机器名, 修改方式如下
vi /etc/sysconfig/network
[root@zk1 was]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=zk1
3.2配置hosts文件
vi /etc/hosts
后面加三行
10.128.90.45 zk1
10.128.90.46 zk2
10.128.90.47 zk3
重启后生效
3.3配置jdk
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_71
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
配置后执行以下语句才能生效
source /etc/profile
3.4 ssh免登陆
三台服务器分别执行该语句
ssh-keygen -t rsa
生成的文件目录通过显示日志可以找到在哪
查看生成的文件
cd /root/.ssh
执行以下语句
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
将其他两台生成的id_rsa.pub重命令后,分别为id_rsa.pub.zk2,id_rsa.pub.zk3
都放到第一台服务器的/root/.ssh上,
然后执行以下语句把这两台服务器生成的公钥加到第一台上去
cat id_rsa.pub.zk2 >> authorized_keys
cat id_rsa.pub.zk3 >> authorized_keys
然后将生成的总的authorized_keys分别放到其他两台的/root/.ssh上去
配置完成,验证,
Zk1服务器上执行ssh命令,确保3台服务器通过ssh都能相互免密码进去
如下图是我在第一台主机上登录其他服务器,并且相互切换的列子
以zk1主机为例:
4.1 下载zookeeper-3.4.5.tar文件,解压文件生成zookeeper-3.4.5
[root@zk1]# tar -zxvf zookeeper-3.4.5.tar
4.2 更改zoo.cfg配置文件
[root@zk1]# cd /zookeeper-3.4.5/conf
[root@zk1]# vi zoo.cfg
文件内容是:
tickTime=2000
initLimit=10
syncLimit=5
dataLogDir=/zookeeper/log/
dataDir=/zookeeper/data/
clientPort=2181
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
如果该目录中没有这个文件,则创建一个新的文件。注意每一个配置项的后面不要有空格,否则会报错。
4.3 配置myid文件
创建zoo.cfg文件中配置的dataLogDir和dataDir文件夹:
进入解压缩的zookeeper-3.4.5目录下执行如下命令
[root@zk1]#mkdir data
[root@zk1]#mkdir log
在dataDir指向的文件夹中创建myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件中配置的server.X中X为什么数字,则myid文件中就输入这个数字,例如当前主机zk1,在zoo.cfg文件中对应的是server.1,所以myid文件中的值应该是1。
4.4 启动zookeeper
进入/zookeeper/bin文件夹,执行zkServer.sh文件
[root@zk1]#./zkServer.sh start
查看状态
[root@zk1]#./zkServer.sh status
查看启动日志
[root@zk1] #tail –f zookeeper.out
以zk1为案例配置其他两个节点。三个节点全部启动之后,zookeeper会根据选举算法选出一个leader,系统运行正常。
4.5 常见错误
#Cannot open channel to 2 at election address slave-02/192.168.0.178:3888 java.net.ConnectException: Connection refused
这是因为集群中的某一个节点没有启动完成,导致已经启动的节点无法连接该节点。这个错误在所有节点都启动成功之后消失。
#Cannot open channel to 1 at election address zk1/192.168.1.201:3888
java.net.NoRouteToHostException: No route to host
这是因为防火墙问题,关闭防火墙或开放相应端口
说明:先在一台主节点服务器上安装好一个solr单节点环境,测试成功后直接拖多其它服务器上去,改下相关配置就行了,为了方便安装文件管理,建议将zookeeper,tomcat,solr都放到同一个文件夹下。
1)新建solrcloud文件并授予权限
[was@zk1 ~]$ mkdir solrcloud
[was@zk1 ~]$ chmod 777 solrcloud
[was@zk1 ~]$ cd /home/was/solrcloud
在solrcloud新建solrhome文件
[was@zk1 ~]$ midkr solrhome
2)将上传的solr.4.4.0压缩包解压缩,
3)将solr.4.4.0/dist/solr-4.4.0.war 复制到/home/was/solrcloud/solrhome 并重命为solr.war
cp /home/was/solrcloud/solr-4.4.0/dist/solr-4.4.0.war /home/was/solrcloud/solrhome/solr.war
4)将上传的tomcat解压缩
tar -zxvf apache-tomcat-6.0.44.tar.gz
5)进入tomcat bin目录,启动tomcat
cd /solrcloud/apache-tomcat-6.0.29/bin 进入bin目录
./startup.sh 启动tomcat 此时会在tomcat下的conf文件夹下多出一个目录Catalina
cd /home/was/solrcloud/apache-tomcat-6.0.29/conf/Catalina/localhost
在该目录下新建solr.xml内容如下
type="java.lang.String" value="/home/was/solrcloud/solrhome" override="true" />
docBase="/home/was/solrcloud/solrhome/solr.war" 指定为solrcloud/solrhome下复制出来solr的war包
6)启动tomcat, tomcat的webapps 下边多了解压出来的solr文件夹
进入solr/WEB-INF/ 下修改web.xml
改为 :
7)将/home/was/solrcloud/solr-4.4.0/example/solr 文件夹下所有东西复制到 /home/was/solrcloud/solrhome
cp -r /home/was/solrcloud/solr-4.4.0/example/solr/* /home/was/solrcloud/solrhome
8)复制/home/was/solrcloud/solr-4.4.0/example/lib/ext下所有jar包到tomcat 下的webapps/solr/WEB-INF/lib下
cp -r /home/was/solrcloud/solr-4.4.0/example/lib/ext/* /home/was/solrcloud/apache-tomcat-6.0.44/webapps/solr/WEB-INF/lib/
复制 /home/was/solrcloud/solr-4.4.0/example/resources/log4j.properties 到solr/WEB-INF/class 如果没有class先创建class文件夹,并赋于写权限
cp /home/was/solrcloud/solr-4.4.0/example/resources/log4j.properties /home/was/solrcloud/apache-tomcat-6.0.44/webapps/solr/WEB-INF/class/
9)启动tomcat 访问 http://localhost:8080/solr 如图,至此单机版solr配制完成
进入 cd /home/was
通过scp命令同步到其他两台机器上去,命令如下:
scp -r solrcloud was@zk2:/home/was/
scp -r solrcloud was@zk3:/home/was/
并授予权限: chmod 777 solrcloud
10)配制集群
将zookeeper和tomcat关联
10.128.90.45(zk1)台主机修改tomcat 的 bin目录下catalina.sh文件在第二行加入
JAVA_OPTS="-Dbootstrap_confdir=/home/was/solrcloud/solrhome/collection1/conf -Dcollection.configName=myconf
-DzkHost=10.128.90.45:2181,10.128.90.46:2181,10.128.90.47:2181 -DnumShards=3"
10.128.90.46(zk2)10.128.90.47(zk3)台主机修改tomcat 的 bin目录下catalina.sh文件在第二行加入
JAVA_OPTS="-DzkHost=10.128.90.45:2181,10.128.90.46:2181,10.128.90.47:2181 -DnumShards=3"
http://10.128.90.45:8080/solr/
http://10.128.90.46:8080/solr/
http://10.128.90.47:8080/solr/
任何一个IP均可访问。