TcaplusDB容器环境部署

1. 版本介绍

TcaplusDB Local版(容器版),是为用户提供的一个满足本地开发调试的版本(基于Docker部署的可下载版本),相比腾讯云 TcaplusDB 版,本地版可以方便用户在无法连通云环境的开发环境进行代码调试,同时在功能上和腾讯云版本无差别。此文档主要介绍用户如何在本地开发环境部署 TcaplusDB 本地 Docker 环境。

部署过程中如遇到问题,可先查阅常见问题列表,列表没有解决方案时,可联系TcaplusDB团队协助解决。

2. 兼容性说明

目前已经在下列环境做过兼容性测试,建议尽量在进行过兼容性测试的环境上部署TcaplusDB的Local版。

已完成兼容测试的环境
Windows10 + WSL2(CentOS 7)
MAC + Parallels + Debian
CentOS 7
TLinux1.2/TLinux2.2

TcaplusDB Local版,要求是在Linux环境以Docker容器的方式运行,如果机器为Windows或者MAC,则先在这些系统上运行Linux虚拟机或者WSL(Windows),再在虚拟机中拉起Docker容器。

在未进行兼容性测试的环境部署TcaplusDB Local版,可能会出现一些未知兼容性问题。

3. 性能说明

宿主机规格 可支撑QPS
4核8G内存 2000
8核16G内存 4000
>= 16核32G内存 8000

说明:

1、由于表格数量与tcapsvr的shard数相关,默认只上架一组机器的情况下表格最多可新建512个.

2、可支撑QPS是基于默认表引擎参数bnum=7500000#xmsiz=12000000#xikmsiz=3000000#kmapow=6#kfapow=6#vmapow=6#vfapow=6#lnum=2,1kb数据读写,10GB数据规模得到的测试值并非上限。

4. 环境要求

  • 部署机器的CPU应当不少于4核,内存总容量不少于8G,启动TcaplusDB Local版容器之前,内存的空闲容量不少于6G。

  • 部署机器磁盘大小建议 100G,存放Docker容器的磁盘可用空间应当大于 50GB。

  • 部署机器需要提前安装Docker,安装方法参见附录1

  • 创建Docker容器的用户必须具有通过sudo执行docker命令的权限。

  • 部署机器应当关闭了SELinux。

  • 如果部署机器是Windows + WSL2,则应当正确设置vsyscall,设置方法参见附录3

  • 如果部署机器是Debian(或者Debian虚拟机),则应当正确设置vsyscall,设置方法参见附录4

5. 版本下载

参见Docker镜像下载文档。

6. 版本部署

6.1. Linux环境版本部署

6.1.1. 部署环境检查和准备

下载环境扫描脚本。

wget https://tcaplus-tools-1301716906.cos.ap-guangzhou.myqcloud.com/tcaplus_tools.sh

运行环境扫描脚本,扫描环境资源,并检查是否满足TcaplusDB Local版最低运行要求。

sh tcaplus_tools.sh check_environment

环境扫描结果样例:

Environment Information: 
    OS                        : Tencent tlinux release 2.2 (Final)
    CPU Arch                  : x86_64
    CPU Cores                 : 8
    Memory Total (MB)         : 15787
    Memory Free (MB)          : 1025
    Memory Cached (MB)        : 4542
    Disk Free (MB)            : 15787
    Docker Version            : Docker version 18.09.7, build 2d0083d
    LDD Version               : ldd (GNU libc) 2.17
    GCC Version               : gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
    G++ Version               : g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
    Go Lang Version           : Not found
    Java Version              : Not found
    Python Version            : Python 2.7.5
    SELinux Setting           : Disabled

环境扫描结果各项指标参考值:

指标 参考值
OS 参见版本兼容性说明
CPU Arch x86_64
CPU Cores >= 4
Memory Total(MB) >= 8192 (8G)
Memory Free(MB) >= 6144 (6G)
Disk Free(MB) >= 51200 (50G)
Docker Version 建议 >= Docker 1.13.1 或者 >= Docker CE 18.09.7
安装方法参见附录1
SELinux Settings Disabled
关闭方法参见附录2

TcaplusDB的一些进程依赖于 mdadm, 如果部署机器默认没有安装,就需要手动安装一下。

