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\
[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。
解决方案:
使用3.53.1最新版本的镜像,或者更高版本的镜像;
启动容器时通过--shm-size=2G显示指定容器的共享内存大小。
8.2. 在Debian系统中启动容器启动失败,容器Exit Code = 139
问题原因:
当前遇到的退出码为139的场景,绝大部分为母机vsyscall设置的问题
解决方案:
Debian设置vsyscall的方法参考http://helpcenter.onlyoffice.com/installation/mail-enabling-vsyscall.aspx;
Windows WSL2设置vsyscall的方法参考https://zhuanlan.zhihu.com/p/256317180
8.3. 容器内的SSH, PWD等命令和服务不可用,导致TcaplusDB部分功能不可用
问题原因:
当前这种情况大部分原因是因为母机开启了SELinux强制安全策略,导致容器内SSH,PWD等命令或者服务不可用。直接影响 是TcaplusDB的部分依赖这些命令和服务的功能不可用,如清表等。
解决方案:
关闭母机的SELinux强制安全策略。
临时关闭。
setenforce 0
永久关闭。编辑/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上加表后,但是没有执行,一直等待队列执行中
解决方案:
查看没有挂起、执行中的事务,如有需要其他事务执行完毕或结束。
tcapcenter已经启动超过3分钟,tcapcenter启动3分钟后开始执行事务。
如排除1和2,可以先进到容器内重启一下tcaplus center进程,重启方法:
进到tcaplus docker容器内:docker exec -it 容器名 /bin/bash
切换到tcaplus用户: su - tcaplus
切换到/data/tcaplus/tcaplus_service/bin/目录:cd /data/tcaplus/tcaplus_service/bin/
启动tcm console:./start_tcmconsole.sh
在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后面带的就是这个网络名。