Skip to content

Package

songyuyuyu edited this page Oct 29, 2021 · 29 revisions

docker镜像制作及上传

docker镜像制作

  1. 下载xpipe代码
git clone https://github.com/ctripcorp/x-pipe.git
  1. 在xpipe目录下运行make-docker-images.sh即可
cd x-xpipe
bash redis/dockerPackage/make-docker-images.sh ctripcorpxpipe 1.0
  • ctripcorpxpipe:在本章节都是docker_id的默认值,表示在dockerhub上申请的用户名
  • 1.0:在本章节都是docker_tag的默认值,表示要制作的镜像版本

制作好的镜像可在本地查看

    执行命令:docker images

    REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
    ctripcorpxpipe/xpipe-proxy     1.0       2482005982e4   6 days ago      748MB    
    ctripcorpxpipe/xpipe-keeper    1.0       b8672c15c8de   6 days ago      734MB
    ctripcorpxpipe/xpipe-console   1.0       62e4ed6d4710   6 days ago      734MB
    ctripcorpxpipe/xpipe-meta      1.0       e2c600160ee4   6 days ago      735MB

docker镜像使用

curl -sOSL https://raw.githubusercontent.com/ctripcorp/x-pipe/master/redis/dockerPackage/start-xpipe-container.sh
bash start-xpipe-container.sh ctripcorpxpipe 1.0 console-proxy

参数列表:

  • ctripcorpxpipe:docker_id
  • 1.0:docker_tag
  • console-proxy:参数mode,代表启动的模式
    • console: console+metaserver+keepercontainer
    • console-checker:console+checker+metaserver+keepercontainer
    • console-proxy: console+metaserver+keepercontainer+proxy(默认)

启动后的容器分布详情参考启动docker 功能验证参考docker验证

docker镜像上传

  1. 首先登陆dockerhub,登陆自己的dockerId,替换携程账号(ctripcorpxpipe)
docker login -u ctripcorpxpipe -p
  1. 上传docker镜像
 docker push ctripcorpxpipe/xpipe-console:1.0
 docker push ctripcorpxpipe/xpipe-keeper:1.0
 docker push ctripcorpxpipe/xpipe-meta:1.0
 docker push ctripcorpxpipe/xpipe-proxy:1.0

打包

直接下载打包好的zip文件

下载Release包

使用源码打包

mvn clean install -Plocal,package -DskipTests

看到如下输出,代表打包成功:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] xpipe-parent ....................................... SUCCESS [3.613 s]
[INFO] core ............................................... SUCCESS [8.144 s]
[INFO] redis-parent ....................................... SUCCESS [0.293 s]
[INFO] redis-core ......................................... SUCCESS [4.382 s]
[INFO] redis-keeper ....................................... SUCCESS [3.646 s]
[INFO] redis-meta ......................................... SUCCESS [2.135 s]
[INFO] redis-console ...................................... SUCCESS [4.919 s]
[INFO] redis-integration-test ............................. SUCCESS [2.355 s]
[INFO] services ........................................... SUCCESS [0.346 s]
[INFO] local-service ...................................... SUCCESS [1.486 s]
[INFO] package ............................................ SUCCESS [0.908 s]
[INFO] package-redis-meta ................................. SUCCESS [3.448 s]
[INFO] redis-keeper-package ............................... SUCCESS [2.918 s]
[INFO] redis-console-package .............................. SUCCESS [2.825 s]
[INFO] ------------------------------------------------------------------------

配置

基础依赖

由于服务依赖于 Zookeeper,在每个机房需要有对应的Zookeeper集群
假设目前存在两个机房:jq、oy

Console

打包位置:redis/package/redis-console-package/target/
打包格式:zip
将此 zip 包解压缩到用户目录,假设加压缩后根目录为 console

DB 初始化脚本

Console 包解压缩之后,可以看到 console/sql 目录,目录下面存放数据库表结构初始化脚本: xpipedemodbtables.sql

DB初始化数据

Console 包解压缩之后,可以看到 console/sql 目录,目录下面存放数据库初始化脚本: init_data.sql
meta server依赖于console提供的机房meta信息,如果console初始化没数据,可能会导致meta server无法启动
建议运行此脚本,进行数据初始化操作。

基础配置文件

文件位置: console/config/xpipe.properties
重点配置项: ​

  • metaservers
    指定各机房 meta server 地址
  • zk.address
    Zookeeper 地址

数据源配置文件

文件位置:console/config/datasources.xml

Meta Server