#centos
yum install -y mdadm
#debian
apt-get update
apt-get install -y mdadm

6.1.2. 检查Docker是否启动

登录部署机器。

检查Docker服务是否安装并已正常启动。Docker的安装参见附录1

# 查看Docker服务状态,检查服务是否已经启动
sudo service docker status

# 启动Docker服务命令
sudo service docker start

6.1.3. 导入Local版镜像

导入TcaplusDB Local版镜像到本地Docker镜像库。

sudo docker load -i tcaplusdb-local-3.55.1.tar.gz

查看本地Docker镜像库,检查镜像是否导入成功。

sudo docker images

本地Docker镜像库,如出现对应的镜像信息,即表示导入成功。

REPOSITORY                                               TAG                 IMAGE ID            CREATED             SIZE
tcaplusdb-local                                          3.55.1              bb42e8ecff11        3 days ago          8.43GB

6.1.4. 创建Local版容器

容器创建命令样例:

sudo docker run -itd --memory=8g --storage-opt size=50G --shm-size=2G --privileged -e TCAPLUS_CONTAINER_PUBLIC_IP="x.x.x.x" -e TCAPLUS_CONTAINER_OMS_PASSWORD='***' -p 80:80 -p 9999:9999 -p 13755-13765:13755-13765 --name test tcaplusdb-local:3.55.1

客器启动参数说明:

参数 说明
--shm-size=2G 【可选】指定容器的共享内存大小,最低要求为2G,当未指定或者容器启动的时候检测到共享内存小于2G时,会强制设置成最小值2G。
--privileged 必选】指定以特权模式启动容器,TcaplusDB Local版启动时会涉及一些系统参数的修改,如果不以特权模式启动容器,会导致启动失败。
--name test 必选】指定容器名称。后续可以直接将该名称作为查看容器日志,启停容器的参数。
-e TCAPLUS_CONTAINER_PUBLIC_IP="x.x.x.x" 【可选】指定TcaplusDB容器对外提供服务的IP,如果需要在容器外访问TcaplusDB,则需要设置,该值一般为母机的对外IP。
-e TCAPLUS_CONTAINER_OMS_PASSWORD="*" 必选】指定TcaplusDB OMS默认用户tcaplus的登录密码。出于安全考虑,TcaplusDB容器并不提供默认登录密码,需要用户在容器启动的时候指定。
【说明】TcaplusDB服务启动之后,用户可以通过tcaplus用户名和该密码登录TcaplusDB OMS页面。
-p 80:80 -p 9999:9999 -p 13755-13765:13755-13765 【可选】以bridge网络模式运行容器的时候,如果需要在容器访问服务,则需要通过-p将容器内的端口与母机的端口建立映射关系,在容器外,通过母机的端口访问即可。
【说明】目前TcaplusDB Local版需要对外暴露的端口主要有80,9999,13755-13765,TcaplusDB监听的端口及说明见附件5
tcaplusdb-local:3.55.1 必选】镜像名和Tag。
--cpus=4 【可选】如果有必要,可使用该参数指定容器可使用的CPU核数,参数值应当大于等于4。
--memory=8G 【可选】如果有必要,可使用该参数指定容器可使用的内存容量,参数值应当大于等于8G。
--storage-opt size=50G 【可选】如果有必要,可使用该参数指定容器可使用的磁盘容量,参数值应当大于等于50G。
【注意】部分Docker版本,默认情况下,容器可使用的磁盘容量为10G,会出现服务运行一段时间后,磁盘很快就满的情况,此时应当通过该参数增加磁盘容量。
--network 自定义网络名 【可选】在一些环境下,可能存在母机网段与容器默认网段冲突的情况,此时应当创建自定义Docker网络,并通过该参数指定容器使用该网络,避免网络冲突。
【说明】Docker容器通常默认为容器网段为192.168或者172.17,当母机正好也处在这些网段时,应该创建一个与母机网段不同的Docker网络,如母机的网段为172.17,则可创建一个192.168网段的Docker网络,并在创建容器时,指定使用该网络。Docker网络的创建方法参考附录6

更多容器参数及说明参见:

sudo docker run --help

容器创建后会自动启动TcaplusDB服务,此时可通过“docker logs”命令查看服务启动日志,以了解服务启动进度和状态,通常服务的启动时间大约为60秒。

