[CP] support ob rpm platform standalone systemd service
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@ -289,6 +289,10 @@ tools/deploy/single-with-proxy.yaml
|
|||||||
tools/deploy/single.yaml
|
tools/deploy/single.yaml
|
||||||
tools/docker/standalone/boot
|
tools/docker/standalone/boot
|
||||||
tools/docker/standalone/init_store_for_fast_start.py
|
tools/docker/standalone/init_store_for_fast_start.py
|
||||||
|
tools/rpm/systemd/profile/oceanbase-service.sh
|
||||||
|
tools/rpm/systemd/profile/post_install.sh
|
||||||
|
tools/rpm/systemd/profile/pre_uninstall.sh
|
||||||
|
tools/rpm/systemd/profile/post_uninstall.sh
|
||||||
|
|
||||||
############# unittest #############
|
############# unittest #############
|
||||||
unittest/**/test_*
|
unittest/**/test_*
|
||||||
|
|||||||
@ -44,18 +44,46 @@ set(CPACK_RPM_PACKAGE_DESCRIPTION "OceanBase is a distributed relational databas
|
|||||||
set(CPACK_RPM_PACKAGE_LICENSE "Mulan PubL v2.")
|
set(CPACK_RPM_PACKAGE_LICENSE "Mulan PubL v2.")
|
||||||
set(CPACK_RPM_DEFAULT_USER "admin")
|
set(CPACK_RPM_DEFAULT_USER "admin")
|
||||||
set(CPACK_RPM_DEFAULT_GROUP "admin")
|
set(CPACK_RPM_DEFAULT_GROUP "admin")
|
||||||
|
if (OB_BUILD_OPENSOURCE)
|
||||||
|
set(DEBUG_INSTALL_POST "mv $RPM_BUILD_ROOT/../server/home/admin/oceanbase/bin/obshell %{_builddir}/obshell; %{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} %{_builddir}/%{?buildsubdir}; mv %{_builddir}/obshell $RPM_BUILD_ROOT/../server/home/admin/oceanbase/bin/obshell; %{nil}")
|
||||||
|
else()
|
||||||
|
set(DEBUG_INSTALL_POST "%{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} %{_builddir}/%{?buildsubdir};%{nil}")
|
||||||
|
endif()
|
||||||
set(CPACK_RPM_SPEC_MORE_DEFINE
|
set(CPACK_RPM_SPEC_MORE_DEFINE
|
||||||
"%global _missing_build_ids_terminate_build 0
|
"%global _missing_build_ids_terminate_build 0
|
||||||
%global _find_debuginfo_opts -g
|
%global _find_debuginfo_opts -g
|
||||||
%define __strip ${CMAKE_SOURCE_DIR}/deps/3rd/usr/local/oceanbase/devtools/bin/llvm-strip
|
%define __strip ${CMAKE_SOURCE_DIR}/deps/3rd/usr/local/oceanbase/devtools/bin/llvm-strip
|
||||||
%undefine __brp_mangle_shebangs
|
%undefine __brp_mangle_shebangs
|
||||||
%global __requires_exclude ^\(/bin/bash\|/usr/bin/\.*\)$
|
%global __requires_exclude ^\(/bin/bash\|/usr/bin/\.*\)$
|
||||||
%define __debug_install_post %{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} %{_builddir}/%{?buildsubdir};%{nil}
|
%define __debug_install_post ${DEBUG_INSTALL_POST}
|
||||||
%if \\\"%name\\\" != \\\"oceanbase-ce-sql-parser\\\" && \\\"%name\\\" != \\\"oceanbase-sql-parser\\\"
|
%if \\\"%name\\\" != \\\"oceanbase-ce-sql-parser\\\" && \\\"%name\\\" != \\\"oceanbase-sql-parser\\\"
|
||||||
%debug_package
|
%debug_package
|
||||||
%endif
|
%endif
|
||||||
")
|
")
|
||||||
|
|
||||||
|
if (OB_BUILD_OPENSOURCE)
|
||||||
|
set(CPACK_RPM_PACKAGE_REQUIRES "jq, systemd")
|
||||||
|
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/oceanbase-service.sh.template
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/oceanbase-service.sh
|
||||||
|
@ONLY)
|
||||||
|
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/post_install.sh.template
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/post_install.sh
|
||||||
|
@ONLY)
|
||||||
|
set(CPACK_RPM_SERVER_POST_INSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/post_install.sh)
|
||||||
|
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/pre_uninstall.sh.template
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/pre_uninstall.sh
|
||||||
|
@ONLY)
|
||||||
|
set(CPACK_RPM_SERVER_PRE_UNINSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/pre_uninstall.sh)
|
||||||
|
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/post_uninstall.sh.template
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/post_uninstall.sh
|
||||||
|
@ONLY)
|
||||||
|
set(CPACK_RPM_SERVER_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/tools/rpm/systemd/profile/post_uninstall.sh)
|
||||||
|
endif()
|
||||||
|
|
||||||
## TIPS
|
## TIPS
|
||||||
#
|
#
|
||||||
# - PATH is relative to the **ROOT directory** of project other than the cmake directory.
|
# - PATH is relative to the **ROOT directory** of project other than the cmake directory.
|
||||||
@ -68,6 +96,7 @@ install(PROGRAMS
|
|||||||
tools/import_time_zone_info.py
|
tools/import_time_zone_info.py
|
||||||
tools/import_srs_data.py
|
tools/import_srs_data.py
|
||||||
${CMAKE_BINARY_DIR}/src/observer/observer
|
${CMAKE_BINARY_DIR}/src/observer/observer
|
||||||
|
deps/3rd/home/admin/oceanbase/bin/obshell
|
||||||
DESTINATION bin
|
DESTINATION bin
|
||||||
COMPONENT server)
|
COMPONENT server)
|
||||||
else()
|
else()
|
||||||
@ -100,6 +129,17 @@ install(
|
|||||||
DESTINATION admin
|
DESTINATION admin
|
||||||
COMPONENT server)
|
COMPONENT server)
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
tools/rpm/systemd/profile/oceanbase.cnf
|
||||||
|
tools/rpm/systemd/profile/oceanbase-pre.json
|
||||||
|
tools/rpm/systemd/profile/oceanbase.service
|
||||||
|
tools/rpm/systemd/profile/oceanbase-service.sh
|
||||||
|
tools/rpm/systemd/profile/post_install.sh
|
||||||
|
tools/rpm/systemd/profile/post_uninstall.sh
|
||||||
|
tools/rpm/systemd/profile/pre_uninstall.sh
|
||||||
|
DESTINATION profile
|
||||||
|
COMPONENT server)
|
||||||
|
|
||||||
## oceanbase-cdc
|
## oceanbase-cdc
|
||||||
if (NOT OB_SO_CACHE AND OB_BUILD_CDC)
|
if (NOT OB_SO_CACHE AND OB_BUILD_CDC)
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
|
|||||||
2
deps/init/oceanbase.el7.aarch64.deps
vendored
2
deps/init/oceanbase.el7.aarch64.deps
vendored
@ -8,6 +8,7 @@ os=7
|
|||||||
arch=aarch64
|
arch=aarch64
|
||||||
repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/7/aarch64/
|
repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/7/aarch64/
|
||||||
|
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
devdeps-gtest-1.8.0-132022101316.el7.aarch64.rpm
|
devdeps-gtest-1.8.0-132022101316.el7.aarch64.rpm
|
||||||
devdeps-isa-l-static-2.22.0-22022092915.el7.aarch64.rpm
|
devdeps-isa-l-static-2.22.0-22022092915.el7.aarch64.rpm
|
||||||
@ -42,6 +43,7 @@ obdevtools-llvm-11.0.1-312022092921.el7.aarch64.rpm
|
|||||||
[tools-deps]
|
[tools-deps]
|
||||||
devdeps-oblogmsg-1.0-52022113019.el7.aarch64.rpm
|
devdeps-oblogmsg-1.0-52022113019.el7.aarch64.rpm
|
||||||
devdeps-rocksdb-6.22.1.1-52022100420.el7.aarch64.rpm
|
devdeps-rocksdb-6.22.1.1-52022100420.el7.aarch64.rpm
|
||||||
|
obshell-4.2.2.0-82024011102.el7.aarch64.rpm target=community
|
||||||
|
|
||||||
[test-utils]
|
[test-utils]
|
||||||
ob-deploy-2.3.0-4.el7.aarch64.rpm target=community
|
ob-deploy-2.3.0-4.el7.aarch64.rpm target=community
|
||||||
|
|||||||
3
deps/init/oceanbase.el7.x86_64.deps
vendored
3
deps/init/oceanbase.el7.x86_64.deps
vendored
@ -9,6 +9,7 @@ os=7
|
|||||||
arch=x86_64
|
arch=x86_64
|
||||||
repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/
|
repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/
|
||||||
|
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
devdeps-gtest-1.8.0-132022101316.el7.x86_64.rpm
|
devdeps-gtest-1.8.0-132022101316.el7.x86_64.rpm
|
||||||
devdeps-isa-l-static-2.22.0-22022092915.el7.x86_64.rpm
|
devdeps-isa-l-static-2.22.0-22022092915.el7.x86_64.rpm
|
||||||
@ -45,8 +46,10 @@ obdevtools-llvm-11.0.1-312022092921.el7.x86_64.rpm
|
|||||||
[tools-deps]
|
[tools-deps]
|
||||||
devdeps-oblogmsg-1.0-52022113019.el7.x86_64.rpm
|
devdeps-oblogmsg-1.0-52022113019.el7.x86_64.rpm
|
||||||
devdeps-rocksdb-6.22.1.1-52022100420.el7.x86_64.rpm
|
devdeps-rocksdb-6.22.1.1-52022100420.el7.x86_64.rpm
|
||||||
|
obshell-4.2.2.0-82024011102.el7.x86_64.rpm target=community
|
||||||
|
|
||||||
[test-utils]
|
[test-utils]
|
||||||
ob-deploy-2.3.0-4.el7.x86_64.rpm target=community
|
ob-deploy-2.3.0-4.el7.x86_64.rpm target=community
|
||||||
obclient-2.2.2-1.el7.x86_64.rpm target=community
|
obclient-2.2.2-1.el7.x86_64.rpm target=community
|
||||||
libobclient-2.2.2-3.el7.x86_64.rpm target=community
|
libobclient-2.2.2-3.el7.x86_64.rpm target=community
|
||||||
|
obshell-4.2.2.0-32024010810.el7.x86_64.rpm target=community
|
||||||
|
|||||||
2
deps/init/oceanbase.el8.aarch64.deps
vendored
2
deps/init/oceanbase.el8.aarch64.deps
vendored
@ -8,6 +8,7 @@ os=8
|
|||||||
arch=aarch64
|
arch=aarch64
|
||||||
repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/8/aarch64/
|
repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/8/aarch64/
|
||||||
|
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
devdeps-gtest-1.8.0-132022101316.el8.aarch64.rpm
|
devdeps-gtest-1.8.0-132022101316.el8.aarch64.rpm
|
||||||
devdeps-isa-l-static-2.22.0-22022092915.el8.aarch64.rpm
|
devdeps-isa-l-static-2.22.0-22022092915.el8.aarch64.rpm
|
||||||
@ -42,6 +43,7 @@ obdevtools-llvm-11.0.1-312022092921.el8.aarch64.rpm
|
|||||||
[tools-deps]
|
[tools-deps]
|
||||||
devdeps-oblogmsg-1.0-52022113019.el8.aarch64.rpm
|
devdeps-oblogmsg-1.0-52022113019.el8.aarch64.rpm
|
||||||
devdeps-rocksdb-6.22.1.1-52022100420.el8.aarch64.rpm
|
devdeps-rocksdb-6.22.1.1-52022100420.el8.aarch64.rpm
|
||||||
|
obshell-4.2.2.0-82024011102.el8.aarch64.rpm target=community
|
||||||
|
|
||||||
[test-utils]
|
[test-utils]
|
||||||
ob-deploy-2.3.0-4.el8.aarch64.rpm target=community
|
ob-deploy-2.3.0-4.el8.aarch64.rpm target=community
|
||||||
|
|||||||
2
deps/init/oceanbase.el8.x86_64.deps
vendored
2
deps/init/oceanbase.el8.x86_64.deps
vendored
@ -8,6 +8,7 @@ os=8
|
|||||||
arch=x86_64
|
arch=x86_64
|
||||||
repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/8/x86_64/
|
repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/8/x86_64/
|
||||||
|
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
devdeps-gtest-1.8.0-132022101316.el8.x86_64.rpm
|
devdeps-gtest-1.8.0-132022101316.el8.x86_64.rpm
|
||||||
devdeps-isa-l-static-2.22.0-22022092915.el8.x86_64.rpm
|
devdeps-isa-l-static-2.22.0-22022092915.el8.x86_64.rpm
|
||||||
@ -44,6 +45,7 @@ obdevtools-llvm-11.0.1-312022092921.el8.x86_64.rpm
|
|||||||
[tools-deps]
|
[tools-deps]
|
||||||
devdeps-oblogmsg-1.0-52022113019.el8.x86_64.rpm
|
devdeps-oblogmsg-1.0-52022113019.el8.x86_64.rpm
|
||||||
devdeps-rocksdb-6.22.1.1-52022100420.el8.x86_64.rpm
|
devdeps-rocksdb-6.22.1.1-52022100420.el8.x86_64.rpm
|
||||||
|
obshell-4.2.2.0-82024011102.el8.x86_64.rpm target=community
|
||||||
|
|
||||||
[test-utils]
|
[test-utils]
|
||||||
ob-deploy-2.3.0-4.el8.x86_64.rpm target=community
|
ob-deploy-2.3.0-4.el8.x86_64.rpm target=community
|
||||||
|
|||||||
23
tools/rpm/systemd/README-CN.md
Normal file
23
tools/rpm/systemd/README-CN.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# 通过yum和systemd的方式安装OceanBase数据库
|
||||||
|
如果你想在linux rpm平台上部署oceanbase,可以使用yum进行单节点安装,并通过systemd进行简单管理
|
||||||
|
|
||||||
|
**注意**
|
||||||
|
|
||||||
|
- 该方法仅能用做学习研究或测试使用;
|
||||||
|
- 千万不要使用此方法用于带有重要数据的场景,比如生产环境。
|
||||||
|
|
||||||
|
## 安装方法
|
||||||
|
现在暂时只支持RPM平台系统,可以通过以下指令进行安装和启动:
|
||||||
|
```bash
|
||||||
|
yum install oceanbase-ce
|
||||||
|
systemctl start oceanbase
|
||||||
|
```
|
||||||
|
|
||||||
|
## systemd介绍
|
||||||
|
Systemd提供了自动化管理oceanbase的启动和停止,可以通过systemctl指令对oceanbase进行管理控制,例如:
|
||||||
|
```bash
|
||||||
|
systemctl {start|stop|restart|status} oceanbase
|
||||||
|
```
|
||||||
|
|
||||||
|
## 通过systemd配置oceanbase
|
||||||
|
systemd提供了配置文件`/etc/oceanbase.cnf`,可以在启动前修改配置进行带参启动
|
||||||
23
tools/rpm/systemd/README.md
Normal file
23
tools/rpm/systemd/README.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Installing OceanBase Database via yum and systemd
|
||||||
|
If you want to deploy OceanBase on a Linux RPM platform, you can use yum for single-node installation and simple management with systemd.
|
||||||
|
|
||||||
|
**WARNING**
|
||||||
|
|
||||||
|
- The installation method is just used for study or test;
|
||||||
|
- You should not deploy it with important data as it is not used in production environment.
|
||||||
|
|
||||||
|
## Installation Method
|
||||||
|
Now systemd only support RPM platform and you can install and run oceanbase service using the following command:
|
||||||
|
```bash
|
||||||
|
yum install oceanbase-ce
|
||||||
|
systemctl start oceanbase
|
||||||
|
```
|
||||||
|
|
||||||
|
## Overview of systemd
|
||||||
|
Systemd provides automatic oceanbase startup and shutdown. It also enables manual server management using the systemctl command. For example:
|
||||||
|
```bash
|
||||||
|
systemctl {start|stop|restart|status} oceanbase
|
||||||
|
```
|
||||||
|
|
||||||
|
## Oceanbase configuration by systemd
|
||||||
|
Systemd provide `/etc/oceanbase.cnf` to config oceanbase before startup.
|
||||||
25
tools/rpm/systemd/profile/oceanbase-pre.json
Normal file
25
tools/rpm/systemd/profile/oceanbase-pre.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"obshell": {
|
||||||
|
"agentInfo": {
|
||||||
|
"ip": "127.0.0.1",
|
||||||
|
"port": 2886
|
||||||
|
},
|
||||||
|
"zoneName": "zone1"
|
||||||
|
},
|
||||||
|
"oceanbase_ce": {
|
||||||
|
"cluster": {
|
||||||
|
"clusterId": 1,
|
||||||
|
"clusterName": "ob"
|
||||||
|
},
|
||||||
|
"server": {
|
||||||
|
"restart": true,
|
||||||
|
"scope": {
|
||||||
|
"type": "server",
|
||||||
|
"target": [
|
||||||
|
"127.0.0.1:2886"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"observerConfig": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
296
tools/rpm/systemd/profile/oceanbase-service.sh.template
Normal file
296
tools/rpm/systemd/profile/oceanbase-service.sh.template
Normal file
@ -0,0 +1,296 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
DATE=`date '+%Y-%m-%d %H:%M:%S'`
|
||||||
|
ip='127.0.0.1'
|
||||||
|
port=2886
|
||||||
|
url="http://$ip:$port"
|
||||||
|
unix_socket="/tmp/obshell/$port.sock"
|
||||||
|
prefix=@CPACK_PACKAGING_INSTALL_PREFIX@
|
||||||
|
obshell="$prefix/bin/obshell"
|
||||||
|
|
||||||
|
function prepare_config_json {
|
||||||
|
cnf_file='/etc/oceanbase.cnf'
|
||||||
|
json_pre_file="$prefix/profile/oceanbase-pre.json"
|
||||||
|
json_file="$prefix/profile/oceanbase.json"
|
||||||
|
rm -rf $json_file
|
||||||
|
cp $json_pre_file $json_file
|
||||||
|
local temp_file=$(mktemp)
|
||||||
|
|
||||||
|
while IFS='=' read -r key value; do
|
||||||
|
key=$(echo "$key" | awk '{$1=$1};1')
|
||||||
|
value=$(echo "$value" | awk '{$1=$1};1')
|
||||||
|
value=$(echo "$value" | sed 's/^"//' | sed 's/"$//')
|
||||||
|
if [[ -n "$key" && ! "$key" =~ ^\; ]]; then
|
||||||
|
if [[ $key == *"rootPwd"* ]]; then
|
||||||
|
jq --arg parent "oceanbase_ce" --arg child "cluster" --arg key "$key" --arg value "$value" '.[$parent][$child][$key] = $value' "$json_file" > "$temp_file"
|
||||||
|
mv "$temp_file" "$json_file"
|
||||||
|
else
|
||||||
|
jq --arg parent "oceanbase_ce" --arg child "server" --arg grandchild "observerConfig" --arg key "$key" --arg value "$value" '.[$parent][$child][$grandchild][$key] = $value' "$json_file" > "$temp_file"
|
||||||
|
mv "$temp_file" "$json_file"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done < "$cnf_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
function do_reload_observer {
|
||||||
|
echo "Not support reload now"
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_daemon_process {
|
||||||
|
if [ -f $prefix/run/daemon.pid ]; then
|
||||||
|
pid=$(cat $prefix/run/daemon.pid)
|
||||||
|
if kill -0 $pid >/dev/null 2>&1; then
|
||||||
|
echo "daemon process with PID $pid is running."
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "daemon process with PID $pid is not running."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "daemon PID file not found."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_obagent_process {
|
||||||
|
if [ -f $prefix/run/obshell.pid ]; then
|
||||||
|
pid=$(cat $prefix/run/obshell.pid)
|
||||||
|
if kill -0 $pid >/dev/null 2>&1; then
|
||||||
|
echo "obshell process with PID $pid is running."
|
||||||
|
else
|
||||||
|
echo "obshell process with PID $pid is not running."
|
||||||
|
$obshell admin start --ip $ip --port $port
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "start ob_agent failed"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "obshell PID file not found."
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_response {
|
||||||
|
local response=$1
|
||||||
|
successful=$(echo "$response" | jq -r '.successful')
|
||||||
|
if [ "x$successful" = "xfalse" ]; then
|
||||||
|
echo "send request failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_trace {
|
||||||
|
local dag_trace=$1
|
||||||
|
local content=$2
|
||||||
|
local max_retries=$3
|
||||||
|
local delay=$4
|
||||||
|
local count=0
|
||||||
|
echo "the $content trace id is $dag_trace"
|
||||||
|
while true; do
|
||||||
|
response=$(curl --silent -XGET $url/api/v1/task/dag/$dag_trace)
|
||||||
|
state=$(echo "$response" | jq -r '.data.state')
|
||||||
|
echo "the response state is $state"
|
||||||
|
if [ "x$state" = "xSUCCEED" ]; then
|
||||||
|
echo "request successfully"
|
||||||
|
break
|
||||||
|
elif [ "x$state" = "xFAILED" ]; then
|
||||||
|
echo "request failed"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
count=$((count + 1))
|
||||||
|
if [ $count -eq $max_retries ]; then
|
||||||
|
echo "maximum retries reached and then exit"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "wait ${delay}s and the retry"
|
||||||
|
sleep $delay
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function start_obshell {
|
||||||
|
$obshell admin start --ip $ip --port $port > /dev/null 2>&1
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "start ob_agent failed"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function do_config_observer {
|
||||||
|
# join agent
|
||||||
|
obagent_configuration=`jq '.obshell' $json_file`
|
||||||
|
obagent_cmd="curl --silent -H \"Content-Type: application/json\" -X POST -d '${obagent_configuration}' --unix-socket $unix_socket $url/api/v1/agent/join"
|
||||||
|
response=$(eval "$obagent_cmd")
|
||||||
|
echo $response
|
||||||
|
successful=$(echo "$response" | jq -r '.successful')
|
||||||
|
if [ "x$successful" = "xfalse" ]; then
|
||||||
|
echo "send request failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
trace=$(echo "$response" | jq -r '.data.id')
|
||||||
|
check_trace $trace "join agent" 3 3
|
||||||
|
|
||||||
|
# config cluster
|
||||||
|
cluster_configuration=`jq '.oceanbase_ce.cluster' $json_file`
|
||||||
|
cluster_cmd="curl --silent -H \"Content-Type: application/json\" -X PUT -d '${cluster_configuration}' --unix-socket $unix_socket $url/api/v1/obcluster/config"
|
||||||
|
response=$(eval "$cluster_cmd")
|
||||||
|
echo $response
|
||||||
|
successful=$(echo "$response" | jq -r '.successful')
|
||||||
|
if [ "x$successful" = "xfalse" ]; then
|
||||||
|
echo "send request failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
trace=$(echo "$response" | jq -r '.data.id')
|
||||||
|
check_trace $trace "config cluster" 3 3
|
||||||
|
|
||||||
|
# config observer
|
||||||
|
observer_configuration=`jq '.oceanbase_ce.server' $json_file`
|
||||||
|
observer_cmd="curl --silent -H \"Content-Type: application/json\" -X PUT -d '${observer_configuration}' --unix-socket $unix_socket $url/api/v1/observer/config"
|
||||||
|
response=$(eval "$observer_cmd")
|
||||||
|
echo $response
|
||||||
|
successful=$(echo "$response" | jq -r '.successful')
|
||||||
|
if [ "x$successful" = "xfalse" ]; then
|
||||||
|
echo "send request failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
trace=$(echo "$response" | jq -r '.data.id')
|
||||||
|
check_trace $trace "config observer" 3 3
|
||||||
|
}
|
||||||
|
|
||||||
|
function deploy_observer {
|
||||||
|
echo "oceanbase service deployed at ${DATE}"
|
||||||
|
prepare_config_json
|
||||||
|
start_obshell
|
||||||
|
do_config_observer
|
||||||
|
}
|
||||||
|
|
||||||
|
function start_observer {
|
||||||
|
prepare_config_json
|
||||||
|
systemd-notify --ready
|
||||||
|
# check observer status
|
||||||
|
response=$(curl --silent -H "Content-Type: application/json" -X GET --unix-socket $unix_socket $url/api/v1/status)
|
||||||
|
identity=$(echo "$response" | jq -r '.data.agent.identity')
|
||||||
|
echo $identity
|
||||||
|
systemd-notify "STATUS=Service is running"
|
||||||
|
if [ "x$identity" = "xCLUSTER AGENT" ]; then
|
||||||
|
echo "The observer is already bootstrap, please start it immediately"
|
||||||
|
response=$(curl --silent -H "Content-Type: application/json" -X POST -d '{
|
||||||
|
"scope":
|
||||||
|
{
|
||||||
|
"type":"global",
|
||||||
|
"target":[]
|
||||||
|
},
|
||||||
|
"force": true
|
||||||
|
}' --unix-socket $unix_socket $url/api/v1/ob/start)
|
||||||
|
successful=$(echo "$response" | jq -r '.successful')
|
||||||
|
if [ "x$successful" = "xfalse" ]; then
|
||||||
|
echo "send request failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
trace=$(echo "$response" | jq -r '.data.id')
|
||||||
|
check_trace $trace "start observer" 20 6
|
||||||
|
elif [ "x$identity" = "xSINGLE" ]; then
|
||||||
|
# do config observer first
|
||||||
|
do_config_observer
|
||||||
|
echo "The observer has not bootstrap, please init it firstly"
|
||||||
|
response=$(curl --silent -X POST --unix-socket $unix_socket $url/api/v1/ob/init)
|
||||||
|
successful=$(echo "$response" | jq -r '.successful')
|
||||||
|
if [ "x$successful" = "xfalse" ]; then
|
||||||
|
echo "send request failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
trace=$(echo "$response" | jq -r '.data.id')
|
||||||
|
check_trace $trace "start observer" 40 6
|
||||||
|
else
|
||||||
|
# status is UNIDENTIFIED
|
||||||
|
echo "The observer has been installed before"
|
||||||
|
fi
|
||||||
|
|
||||||
|
systemd-notify --status="Service is ready"
|
||||||
|
|
||||||
|
if [ -f $prefix/run/observer.pid ]; then
|
||||||
|
pid=$(cat $prefix/run/observer.pid)
|
||||||
|
while true; do
|
||||||
|
if [ ! -d "/proc/$pid" ]; then
|
||||||
|
echo "Observer process with PID $pid has exited."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Observer process with PID $pid is still running."
|
||||||
|
# check observer state
|
||||||
|
response=$(curl --silent -H "Content-Type: application/json" -X GET -d '{
|
||||||
|
"scope":
|
||||||
|
{
|
||||||
|
"type":"global",
|
||||||
|
"target":[]
|
||||||
|
},
|
||||||
|
"force": true
|
||||||
|
}' --unix-socket $unix_socket $url/api/v1/status)
|
||||||
|
ob_state=$(echo "$response" | jq -r '.data.obState')
|
||||||
|
if [ "x$ob_state" = "x1" ]; then
|
||||||
|
echo "The agent dose not know the observer password"
|
||||||
|
echo "1. Please set environment: export OB_ROOT_PASSWORD={root_passowrd}"
|
||||||
|
echo "2. Kill all the obshell process"
|
||||||
|
echo "3. Restart the agent process: $prefix/bin/obshell admin start --ip 127.0.0.1 --port 2886"
|
||||||
|
fi
|
||||||
|
sleep 30
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "observer PID file not found."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function stop_observer {
|
||||||
|
check_obagent_process
|
||||||
|
response=$(curl --silent -H "Content-Type: application/json" -X POST -d '{
|
||||||
|
"scope":
|
||||||
|
{
|
||||||
|
"type":"global",
|
||||||
|
"target":[]
|
||||||
|
},
|
||||||
|
"force": true
|
||||||
|
}' --unix-socket $unix_socket $url/api/v1/ob/stop)
|
||||||
|
successful=$(echo "$response" | jq -r '.successful')
|
||||||
|
if [ "x$successful" = "xfalse" ]; then
|
||||||
|
echo "send request failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
trace=$(echo "$response" | jq -r '.data.id')
|
||||||
|
check_trace $trace "stop observer" 20 6
|
||||||
|
systemd-notify --status='STOPPING=1'
|
||||||
|
}
|
||||||
|
|
||||||
|
function reload_observer {
|
||||||
|
check_obagent_process
|
||||||
|
prepare_config_json
|
||||||
|
do_reload_observer
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "x$1" = "xstart" ]; then
|
||||||
|
echo "oceanbase service started at ${DATE}"
|
||||||
|
if check_daemon_process; then
|
||||||
|
echo "The agent service is exist"
|
||||||
|
else
|
||||||
|
start_obshell
|
||||||
|
fi
|
||||||
|
start_observer
|
||||||
|
|
||||||
|
elif [ "x$1" = "xstop" ]; then
|
||||||
|
echo "oceanbase service stopped at ${DATE}"
|
||||||
|
stop_observer
|
||||||
|
elif [ "x$1" = "xreload" ]; then
|
||||||
|
echo "oceanbase service reloaded at ${DATE}"
|
||||||
|
reload_observer
|
||||||
|
elif [ "x$1" = "xdestroy" ]; then
|
||||||
|
# rpm uninstall logic, run systemctl stop oceanbase firstly
|
||||||
|
echo "oceanbase service destroyed at ${DATE}"
|
||||||
|
$obshell admin stop > /dev/null 2>&1
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "stop obshell failed"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
9
tools/rpm/systemd/profile/oceanbase.cnf
Normal file
9
tools/rpm/systemd/profile/oceanbase.cnf
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
mysqlPort=2881
|
||||||
|
rootPwd=""
|
||||||
|
redoDir=/var/lib/oceanbase/redo
|
||||||
|
dataDir=/var/lib/oceanbase/data
|
||||||
|
datafile_size=2G
|
||||||
|
cpu_count=16
|
||||||
|
memory_limit=6G
|
||||||
|
system_memory=1G
|
||||||
|
log_disk_size=13G
|
||||||
13
tools/rpm/systemd/profile/oceanbase.service
Normal file
13
tools/rpm/systemd/profile/oceanbase.service
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=oceanbase
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=root
|
||||||
|
Type=notify
|
||||||
|
KillMode=none
|
||||||
|
ExecStart=/bin/bash /home/admin/oceanbase/profile/oceanbase-service.sh start
|
||||||
|
ExecStop=/bin/bash /home/admin/oceanbase/profile/oceanbase-service.sh stop
|
||||||
|
ExecReload=/bin/bash /home/admin/oceanbase/profile/oceanbase-service.sh reload
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
14
tools/rpm/systemd/profile/post_install.sh.template
Normal file
14
tools/rpm/systemd/profile/post_install.sh.template
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "execute post install script"
|
||||||
|
prefix=@CPACK_PACKAGING_INSTALL_PREFIX@
|
||||||
|
|
||||||
|
# prepare the systemd service unit
|
||||||
|
cp -f $prefix/profile/oceanbase.service /etc/systemd/system/oceanbase.service
|
||||||
|
chmod 644 /etc/systemd/system/oceanbase.service
|
||||||
|
chmod +x $prefix/profile/oceanbase-service.sh
|
||||||
|
cp -f $prefix/profile/oceanbase.cnf /etc/oceanbase.cnf
|
||||||
|
systemctl daemon-reload
|
||||||
|
|
||||||
|
# deploy local observer
|
||||||
|
/bin/bash $prefix/profile/oceanbase-service.sh deploy
|
||||||
6
tools/rpm/systemd/profile/post_uninstall.sh.template
Normal file
6
tools/rpm/systemd/profile/post_uninstall.sh.template
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "execute post uninstall script"
|
||||||
|
prefix=@CPACK_PACKAGING_INSTALL_PREFIX@
|
||||||
|
|
||||||
|
rm -rf $prefix/.meta $prefix/log_obshell
|
||||||
11
tools/rpm/systemd/profile/pre_uninstall.sh.template
Normal file
11
tools/rpm/systemd/profile/pre_uninstall.sh.template
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "execute pre uninstall script"
|
||||||
|
prefix=@CPACK_PACKAGING_INSTALL_PREFIX@
|
||||||
|
|
||||||
|
echo remove oceanbase service
|
||||||
|
systemctl stop oceanbase
|
||||||
|
systemctl disable oceanbase
|
||||||
|
/bin/bash $prefix/profile/oceanbase-service.sh destroy
|
||||||
|
rm -f /etc/systemd/system/oceanbase.service /etc/oceanbase.cnf
|
||||||
|
systemctl daemon-reload
|
||||||
Reference in New Issue
Block a user