-
Notifications
You must be signed in to change notification settings - Fork 4
OB编译部署过程及遇到的问题
- 创建容器
docker run -itd --name basic -d centos:7 --privileged=true
- 进入容器
docker exec -it base /bin/bash
- 安装常用工具 net-tools, vim, openssh-server, iproute, zip, unzip
- 安装编译工具 git wget rpm* cpio make glibc-devel glibc-headers binutils m4
- 下载gcc
yum install -y gcc gcc-c++ make automake
- 下载cmake
yum install cmake
- 下载OB 开发依赖
on centos 7
yum install git wget rpm* cpio make glibc-devel glibc-headers binutils m4 libaio-devel.x86_64
on ubuntu 20.04
sudo apt-get install git wget rpm rpm2cpio cpio make build-essential binutils m4 libtinfo5 libaio1
- 下载python3.11源码并传输到容器内
wget https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz
- 解压
tar -zxvf Python-3.11.4.tgz
- 切换目录
cd Python-3.11.4
- 配置编译选项
./configure --prefix=/usr/local/python311 --enable-shared --enable-optimizations
指定安装路径 --enable-shared 创建动态链接库(必须有)--enable-optimizations(可选,加速运行及构建速度)
不能使用 --with-openssl编译选项,会造成OB内存释放异常,因此安装外部库(numpy, sklearn等)需要手动下载.whl文件,再通过pip进行本地安装。
- 编译
make -j
- 安装
make install
- 创建软链接
ln -s /usr/local/python311/bin/python3 /usr/bin/python3
ln -s /usr/local/python311/bin/pip3 /usr/bin/pip3
- 更改动态链接库的搜索路径
vim /etc/ld.so.conf
,添加/usr/local/python311/lib
- 安装numpy库
python3 -m pip install numpy
参考文档:OceanBase官方文档
- 下载all-in-one安装包(出于兼容性,建议v4.1.0_CE_BP2版本),传输到容器中
- 解压并安装
tar -xzf oceanbase-all-in-one-*.tar.gz
cd oceanbase-all-in-one/bin/
./install.sh
source ~/.oceanbase-all-in-one/bin/env.sh
- 部署 oceanbase 数据库
obd cluster deploy obtest -c new.yaml
-c参数选择合适的配置文件(所有配置文件在~/.oceanbase-all-in-one/conf目录下) 这里创建了一个新的适合环境的配置文件 new.yaml - 启动 oceanbase 数据库
obd cluster start obtest
- 查看 OBD 管理的集群列表
obd cluster list
- 查看 obtest 集群状态
obd cluster display obtest
- 连接 oceanbase 数据库
obclient -h<IP> -P<PORT> -uroot@sys -p
(这条命令会在启动数据库后提供)
进入sql命令行,则连接成功 - 停止运行中的集群
obd cluster stop obtest
- 下载oceanbase4.1源代码并传输到容器中,解压(这里使用git clone时要添加 --recursive 参数,以便将所有依赖的submodule都拉下来)
- 编译
bash build.sh debug --init --make -j N
(注:-j N
中N为编译过程中启用的线程数,应cpu核数较多时应加以限制,否则可能因内存不足导致编译失败) - 进入生成的debug构建目录
cd build_debug
- 进行构建
make -j observer
- 查看构建产物
stat src/observer/observer
- 替换observer(替换前最好先备份原版的observer)
cp ${ob source dir}/build_debug/src/observer/observer /root/.obd/repository/oceanbase-ce/${version}/${sequence}/bin/observer
- 重新启动oceanbase数据库
obd cluster start obtest
- 连接数据库
obclient -h<IP> -P<PORT> -uroot@sys -p
- (注:可以将ob devtools目录下的开发工具加入环境变量中,可供centos7等低版本的linux系统使用,节省配置环境的时间)
export PATH=$PATH:/ob/oceanbase_PyUdf-OB4.1_PyUdf/deps/3rd/usr/local/oceanbase/devtools/bin
- (注:目前在OB目录下的replaceOb.sh脚本可以自动化运行第四步,命令为./replaceOb.sh {debug/release} 。替换observer的位置可以在脚本内进行修改。)
- (注:在首次部署并替换OceanBase后,推理查询所需系统表_all_python_udf尚不存在,因此需要destroy并重新deploy原有cluster。)
参考文档:VScode远程连接docker容器
- 提交镜像
docker commit basic ob:basic_v0.1
- 保存镜像
docker save ob:basic_v0.1 -o basic_v0.1.tar.gz
- 导入镜像
docker load -i basic_v0.1.tar.gz
- 启动进行端口映射的容器
docker run -d -p 3022:22 --name ob4.1 -m 64G --privileged=true ob:basic_v0.1 /sbin/init "while true;do echo hello world;sleep 10;done"
对外暴露的端口为3022 - 进入容器
docker exec -it ob4.1 /bin/bash
- 修改配置文件
vim /etc/ssh/sshd_config
添加一行PermitRootLogin yes
- 设置root密码
passwd
- 重启ssh服务
service sshd restart
/systemctl restart sshd
- 查看ssh服务状态
service sshd status
- 在VScode中安装拓展程序Remote-SSH,修改config文件,连接docker
- python编译时openssl模块失败->numpy库下载失败 (暂时不可用,需要手动下载numpy包)
解决方案:可能需要手动下载并编译更新版本的openssl,可参考 https://www.cnblogs.com/lemon-le/p/13419429.html
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz --no-check-certificate
tar -zxvf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g/
./config --prefix=/usr/local/openssl
make
make install
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig
注:目前版本不能使用 --with-openssl编译选项,会造成OB内存释放异常,因此安装外部库(numpy, sklearn等)需要手动下载.whl文件,再通过pip进行本地安装。
-
更换observer后启动obtest实例失败&python3 pip install numpy失败
参考文档:error while loading shared libraries: libpython3.7m.so.1.0: cannot open shared object file原因:编译安装完成后,没有将python311/lib下的文件放入默认库/usr/lib或/lib中,导致初始化时无法加载库文件。
解决方案:
添加库的配置信息,将python/lib的绝对路径(/usr/local/python311/lib),添加至conf文件中。
切换至/etc/ld.so.conf.d目录下,打开python3.conf文件:
cd /etc/ld.so.conf.d
vim python3.conf
进入vim,将/usr/local/python311/lib作为一行插入,保存退出。
运行ldconfig命令:ldconfig
-
编译python源码时导入site module失败
参考文档:https://github.com/python/cpython/issues/94825原因:gcc version过低(4.8.5)
解决方案:升级gcc到8+
yum install centos-release-scl -y
yum install devtoolset-9-gcc* -y
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >> ~/.bash_profile
source /opt/rh/devtoolset-9/enable
- 编译python源码时显示zlib ffi.h不可用
解决方案:安装libffi-devel zlib-devel
yum install -y libffi-devel zlib-devel
- 在debian/ubuntu环境下编译部署OceanBase后,使用obclient键入命令时backspace异常问题
closed issue: https://github.com/oceanbase/oceanbase/issues/1787
解决方案:参考 https://zhuanlan.zhihu.com/p/678874871 ,重新编译并替换原有obclient