当容器启动日志最后出现“Run Success”字样时,即表示服务已经启动成功,可提供服务了。

sudo docker logs 容器名

6.1.5. 进入Local版容器

如果有需要进入容器查看信息或者定位问题,可执行下面的命令进入。

sudo docker exec -it 容器名 /bin/bash

6.1.6. 停止Local版容器

如果容器使用完毕,需要暂时关闭,释放资源,可以执行下面的命令关闭。

sudo docker container stop --time=120 容器名

注意,由于TcaplusDB进程退出需要一定时间,如果强制关闭,会导致数据引擎文件损坏,进而影响容器的再次启动。这里需要指定显示指定关闭超时时间为120秒,防止TcaplusDB进程还没正常关闭退出,就被Docker强制杀死的情况(Docker默认关闭超时时间10秒,时间到了之后,容器如果还未关闭退出,就会被强制关闭)。

6.1.7. 启动Local版容器

针对已经关闭的容器,如果想再次拉起服务,可以执行下面的命令启动。

sudo docker container start 容器名

6.2. Windows 10环境版本部署

6.2.1. 特别说明

部署依赖于 PowerShell 执行相关命令,特别注意:以管理员身份执行 Powershell,避免提示权限问题。

依赖项 说明 下载地址
Windows10 Build Version >=18362, 可通过在 Win10 的 CMD 终端执行ver命令查看
WSL2 Windows Subsystem for Linux 2, 微软部署 Linux 的方案,如果之前用的是 WSL1,可升级至 WSL2
Linux Kernel Update Package 用于 WSL2 的 Linux 内核组件的更新包 下载
CentOS7 Distro Linux Kernel for WSL2, 跑 docker 服务的系统载体 下载
Docker-Desktop Windows 上 docker 管理平台,结合 WSL2 管理镜像和容器 下载

6.2.2. 部署WSL2

WSL2 具体资料可以参考微软官网介绍。WSL2 部署可参考官网。下面介绍下具体流程。 如果用户已经有 WSL1 的环境,请跳转至"WSL1 升级 WSL2 部分"

步骤1,允许 WSL2 组件

可通过命令来操作,以管理员打开 PowerShell, 并运行如下命令:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

步骤2, 允许虚拟化特性

WSL2 依赖于虚拟化特性,同时依赖 Hyper-v 特性,需要允许打开

  • 允许虚拟化特性
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  • 允许 Hyper-v 特性
dism.exe  /online /enable-feature /featurename:Microsoft-Hyper-V  /all /norestart

#这个很关键,需要执行,如果未执行,会报BIOS问题
bcdedit /set hypervisorlaunchtype auto

步骤3,重启电脑

上面设置完虚拟化特性后,需要重启下电脑,使其生效。

步骤4, 安装 Linux 内核更新包

根据上述下载的 Linux Kernel Update Package,直接双击安装即可。

步骤5,设置 WSL2 支持低版本 CentOS 镜像, 如 Centos6

C:\Users\\目录,如:C:\Users\JasonLiu, 新建一个文件.wslconfig,添加如下内容:

[wsl2]
kernelCommandLine = vsyscall=emulate

步骤6,设置默认的 WSL 版本号 以管理员身份打开 PowerShell,执行如下命令:

wsl --set-default-version 2

如果设置成功,则没啥问题。

6.2.3. 升级WSL1到WSL2

如果用户本身已经开启 WSL 功能,并且用的是 WSL1。则升级类似,除了步骤 1不执行,其它按上面步骤 2、步骤 3、步骤 4、步骤 5、步骤 6设置即可。对于已有的 Linux Distro, 可以通过修改 Distro 的版本为 WSL2,如现有的 Distro 名称为 CentOS7,修改方式如下:

wsl --set-version CentOS7 2

6.2.4. 部署CentOS7 Distro

TcaplusDB 镜像对 CentOS7 系列适配较好,可以部署一个 CentOS7 的内核。根据上述资源准备阶段下载的 CentOS7 Distro。下载到指定目录后解压,右键以管理员身份安装即可。 把 Centos7 设置为默认的 Distro, 以管理员身份打开 PowerShell, 执行:

