将1台Zookeeper扩展为3台集群,同时安装Dubbo-Admin

作者: loaf 分类: 随笔 发布时间: 2019-09-27 14:59

现有一台正在使用的zookeeper,上面还有一个dubbo-monitor-simple,用来管理Dubbo服务。现准备在另外两台上安装新的zookeeper,先配置好,在发布时,再将原来正在使用的zookeeper加入。

搭建zookeeper

先下载到本地,目前选择最新版本3.5.5,下载到本地,解压到当前用户目录,将这个目录赋权给当前用户,然后使用里面的配置文件

su
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz
tar -zxf apache-zookeeper-3.5.5-bin.tar.gz
chown -R xiben:xiben ./apache-zookeeper-3.5.5-bin
cd  ./apache-zookeeper-3.5.5-bin/conf
cp zoo_sample.cfg zoo.cfg
vi ./zoo.cfgy

在zoo.cfg中,主要是定义好数据目录和日志目录,然后就是定义集群服务器名

dataDir=/home/xiben/apache-zookeeper-3.5.5-bin/data
dataLogDir=/home/xiben/apache-zookeeper-3.5.5-bin/logs

server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888
vi /etc/profile

#Zookeeper_HOME
export ZOOKEEPER_HOME=/home/xiben/apache-zookeeper-3.5.5-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin

//重新加载/etc/profile文件
source /etc/profile 

//创建数据目录和日志目录,并修改所有权
cd /home/xiben/apache-zookeeper-3.5.5-bin
mkdir data
mkdir logs
chomwn -R xiben:xiben ./data
chomwn -R xiben:xiben ./logs

//创建myid文件
cd ./data
vi myid
//在里面输入本服务器的ID号,这里是第一台,直接输入数字1即可

先试着运行一下

[xiben@XibenWebAPI ~]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/xiben/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

再看一下状态

[xiben@XibenWebAPI ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/xiben/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.

能看到,集群是没有启动的,因为现在只运行了一台机器。现在将其拷到另一台上

//下面直接将目录下的内容拷到服务器2和3上,因为conf下的zoo.cfg也拷过去了,所以不需要再修改配置,如果要修改,得所有的机器都修改。
//这时因为我将每台机器的root登录权限关闭了,所以直接用scp时会无关登录,得退出到用户权限 
scp -r /home/xiben/apache-zookeeper-3.5.5-bin  zookeeper2:/home/xiben/
scp -r /home/xiben/apache-zookeeper-3.5.5-bin  zookeeper3:/home/xiben/

//另外还要确定一下的是,所有的/etc/hosts都得增加对应的DNS,
//再将myid文件内容修改一下,将1修改为2

如有修改,可用zkServer.sh stop停止下再用start启动。这时

//第1台上
[xiben@XibenWebAPI conf]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/xiben/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
//第2台上
[xiben@RabbitMqService ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/xiben/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

看来leader或者follower是自动产生的,不是先运行的一定是leader

相似的,scp到另一台机器,这时能看到3台都起来了,一台leader,2台follower。

安装dubbo-admin

dubbo-admin版本不同,网上的教程也都不同,而我们原来的版本比较老,最终还是要到github找最新的教程,目前Dubbo最新的版本是2.7.4,dubbo-admin也独立成一个项目了。

su
yum install git
git clone https://github.com/apache/dubbo-admin.git

cd ./dubbo-admin/dubbo-admin-server/src/main/resources
vi ./application.properties

//将里面三个zookeeper:后面全面改现在正在使用的zookeeper服务器,如zookeeper://10.81.103.16:2181

//因为没有安装maven,所以,用mvn时会报找不命令
yum install maven

cd /home/xiben/dubbo-admin
mvn clean package

当然没这么容易,失败了,第一个错误是

------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] dubbo-admin ....................................... SUCCESS [1.740s]
[INFO] dubbo-admin-ui .................................... FAILURE [0.082s]
[INFO] dubbo-admin-server ................................ SKIPPED
[INFO] dubbo-admin-distribution .......................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.217s
[INFO] Finished at: Fri Sep 27 10:02:23 CST 2019
[INFO] Final Memory: 27M/291M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.6:install-node-and-npm (install node and npm) on project dubbo-admin-ui: The plugin com.github.eirslett:frontend-maven-plugin:1.6 requires Maven version 3.1.0 -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginIncompatibleException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :dubbo-admin-ui

按上面的说法,第一部分已经编译成功,但是第二个UI开始不成功了。输入上面的help1网址,说是maven的版本不对,用mvn -version看一下,是3.05,提示上说3.1.0,但我用yum update maven却没用,看来CentOS库中的版本没有升级啊。

//先删除吧
yum remove maven
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz

tar -zxvf apache-maven-3.6.2-bin.tar.gz

//修改变量
vi /etc/profile
//在里面加上以下两行
export MAVE_HOME=/home/xiben/apache-maven-3.6.2
export PATH=$PATH:${JAVA_HOME}/bin:${MAVE_HOME}/bin
//回来后启用一下
source /etc/profile

//再来
cd /home/xiben/dubbo-admin
mvn clean package

这次成功了,然后启动试试

cd dubbo-admin-distribution/target
java -jar dubbo-admin-0.1.jar

失败了,从说明来看,是8080端口被占用,回到配置

cd ./dubbo-admin/dubbo-admin-server/src/main/resources
vi ./application.properties
//加上一行
server.port=9898

再重新编译一下,然后再运行java -jar dubbo-admin-0.1.jar,然后用IP:9898访问,能看到管理界面了。

和原来的版本区别还是比较大的,而且新版不需要用户名和密码,这个看起来问题也不大,如果仅限于内部访问的话。但是它不是原来附加在Tomcat上,而是自己开Tomcat进程,这个方便到是方便了,但是不知道怎么才能方便地修改配置内容,难道要重新编译?还有,就是用命令行运行的,我一关闭连接,服务就中断了。再进去时,发现因为我是用su升级到root后操作的,用户账号不能访问,只好又su进去,然后秀chown -R修改了整个目录。下次还是在用户下用sudo来运行吧。至少方便些。

在网上找了一下解决方案,主要的思路是在后台开启java进程,这样关于SSh连接也不会关闭服务,关闭服务则是直接找此端口的进程号,直接Kill掉。因为这里的centOS,所以有些命令不好用,经尝试,用下面的脚本来解决。

vi startDubboAdmin.sh
#设置工程路径
project_path=/home/xiben/dubbo-admin/dubbo-admin-distribution/target
cd $project_path
#nohup后台启动,输出日志到test.log
nohup java -jar dubbo-admin-0.1.jar > dubbo-admin-running.log &
#打印日志
tail -f dubbo-admin-running.log
vi stopDubboAdmin.sh
#根据端口来关闭服务
#设置关闭的端口
port=9898
#根据端口号查询对应的pid
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');

#杀掉对应的进程,如果pid不存在,则不执行
if [  -n  "$pid"  ];  then
    kill  -9  $pid
    echo "dubbo-admin 工程进程$pid 关闭成功!";
else
    echo "dubbo-admin 工程未启动!"
fi
chmod +x startDubboAdmin.sh
chmod +x stopDubboAdmin.sh