在CentOS7上搭建ZooKeeper+Dubbo分布式服务

环境

  • 系统: CentOS 7.3 x64
  • JDK: JDK1.8 8u161
  • Ant: apache-ant-1.10.1
  • Maven: apache-maven-3.5.2
  • Tomcat: apache-tomcat-8.5.24
  • ZooKeeper: zookeeper 3.4.11

开始搭建

安装ZooKeeper

  1. 解压zookeeper-3.4.11.tar.gz,移动到/opt目录

    tar zxvf zookeeper-3.4.11.tar.gz
    mv zookeeper-3.4.11 /opt/
    
  2. 编辑配置文件

    cd /opt/zookeeper-3.4.11/conf
    cp zoo_sample.cfg zoo.cfg
    vim zoo.cfg
    # 替换下面内容
    dataDir=/tmp/zookeeper/data
    dataLogDir=/tmp/zookeeper/logs
    
  3. 创建zookeeper数据和日志目录

    cd /tmp
    mkdir zookeeper
    cd zookeeper
    mkdir data logs
    
  4. 启动zookeeper

    cd /opt/zookeeper-3.4.11/bin
    ./zkServer.sh start
    
  5. 下面是打包成rpm包安装方式,血泪史,可以不看跳过

    下载必要的软件包

    sudo yum install -y rpm-build rpmdevtools mock
    

    下载zookeeper-rpms: zookeeper-rpms包含了用于zookeeper构建RPM所需的一切,注意: 应下载用于zookeeper3.4.10的commit也就是58c775d这个commit,3.4.11的版本用这个仓库在centos7上有问题,暂未找到解决方法

    然后按照说明进行

    cd zookeeper-rpms
    rpmdev-setuptree
    spectool -g zookeeper.spec
    rpmbuild -bs --nodeps --define "_sourcedir $(pwd)" --define "_srcrpmdir $(pwd)" zookeeper.spec
    # 这里直接执行sudo mock zookeeper-3.4.10-1.src.rpm会失败,在zookeeper-rpms的Issues中找到解决方法,输入如下命令即可
    sudo mock -r epel-7-x86_64 --old-chroot zookeeper-3.4.10-1.src.rpm
    

    打包好的文件在/var/lib/mock/epel-7-x86_64/result中

    cd /var/lib/mock/epel-7-x86_64/result
    yum localinstall zookeeper-3.4.10-1.x86_64.rpm
    

    然后就可以输入命令启动zookeeper

    zookeeper start
    

    下面是自行打包rpm,最后失败告终,血泪史中的血泪史

    # zookeeper-3.4.11中包含的README_packaging.txt中所说,打包成rpm需要先安装cppunit和python-setuptools
    yum install cppunit
    yum install python-setuptools
    # 然后执行
    ant rpm
    # 报错,在一个java文件中import了一个包,这个包找不到,包名忘了,谷歌无果,遂放弃zookeeper-3.4.11,下载zookeeper-3.4.10
    # 然后执行
    ant rpm
    # 同样报错,但不是一样的错误,好在能在谷歌上搜到出错原因,就是打包rpm还要依赖其他软件包,于是安装,安装后ant继续报错,继续谷歌,发现全是缺乏依赖的软件包,然后就报错->装软件->ant->报错->...循环,最后安装的软件列表如下
    gcc
    gcc-g++
    autoconf
    automake
    autogen
    cppunit-devel
    libtool
    python-devel
    rpm-build
    rpmdevtools
    mock
    # 最后还是报错,报文件找不到,放弃,谷歌寻找ZooKeeper打包rpm的方法,最后找到了https://github.com/skottler/zookeeper-rpms
    

运行dubbo-admin

  1. 解压dubbo-2.5.9.tar.gz,移动至/opt目录(我习惯放在/opt目录)

    tar zxvf dubbo-2.5.9.tar.gz
    mv dubbo-dubbo-2.5.9 /opt
    
  2. 在dubbo项目根目录,执行

    mvn install -Dmaven.skip.test
    
  3. 上一步执行后,会在dubbo-admin/target下生成war包,将其移动至tomcat目录

    # 在tomcat目录下新建dubbo-admin目录
    cd /opt/apache-tomcat-8.5.24/
    mkdir dubbo-admin
    # 将之前生成的war包移动到这里
    mv /opt/dubbo-dubbo-2.5.9/dubbo-admin/target/dubbo-admin-2.5.9.war ./
    # 解压,指定解压后的目录名为ROOT
    unzip dubbo-admin-2.5.9.war -d ROOT
    # 可以把war包删了
    rm -f dubbo-admin-2.5.9.war
    
  4. 编辑dubbo-admin的配置文件

    cd ROOT/WEB-INF/
    vim dubbo.properties
    # 这里可以配置dubbo注册中心的类型及地址,dubbo的root用户和guest用户的密码
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    dubbo.admin.root.password=root
    dubbo.admin.guest.password=guest
    
  5. 编辑tomcat配置文件

    cd /opt/apache-tomcat-8.5.24/conf
    vim server.xml
    # 在<server></server>中添加一个Service节点
    <Service name="dubbo-admin">
    
        <Connector port="8081" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
        <Connector port="8010" protocol="AJP/1.3" redirectPort="8445" />
        <Engine name="Catalina" defaultHost="localhost">
          <Realm className="org.apache.catalina.realm.LockOutRealm">
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                   resourceName="UserDatabase"/>
          </Realm>
    
          <Host name="localhost"  appBase="dubbo-admin"
                unpackWARs="true" autoDeploy="true">
    
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access_log" suffix=".txt"
                   pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    
          </Host>
    	</Engine>
    </Service>
    
  6. 启动tomcat

    /opt/apache-tomcat-8.5.24/bin/startup.sh
    
  7. 开放8081端口

    # 我使用的防火墙是firewalld,用iptables的自行网上搜开放端口的方法
    # 查看已经开放的端口
    firewall-cmd --list-ports 
    # 若没有8081端口,开放它
    firewall-cmd --zone=public --add-port=8081/tcp --permanent
    # 重启防火墙
    firewall-cmd --reload
    # 查看已经开放的端口
    firewall-cmd --list-ports
    
  8. 浏览器访问ip:8081即可看见Dubbo Admin页面

posted @ 2020-09-03 14:58  Ryokai  阅读(200)  评论(0)    收藏  举报