wsl --set-default CentOS7

查看当前 Distro 的状态:

wsl -l -v

6.2.5. 部署Docker Desktop

根据资源准备阶段下载的 Docker-Desktop, 直接点击安装即可。安装过程会提示是否允许 WSL2, 直接勾选即可。具体可参考官方部署文档

  • 如果安装过程中未勾选 wsl2, 可以在安装完后,打开 Docker-Desktop 的"Settings",在"General" 处看 "Use the WSL2 based engine"是否勾选。
  • 可以在 Docker-Desktop 的"Settings"页面的"Resources"处,查看当前已经安装的 Distro, 会自动关联已安装的所有 Distros, 除了关联默认的 Distro, 可以选择关联其它的 Distro.

Docker Desktop 安装好后,通过 wsl -l -v 可查看状态:

PS C:\Windows\system32> wsl -l -v
  NAME                   STATE           VERSION
* CentOS7                Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2

从上面信息来看,默认的 Distro 是 CentOS7, 同时会有两个默认的 Distro: docker-desktop, docker-desktop-data

6.2.6. 导入Local版镜像

确认当前 WSL2 的默认 Linux 是 CentOS7, 如果不是,参照上面"CentOS7 Distro 部署"。以管理员身份打开 PowerShell, 执行:

docker load -i tcaplusdb-local-3.60.1.tar.gz

导入完成后,查看镜像是否OK。

PS C:\Windows\system32> docker images
REPOSITORY        TAG       IMAGE ID       CREATED       SIZE
tcaplusdb-local   3.60.1    xxxxxxxxxxxx   2 hours ago   8.43GB

6.2.7. 创建Local版容器

由于WSL + Docker环境,WSL无法直接访问容器内的IP,因些WSL部署的时候,必须指定TCAPLUS_CONTAINER_PUBLIC_IP参数,同时必须指定TCAPLUS_CONTAINER_DEPLOY_MODE参数值为WSL,否则在容器外将无法访问容器内的Tcaplus服务。

#TCAPLUS_CONTAINER_PUBLIC_IP是指定proxy的ip, 获取方式:进CentOS7 distro环境,用ifconfig 获取eth0的ip,
docker run -itd --privileged  -e TCAPLUS_CONTAINER_PUBLIC_IP="192.168.53.2" -e TCAPLUS_CONTAINER_OMS_PASSWORD='***' -e TCAPLUS_CONTAINER_DEPLOY_MODE="WSL" -p 8080:80 -p 13755-13765:13755-13765 -p 9999:9999 --shm-size=3G --name test tcaplusdb-local:3.60.1

上述容器创建命令还将容器内的端口暴露到宿主机:

  • 80: Web 运维平台的端口,暴露为 8080,可直接在浏览器通过 localhost:8080 访问
  • 13755-13765: tcaplusdb proxy 的端口
  • 9999: tcaplusdb 目录服务地址端口,是业务连接时所用的端口

查看创建的容器:

[root@ballenwen-PC4 e]# docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED         STATUS        PORTS                                                        NAMES
4a6ce2b1811c   tcaplusdb-local:3.60.1   "sh /data/tcaplus/tc…"   2 seconds ago   Up 1 second   0.0.0.0:13755-13765->13755-13765/tcp, 0.0.0.0:8080->80/tcp   test

容器创建后,进入容器,等 20-60s,tcaplus 进程会自动启动,可以通过执行:

tcaplus_docker 172.17.0.2 root> ps -ef | grep tcaplus
root         1     0  0 21:32 pts/0    00:00:00 sh /data/tcaplus/tcaplus_run.sh
root       883     1  0 21:32 ?        00:00:00 /data/tcaplus/tsf4g_release/apps/tconnd/bin/tconnd --id=1.1.3 --use-bus --bus-key=1688 --conf-file=../cfg/tconnd/tconnd.xml --tlogconf=../cfg/tconnd/tconnd_log.xml --daemon start
root       899     1  0 21:32 ?        00:00:00 /data/tcaplus/tsf4g_release/apps/tcenterd/bin/tcenterd --id=1.1.1 --use-bus --bus-key=1688 --tlogconf=../cfg/tcenterd/tcenterd_log.xml --conf-file=../cfg/tcenterd/tcenterd.xml -D start
root       923     1  2 21:32 ?        00:00:01 /data/tcaplus/tsf4g_release/apps/tcm/bin/tcmcenter --id=1.1.2 --use-bus --timer=10 --bus-key=1688 --bus-beat-gap=60 --conf-file=../cfg/tcm/tcmcenter.xml --tlogconf=../cfg/tcm/tcmcenter_log.xml --conf-format=3 -D start
root       940     1  3 21:32 ?        00:00:02 /data/tcaplus/tsf4g_release/apps/tagent/bin/tagent --id=1.2.1 --tlogconf=../cfg/tagent/tagent_log.xml --conf-file=../cfg/tagent/tagent.xml -D start
root       962     1  0 21:32 pts/0    00:00:00 /data/tcaplus/tcaplus_service/bin/tbusd --epoll-wait=1 --use-tsm --idle-sleep=1 --conf-file=../cfg/tbusd/tbusd.xml --tlogconf=../cfg/tbusd/tbusd_log.xml --no-bus --daemon --id=0.0.0.1 --business-id=0 -D start
root      1320  1318  0 21:32 ?        00:00:00 /opt/lampp/bin/rotatelogs /data/tcaplus/oms/tcapoms/www/log/error/error_log_%Y%m%d 86400 480
root      1324  1318  0 21:32 ?        00:00:00 /opt/lampp/bin/rotatelogs /data/tcaplus/oms/tcapoms/www/log/accesslogs/access_log_%Y%m%d 86400
tcaplus   1712  1318  0 21:32 ?        00:00:00 /opt/lampp/bin/httpd -k start -E /opt/lampp/logs/error_log -DSSL -DPHP
tcaplus   1713  1318  0 21:32 ?        00:00:00 /opt/lampp/bin/httpd -k start -E /opt/lampp/logs/error_log -DSSL -DPHP
tcaplus   1714  1318  0 21:32 ?        00:00:00 /opt/lampp/bin/httpd -k start -E /opt/lampp/logs/error_log -DSSL -DPHP
tcaplus   1715  1318  0 21:32 ?        00:00:00 /opt/lampp/bin/httpd -k start -E /opt/lampp/logs/error_log -DSSL -DPHP
tcaplus   1716  1318  0 21:32 ?        00:00:00 /opt/lampp/bin/httpd -k start -E /opt/lampp/logs/error_log -DSSL -DPHP
tcaplus   1717  1318  0 21:32 ?        00:00:00 /opt/lampp/bin/httpd -k start -E /opt/lampp/logs/error_log -DSSL -DPHP
tcaplus   1718  1318  0 21:32 ?        00:00:00 /opt/lampp/bin/httpd -k start -E /opt/lampp/logs/error_log -DSSL -DPHP
tcaplus   1719  1318  0 21:32 ?        00:00:00 /opt/lampp/bin/httpd -k start -E /opt/lampp/logs/error_log -DSSL -DPHP
tcaplus   1720  1318  0 21:32 ?        00:00:00 /opt/lampp/bin/httpd -k start -E /opt/lampp/logs/error_log -DSSL -DPHP
root      1895     1  5 21:32 ?        00:00:02 /data/tcaplus/tcaplus_service/bin/1_2_1_1/swiftd --use-tsm --idle-sleep=1 --conf-file=../../cfg/access_1_2_1_1/swift_tcaproxy.xml --conf-format=3 --tlogconf=../../cfg/access_1_2_1_1/tcaproxy_log.xml -D --id=1.2.1.1 --bus-key=2088 --business-id=0 -D start
root      1898     1  4 21:32 ?        00:00:02 /data/tcaplus/tcaplus_service/bin/1_3_1_1/swiftd --use-tsm --idle-sleep=1 --conf-file=../../cfg/access_1_3_1_1/swift_tcaproxy.xml --conf-format=3 --tlogconf=../../cfg/access_1_3_1_1/tcaproxy_log.xml -D --id=1.3.1.1 --bus-key=2088 --business-id=0 -D start
root      1914     1 31 21:32 ?        00:00:16 /data/tcaplus/tcaplus_service/bin/1_1_2_1/tcapsvr --use-tsm --idle-sleep=1 --nthread=8 --bus-check-gap=0 --threadChannelSize=20480000 --conf-file=../../cfg/storage_1_1_2_1/tcapsvr.xml --conf-format=3 --tlogconf=../../cfg/storage_1_1_2_1/tcapsvr_log.xml --daemon --id=1.1.2.1 --bus-key=2088 --business-id=0 -D start
root      1931     1 30 21:32 ?        00:00:15 /data/tcaplus/tcaplus_service/bin/1_1_2_2/tcapsvr --use-tsm --idle-sleep=1 --nthread=8 --bus-check-gap=0 --threadChannelSize=20480000 --conf-file=../../cfg/storage_1_1_2_2/tcapsvr.xml --conf-format=3 --tlogconf=../../cfg/storage_1_1_2_2/tcapsvr_log.xml --daemon --id=1.1.2.2 --bus-key=2088 --business-id=0 -D start
root      1938     1  4 21:32 ?        00:00:02 /data/tcaplus/tcaplus_service/bin/1_3_8_1/swiftd --use-tsm --idle-sleep=1 --conf-file=../../cfg/tcaprestproxy_1_3_8_1/swift_tcaprestproxy.xml --conf-format=3 --tlogconf=../../cfg/tcaprestproxy_1_3_8_1/tcaprestproxy_log.xml -D --id=1.3.8.1 --business-id=0 -D start
root      1944     1  4 21:32 ?        00:00:02 /data/tcaplus/tcaplus_service/bin/tcapdir/swiftd --use-tsm --idle-sleep=1 --conf-file=../../cfg/tcapdir/tcapdir_swift.xml --tlogconf=../../cfg/tcapdir/tcapdir_log.xml -D --id=1.0.4.1 --business-id=0 -D start
root      2000     1 29 21:32 ?        00:00:14 /data/tcaplus/tcaplus_service/bin/1_2_5_1/tcapdb --use-tsm --idle-sleep=1 --nthread=8 --threadChannelSize=10000000 --timer=3000 --conf-file=../../cfg/tcapdb_1_2_5_1/tcapdb_cfg.xml --conf-format=3 --tlogconf=../../cfg/tcapdb_1_2_5_1/tcapdb_log.xml -D --id=1.2.5.1 --bus-key=2088 --business-id=0 -D start
root      2253  2140  0 21:33 pts/1    00:00:00 grep tcaplus

