[CP] support ob rpm platform standalone systemd service
This commit is contained in:
parent
340b70b41f
commit
4349bb8f9f
4
.gitignore
vendored
4
.gitignore
vendored
@ -289,6 +289,10 @@ tools/deploy/single-with-proxy.yaml
|
||||
tools/deploy/single.yaml
|
||||
tools/docker/standalone/boot
|
||||
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/**/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_DEFAULT_USER "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
|
||||
"%global _missing_build_ids_terminate_build 0
|
||||
%global _find_debuginfo_opts -g
|
||||
%define __strip ${CMAKE_SOURCE_DIR}/deps/3rd/usr/local/oceanbase/devtools/bin/llvm-strip
|
||||
%undefine __brp_mangle_shebangs
|
||||
%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\\\"
|
||||
%debug_package
|
||||
%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
|
||||
#
|
||||
# - 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_srs_data.py
|
||||
${CMAKE_BINARY_DIR}/src/observer/observer
|
||||
deps/3rd/home/admin/oceanbase/bin/obshell
|
||||
DESTINATION bin
|
||||
COMPONENT server)
|
||||
else()
|
||||
@ -100,6 +129,17 @@ install(
|
||||
DESTINATION admin
|
||||
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
|
||||
if (NOT OB_SO_CACHE AND OB_BUILD_CDC)
|
||||
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
|
||||
repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/7/aarch64/
|
||||
|
||||
|
||||
[deps]
|
||||
devdeps-gtest-1.8.0-132022101316.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]
|
||||
devdeps-oblogmsg-1.0-52022113019.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]
|
||||
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
|
||||
repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/
|
||||
|
||||
|
||||
[deps]
|
||||
devdeps-gtest-1.8.0-132022101316.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]
|
||||
devdeps-oblogmsg-1.0-52022113019.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]
|
||||
ob-deploy-2.3.0-4.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
|
||||
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
|
||||
repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/8/aarch64/
|
||||
|
||||
|
||||
[deps]
|
||||
devdeps-gtest-1.8.0-132022101316.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]
|
||||
devdeps-oblogmsg-1.0-52022113019.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]
|
||||
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
|
||||
repo=http://mirrors.aliyun.com/oceanbase/community/stable/el/8/x86_64/
|
||||
|
||||
|
||||
[deps]
|
||||
devdeps-gtest-1.8.0-132022101316.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]
|
||||
devdeps-oblogmsg-1.0-52022113019.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]
|
||||
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
|
Loading…
x
Reference in New Issue
Block a user