打包位置:redis/package/redis-metaserver-package/target/
打包格式:zip

jq 机房配置

jq 机房服务器解压压缩包:

文件位置: console/config/xpipe.properties
重点配置项:

  • datacenter
    配置当前数据中心名字
  • metaserver.id
    当前 meta server 的 id,支持一个数据中心多个 meta server,不同 meta server 需要对应不同 id
  • zk.address
    当前数据中心 Zookeeper 地址
  • zk.namespace
    Zookeeper 命名空间
  • console.address
    console 地址
  • dcinfos
    各数据中心 meta server 地址

oy 机房配置

oy 机房服务器解压压缩包,基础配置项和 jq 机房类似
注意: ​ 机房名字需要改成特定机房, ​ 如果共享 Zookeeper,zk.namespace 需要有不同的配置。

Keeper Container

打包位置:redis/package/redis-keeper-package/target/ 打包格式:zip

支持一个数据中心多个 keeper container 服务器,只要按照如下配置方式配置好即可。

配置文件

文件位置: console/config/xpipe.properties
重点配置项:

  • datacenter
    当前数据中心名
  • meta.server.url
    当前数据中心 meta server 地址
  • zk.address
    Zookeeper server 地址,此处 Zookeeper 地址需要和对应机房 meta server 配置的地址相同
  • zk.namespace
    Zookeeper 命名空间 此处命名空间需要和对应机房 meta server 配置的命名空间相同
  • replication.store.dir
    本地数据文件保存位置

KeeperContainer与Keeper之间关联

注意:一个Keeper Container是一个容器,里面可以放多个keeper,用户只需要启动Keeper Container,Keeper由Meta Server自动增加、启动。

Keeper Container的端口参见init_data.sqlinsert into KEEPERCONTAINER_TBL部分。
默认init_data.sql中定义的金桥机房Keeper Container端口:

  • 7080
  • 7081
  • 7082

默认init_data.sql中定义的欧阳机房Keeper Container端口:

  • 7180
  • 7181
  • 7182

启动

【仅支持】 在Linux和Mac下运行

不要在 root 用户下运行

否则可能会出现错误:chown: cannot access ‘’: No such file or directory

MAC用户特别注意

由于在启动脚本中我们会用到gun-sed,进行一些内容替换,使用前请安装gun-sed:
安装方式:

brew install gnu-sed

安装完成之后,link到gnu-sed(文件路径中的具体版本参考安装时的版本):

ln /usr/local/Cellar/gnu-sed/4.4/bin/gsed /usr/local/bin/sed	

并且确认安装后的sed版本是OK的:

运行命令:sed --version,应该可以看到如下输出:

sed (GNU sed) 4.4
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Jay Fenlason, Tom Lord, Ken Pizzini,
and Paolo Bonzini.
GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
E-mail bug reports to: <bug-sed@gnu.org>.

启动顺序

启动 Zookeeper

请在 https://zookeeper.apache.org / 下载 zookeeper 3.4.8 版本
每个数据中心需要对应一个单独的Zookeeper集群

启动 Console

进入解压缩后的目录,运行 scripts/startup.sh 脚本

启动 Meta Server

进入解压缩后的目录,运行 scripts/startup.sh 脚本

启动 Keeper Container

进入解压缩后的目录,运行 scripts/startup.sh 脚本

单机启动注意

单机启动方式

单机启动时,默认Console、Meta Server、Keeper端口会有冲突,需要将不同服务启动在不同端口。
将服务启动在特定端口方法如下:

  1. 建立文件夹,文件夹名格式“服务名_端口”,例如:"metaserver_9747"
  2. 将对应压缩包解压到上面建立的文件夹
  3. 运行scripts/startup.sh脚本,此脚本自动会获取路径中的端口信息,在上面的例子中为"9747"

启动后,应该能看到下面图片中红框部分,代表设置启动端口为"9747":

真正运行时,可以建立下面几个文件夹,并且将压缩包拷贝到对应目录:

  • console
  • metaserver_9747
    • 对应dc1 metaserver
  • metaserver_9748
    • 对应dc2 metaserver
  • keepercontainer_7080
    • 对应dc1 keepercontainer
  • keepercontainer_7081
    • 对应dc1 keepercontainer
  • keepercontainer_7082
    • 对应dc1 keepercontainer
  • keepercontainer_7180
    • 对应dc2 keepercontainer
  • keepercontainer_7181
    • 对应dc2 keepercontainer
  • keepercontainer_7182
    • 对应dc2 keepercontainer