容器如果创建失败,几个原因检测下:

  • 机器资源检查: 磁盘可用在 50G 以上,可用内存:4-6G
  • 系统参数检查: C:\Users\\.wslconfig 是否创建
  • 查看容器创建日志: docker logs

6.2.8. 停止Local版容器

如果容器使用完毕,需要暂时关闭,释放资源,可以执行下面的命令关闭。

sudo docker container stop --time=120 容器名

注意,由于TcaplusDB进程退出需要一定时间,如果强制关闭,会导致数据引擎文件损坏,进而影响容器的再次启动。这里需要指定显示指定关闭超时时间为120秒,防止TcaplusDB进程还没正常关闭退出,就被Docker强制杀死的情况(Docker默认关闭超时时间10秒,时间到了之后,容器如果还未关闭退出,就会被强制关闭)。

7. 版本测试

版本部署完成后,可通过SDK,OMS等方式连接TcaplusDB,进行数据读写或者集群管理。

TcaplusDB Local版默认创建了测试业务,游戏区和表,可登录Tcaplus OMS查看相关信息。

7.1. 通过OMS运维连接

此部分请参考:使用TcaplusDB OMS控制台

OMS的登录地址为http://<host>:<port>。基中host为TCAPLUS_CONTAINER_PUBLIC_IP(如果有指定)或者母机的IP。port为容器的80端口映射到母机的端口号。

登录OMS的默认用户名为tcaplus,密码为启动容器的时候指定的TCAPLUS_CONTAINER_OMS_PASSWORD参数值。

7.2. 通过SDK方式连接

此部分请参考: TcaplusDB TDR表 C++ SDK使用说明

8. 常见问题

8.1. 容器启动日志报:Failed to write channels, for shmctl

问题原因

容器的共享内存设置过小,部分Docker版本默认的容器共享内存大小为32M,而TcaplusDB容器要求的最小值是2G。

