前言
之前我有使用window搭建过,但是对于服务器来说,linux是最适合的。Linux系统具有稳定且高效、免费或少许费用、安全的用户及文件权限策略、多用户、多任务、支持多线程和多CPU、漏洞少且快速修补、相对不耗费资源、可自由定制等具有优越性的特点。
此篇文章是依据于上一篇用windows搭建的改写,主要说说在linux上的配置问题。
正文
首先你需要在虚拟机上安装好jdk,并配置好java相关的环境变量$JAVA_HOME。ZooKeeper服务器是用Java编写创建,它运行在JVM上。可以使用java -version
命令查看是否配置成功。
下载好linux的zookeeper安装包,我使用的是zookeeper-3.4.6.tar.gz
,把它解压好。
与windows环境下一样,进入conf目录下,把zoo_sample.cfg
这个文件名改成zoo.cfg
。并用vi进入该文件, 把dataDir=/tmp/zookeeper
修改成如下
dataDir=/home/sjw/zookeeper/zookeeper-3.4.6/data dataLogDir=/home/sjw/zookeeper/zookeeper-3.4.6/logs并在zookeeper根目录下创建对应的文件 这里有个问题要注意下,因为zookeeper需要用到2181端口,所以需要打开,不然会出现以下这个问题
DEBUG [localhost-startStop-1-SendThread(192.168.2.10:2181)] - Ignoring exception during shutdown input java.nio.channels.ClosedChannelException at sun.nio.ch.SocketChannelImpl.shutdownInput(SocketChannelImpl.java:755) at sun.nio.ch.SocketAdaptor.shutdownInput(SocketAdaptor.java:421) at org.apache.zookeeper.ClientCnxnSocketNIO.cleanup(ClientCnxnSocketNIO.java:200) at org.apache.zookeeper.ClientCnxn$SendThread.cleanup(ClientCnxn.java:1246) at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1170)
解决方法:
开启防火墙端口 2181 /sbin/iptables -I INPUT -p tcp --dport 2181 -j ACCEPT
将该设置添加到防火墙的规则中/etc/rc.d/init.d/iptables save
启动服务
然后即可到bin目录下启动服务zkServer.sh start
查看服务状态,是否启动 zkServer.sh status
接下来,在代码中,发布dubbo服务以及引用服务的时候,要把ip地址修改成你linux服务器的ip地址,比如我的
<dubbo:registry protocol="zookeeper" address="192.168.2.10:2181" />
具体代码可参考windows搭建的文章
下载dubbo-admin的war包,在Linux的tomcat里部署,把工程放在webapps下即可访问
设置zookeeper开机自启动
有两种方式可以实现开机自启动
第一种:直接修改/etc/rc.d/rc.local文件
在/etc/rc.d/rc.local
文件中需要输入两行,其中export JAVA_HOME=/usr/local/java/jdk1.7.0_72
是必须要有的,否则开机启动不成功,大家根据自己JDK安装的位置自行更改。
另一行/home/sjw/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start
则是我们zookeeper的启动命令,当然这里的路径也是我给的例子。配置好之后,重启虚拟机,会发现已经可以开机自启了。
[root@zookeeper ~]# vim /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
export JAVA_HOME=/usr/local/java/jdk1.7.0_72
/home/sjw/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start
第二种:把zookeeper做成服务
root用户下进入到/etc/rc.d/init.d
目录下
新建一个zookeeper脚本,并添加执行权限
touch zookeeper
chmod +x zookeeper
接着用vi zookeeper来编辑这个文件
#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
export JAVA_HOME=/usr/local/java/jdk1.7.0_72
export PATH=$JAVA_HOME/bin:$PATH
case $1 in
start) su root /home/sjw/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start;;
stop) su root /home/sjw/zookeeper/zookeeper-3.4.6/bin/zkServer.sh stop;;
status) su root /home/sjw/zookeeper/zookeeper-3.4.6/bin/zkServer.sh status;;
restart) su root /home/sjw/zookeeper/zookeeper-3.4.6/bin/zkServer.sh restart;;
*) echo "require start|stop|status|restart" ;;
esac
这个时候我们就可以用使用service zookeeper start/stop命令来尝试启动关闭zookeeper,使用service zookeeper status查看zookeeper状态了。
最后一点我们需要开机自动启动
所以需要添加到启动里面
使用chkconfig --add zookeeper
命令把zookeeper添加到开机启动里面
添加完成之后接这个使用chkconfig –list 来看看我们添加的zookeeper是否在里面
如果上面的操作都正常的话,你就可以重启你的linux服务器了,并查看是否自启成功了。