解决方案

  1. 使用3.53.1最新版本的镜像,或者更高版本的镜像;

  2. 启动容器时通过--shm-size=2G显示指定容器的共享内存大小。

8.2. 在Debian系统中启动容器启动失败,容器Exit Code = 139

问题原因

当前遇到的退出码为139的场景,绝大部分为母机vsyscall设置的问题

解决方案

  1. Debian设置vsyscall的方法参考http://helpcenter.onlyoffice.com/installation/mail-enabling-vsyscall.aspx;

  2. Windows WSL2设置vsyscall的方法参考https://zhuanlan.zhihu.com/p/256317180

8.3. 容器内的SSH, PWD等命令和服务不可用,导致TcaplusDB部分功能不可用

问题原因

当前这种情况大部分原因是因为母机开启了SELinux强制安全策略,导致容器内SSH,PWD等命令或者服务不可用。直接影响 是TcaplusDB的部分依赖这些命令和服务的功能不可用,如清表等。

解决方案

关闭母机的SELinux强制安全策略。

  1. 临时关闭。

    setenforce 0
    
  2. 永久关闭。编辑/etc/selinux/config文件,设置SELINUX=Disabled,重启机器。

8.4. 母机网段与Docker容器网段冲突,导致Client连不上服务

问题原因

在一些环境下,可能存在母机网段与容器默认网段冲突的情况,Docker容器通常默认为容器网段为192.168或者172.17,当母机正好也处在这些网段时,TcaplusDB会将从母机发出的请求当作是内网请求,给Client返容器内IP作为服务IP,而在某些环境下(如WSL),母机不能直接访问容器内IP,直接表现为服务状态正常,但客户端无法连接服务端。

解决方案

创建一个与母机网段不同的Docker网络,如母机的网段为172.17,则可创建一个192.168网段的Docker网络,并在创建容器时,指定使用该网络。Docker网络的创建方法如下。

执行下面的命令创建Docker网络。

sudo docker network create --driver=bridge --subnet=192.168.10.0/24 subnet_192_168_10
  • 192.168.10.0/24为Docker网络网段及掩码定义。

  • subnet_192_168_10为Docker网络名,创建容器命令中--network后面带的就是这个网络名。

8.5. WSL环境部署时,子系统重启后,外部无法访问重启之前创建的容器

问题原因

WSL子系统重启后,系统分配子系统的IP会发生变化,但之前启动的容器配置的都是原子系统IP作为容器的Public IP,因此外部无法财通过原子系统IP继续访问容器。

解决方案

使用Tcaplus Docker工具的修改容器Public IP的功能,将容器的Public IP更新为新的子系统IP,详细操作步骤如下:

  • 下载Tcaplus Docker工具脚本。

    wget https://tcaplus-tools-1301716906.cos.ap-guangzhou.myqcloud.com/tcaplus_tools.sh
    
  • 修改容器Public IP

    sh tcaplus_tools.sh change_container_public_ip <容器名> <新IP>
    

8.6. OMS上加表后,但是没有执行,一直等待队列执行中

解决方案

  1. 查看没有挂起、执行中的事务,如有需要其他事务执行完毕或结束。

  2. tcapcenter已经启动超过3分钟,tcapcenter启动3分钟后开始执行事务。

  3. 如排除1和2,可以先进到容器内重启一下tcaplus center进程,重启方法:

    1. 进到tcaplus docker容器内:docker exec -it 容器名 /bin/bash

    2. 切换到tcaplus用户: su - tcaplus

    3. 切换到/data/tcaplus/tcaplus_service/bin/目录:cd /data/tcaplus/tcaplus_service/bin/

    4. 启动tcm console:./start_tcmconsole.sh

    5. 在tcm console执行重启命令:restart 1.0.9.1

8.7. 容器启动报错:docker: Error response from daemon: --storage-opt is supported only for overlay over xfs with 'pquota' mount option

问题原因

当前磁盘的挂载方式不支持指定使用多少磁盘

解决方案

将启动命令中此参数去掉,该参数不是必填参数 --storage-opt size=50G

8.8. BIOS 问题

问题描述:

Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS

问题解决: 允许 Hyper-v, 并用 bcdedit 设置虚拟特性自动注册,重设下 BIOS 配置

dism.exe  /online /enable-feature /featurename:Microsoft-Hyper-V  /all /norestart

bcdedit /set hypervisorlaunchtype auto

8.9. 容器创建失败问题

问题描述: 容器创建后自动退出,查看资料是发现 WSL2 对于 Centos6.x 的镜像支持需要额外配置参数。 问题解决:

#在用户目录下创建一个文件
c:\users\<username>\.wslconfig

#在文件中填充以下内容
[wsl2]
kernelCommandLine = vsyscall=emulate

8.10. 子系统重启后,外部无法访问重启之前创建的容器

使用Tcaplus Docker工具的修改容器Public IP的功能,将容器的Public IP更新为新的子系统IP,详细操作步骤如下:

下载Tcaplus Docker工具脚本。

wget https://tcaplus-tools-1301716906.cos.ap-guangzhou.myqcloud.com/tcaplus_tools.sh

修改容器Public IP。

sh tcaplus_tools.sh change_container_public_ip <容器名> <新IP>

9. 使用限制

可以创建分布式索引,不能创建集群。

10. 附录

10.1. 安装Docker

Docker 安装一般通过系统命令来安装,如 yum、apt-get 等,以 CentOS7举例,安装方式如下:

# CentOS 7环境,CVM实例
yum install -y docker

# Debian 8.2环境
apt-get update
apt-get install -y docker-ce containerd.io

# CentOS 8环境,CVM实例,用dnf来安装
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
dnf repolist -v
dnf list docker-ce --showduplicates | sort -r
dnf install docker-ce --nobest

注意:在安装Docker过程中,注意镜像源的配置,可参考网上相关文档资料,配置成国内镜像源。

安装完Docker之后,可以用docker命令检查是否安装成功。

安装成功,则执行如下命令启动 docker 服务。

# 启动Docker服务
sudo service docker start

10.2. 关闭SELinux

查看SELinux状态。

getenforce

临时关闭。

setenforce 0

永久关闭。编辑/etc/selinux/config文件,设置SELINUX=Disabled,重启机器。

10.3. 设置vsyscall(Windows + WSL2)

在Windows 10 操作系统的系统盘- 用户 - <用户名>目录下,修改.wslconfig文件(如C:\Users\test\.wslconfig),若没有这个文件,则需要先创建。

在其中修改/添加如下内容:

[wsl2]
kernelCommandLine = vsyscall=emulate

10.4. 设置vsyscall(Debian)

参见说明

10.5. 容器内监听的端口及说明

端口 组件 说明
21 SFTP FTP服务端口。 新搭建一个FTP,是为了解决tcm自带的传包功能速度慢的问题
80 TcapOMS TcaplusDB OMS HTTP服务端口
443 TcapOMS TcaplusDB OMS HTTPS服务端口
3306 MySQL MySQL数据库服务端口
4500 Tcapdb TcaplusDB Tcapdb服务端口
6000 Tcapcenter TcaplusDB Center服务端口
8899 Tcenterd Tcenterd服务端口
9010 Tconnd Tconnd服务端口
9017 Tbuspp Tbuspp服务端口
9020 Tbuspp Tbuspp服务端口
9200 Elasticsearch Elasticsearch服务端口
9300 Elasticsearch Elasticsearch服务端口
9898 Tcapdir TcaplusDB Dir服务端口
9999 Tcapdir TcaplusDB Dir服务端口
13755 Tcaproxy TcaplusDB Proxy服务端口
13756 Tcaproxy TcaplusDB Proxy服务端口
31001 Tcaprestproxy TcaplusDB REST Proxy服务端口
36000 SSH SSH服务端口
45755 Tcapsvr TcaplusDB Server服务端口
45760 Tcapsvr TcaplusDB Server服务端口
46755 Tcapsvr TcaplusDB Server服务端口
46760 Tcapsvr TcaplusDB Server服务端口

10.6. 创建Docker网络

执行下面的命令创建Docker网络。

sudo docker network create --driver=bridge --subnet=192.168.10.0/24 subnet_192_168_10
  • 192.168.10.0/24为Docker网络网段及掩码定义。

  • subnet_192_168_10为Docker网络名,创建容器命令中--network后面带的就是这个网络名。

results matching ""

    No results matching ""