mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
fixed docker config
This commit is contained in:
@@ -26,6 +26,10 @@ baseClean(){
|
||||
}
|
||||
|
||||
CANAL_DIR="/home/admin/canal-server/logs"
|
||||
if [ ! -d "$CANAL_DIR" ]
|
||||
CANAL_DIR="/home/admin/canal-admin/logs"
|
||||
fi
|
||||
|
||||
if [[ -d $CANAL_DIR ]]; then
|
||||
USAGE=$(df -h|awk 'NR>1 {gsub(/%$/,"",$5);print $5 }'|sort -nr|head -1)
|
||||
if [[ $USAGE -ge 90 ]]; then
|
||||
|
||||
@@ -1,11 +1,23 @@
|
||||
#!/bin/sh
|
||||
metrics_port=`perl -le 'print $ENV{"canal.metrics.pull.port"}'`
|
||||
if [ "$metrics_port" == "" ]; then
|
||||
metrics_port="11112"
|
||||
|
||||
if [ -d "/home/admin/canal-server" ]; then
|
||||
serverPort=`perl -le 'print $ENV{"server.port"}'`
|
||||
if [ -z "$serverPort" ] ; then
|
||||
serverPort=8089
|
||||
fi
|
||||
|
||||
CHECK_URL="http://127.0.0.1:$serverPort/index.html"
|
||||
CHECK_POINT="Canal"
|
||||
else
|
||||
metrics_port=`perl -le 'print $ENV{"canal.metrics.pull.port"}'`
|
||||
if [ "$metrics_port" == "" ]; then
|
||||
metrics_port="11112"
|
||||
fi
|
||||
|
||||
CHECK_URL="http://127.0.0.1:$metrics_port/metrics"
|
||||
CHECK_POINT="canal"
|
||||
fi
|
||||
|
||||
CHECK_URL="http://127.0.0.1:$metrics_port/metrics"
|
||||
CHECK_POINT="canal"
|
||||
CHECK_COUNT=`curl -s --connect-timeout 7 --max-time 7 $CHECK_URL | grep -c $CHECK_POINT`
|
||||
if [ $CHECK_COUNT -eq 0 ]; then
|
||||
echo "[FAILED]"
|
||||
|
||||
@@ -76,26 +76,41 @@ function checkStart() {
|
||||
|
||||
function start_canal() {
|
||||
echo "start canal ..."
|
||||
metricsPort=`perl -le 'print $ENV{"canal.metrics.pull.port"}'`
|
||||
if [ -z "$metricsPort" ] ; then
|
||||
metricsPort=11112
|
||||
fi
|
||||
managerAddress=`perl -le 'print $ENV{"canal.admin.manager"}'`
|
||||
if [ ! -z "$managerAddress" ] ; then
|
||||
# canal_local.properties mode
|
||||
adminPort=`perl -le 'print $ENV{"canal.admin.port"}'`
|
||||
if [ -z "$adminPort" ] ; then
|
||||
adminPort=11110
|
||||
fi
|
||||
|
||||
destination=`perl -le 'print $ENV{"canal.destinations"}'`
|
||||
if [[ "$destination" =~ ',' ]]; then
|
||||
echo "multi destination:$destination is not support"
|
||||
exit 1;
|
||||
su admin -c 'cd /home/admin/canal-server/bin/ && sh restart.sh local 1>>/tmp/start.log 2>&1'
|
||||
sleep 5
|
||||
#check start
|
||||
checkStart "canal" "nc 127.0.0.1 $metricsPort -w 1 -z | wc -l" 30
|
||||
else
|
||||
if [ "$destination" != "" ] && [ "$destination" != "example" ] ; then
|
||||
if [ -d /home/admin/canal-server/conf/example ]; then
|
||||
mv /home/admin/canal-server/conf/example /home/admin/canal-server/conf/$destination
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
su admin -c 'cd /home/admin/canal-server/bin/ && sh restart.sh 1>>/tmp/start.log 2>&1'
|
||||
sleep 5
|
||||
#check start
|
||||
checkStart "canal" "nc 127.0.0.1 $metricsPort -w 1 -z | wc -l" 30
|
||||
metricsPort=`perl -le 'print $ENV{"canal.metrics.pull.port"}'`
|
||||
if [ -z "$metricsPort" ] ; then
|
||||
metricsPort=11112
|
||||
fi
|
||||
|
||||
destination=`perl -le 'print $ENV{"canal.destinations"}'`
|
||||
if [[ "$destination" =~ ',' ]]; then
|
||||
echo "multi destination:$destination is not support"
|
||||
exit 1;
|
||||
else
|
||||
if [ "$destination" != "" ] && [ "$destination" != "example" ] ; then
|
||||
if [ -d /home/admin/canal-server/conf/example ]; then
|
||||
mv /home/admin/canal-server/conf/example /home/admin/canal-server/conf/$destination
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
su admin -c 'cd /home/admin/canal-server/bin/ && sh restart.sh 1>>/tmp/start.log 2>&1'
|
||||
sleep 5
|
||||
#check start
|
||||
checkStart "canal" "nc 127.0.0.1 $metricsPort -w 1 -z | wc -l" 30
|
||||
fi
|
||||
}
|
||||
|
||||
function stop_canal() {
|
||||
@@ -104,8 +119,17 @@ function stop_canal() {
|
||||
echo "stop canal successful ..."
|
||||
}
|
||||
|
||||
function start_exporter() {
|
||||
su admin -c 'cd /home/admin/node_exporter && ./node_exporter 1>>/tmp/start.log 2>&1 &'
|
||||
}
|
||||
|
||||
function stop_exporter() {
|
||||
su admin -c 'killall node_exporter'
|
||||
}
|
||||
|
||||
echo "==> START ..."
|
||||
|
||||
start_exporter
|
||||
start_canal
|
||||
|
||||
echo "==> START SUCCESSFUL ..."
|
||||
@@ -117,5 +141,6 @@ waitterm
|
||||
echo "==> STOP"
|
||||
|
||||
stop_canal
|
||||
start_exporter
|
||||
|
||||
echo "==> STOP SUCCESSFUL ..."
|
||||
echo "==> STOP SUCCESSFUL ..."
|
||||
169
docker/image/app_admin.sh
Executable file
169
docker/image/app_admin.sh
Executable file
@@ -0,0 +1,169 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
source /etc/profile
|
||||
export JAVA_HOME=/usr/java/latest
|
||||
export PATH=$JAVA_HOME/bin:$PATH
|
||||
touch /tmp/start.log
|
||||
chown admin: /tmp/start.log
|
||||
chown -R admin: /home/admin/canal-admin
|
||||
host=`hostname -i`
|
||||
|
||||
MYSQL_USER_PASSWORD=`perl -le 'print $ENV{"spring.datasource.password"}'`
|
||||
MYSQL_USER=`perl -le 'print $ENV{"spring.datasource.username"}'`
|
||||
MYSQL_DATABASE=`perl -le 'print $ENV{"spring.datasource.database"}'`
|
||||
MYSQL_ADDRESS=`perl -le 'print $ENV{"spring.datasource.address"}'`
|
||||
|
||||
if [ -z "${MYSQL_USER_PASSWORD}" ]; then
|
||||
MYSQL_USER_PASSWORD="canal"
|
||||
fi
|
||||
if [ -z "${MYSQL_USER}" ]; then
|
||||
MYSQL_USER="canal"
|
||||
fi
|
||||
if [ -z "${MYSQL_DATABASE}" ]; then
|
||||
MYSQL_DATABASE="canal_manager"
|
||||
fi
|
||||
|
||||
# waitterm
|
||||
# wait TERM/INT signal.
|
||||
# see: http://veithen.github.io/2014/11/16/sigterm-propagation.html
|
||||
waitterm() {
|
||||
local PID
|
||||
# any process to block
|
||||
tail -f /dev/null &
|
||||
PID="$!"
|
||||
# setup trap, could do nothing, or just kill the blocker
|
||||
trap "kill -TERM ${PID}" TERM INT
|
||||
# wait for signal, ignore wait exit code
|
||||
wait "${PID}" || true
|
||||
# clear trap
|
||||
trap - TERM INT
|
||||
# wait blocker, ignore blocker exit code
|
||||
wait "${PID}" 2>/dev/null || true
|
||||
}
|
||||
|
||||
# waittermpid "${PIDFILE}".
|
||||
# monitor process by pidfile && wait TERM/INT signal.
|
||||
# if the process disappeared, return 1, means exit with ERROR.
|
||||
# if TERM or INT signal received, return 0, means OK to exit.
|
||||
waittermpid() {
|
||||
local PIDFILE PID do_run error
|
||||
PIDFILE="${1?}"
|
||||
do_run=true
|
||||
error=0
|
||||
trap "do_run=false" TERM INT
|
||||
while "${do_run}" ; do
|
||||
PID="$(cat "${PIDFILE}")"
|
||||
if ! ps -p "${PID}" >/dev/null 2>&1 ; then
|
||||
do_run=false
|
||||
error=1
|
||||
else
|
||||
sleep 1
|
||||
fi
|
||||
done
|
||||
trap - TERM INT
|
||||
return "${error}"
|
||||
}
|
||||
|
||||
|
||||
function checkStart() {
|
||||
local name=$1
|
||||
local cmd=$2
|
||||
local timeout=$3
|
||||
cost=5
|
||||
while [ $timeout -gt 0 ]; do
|
||||
ST=`eval $cmd`
|
||||
if [ "$ST" == "0" ]; then
|
||||
sleep 1
|
||||
let timeout=timeout-1
|
||||
let cost=cost+1
|
||||
elif [ "$ST" == "" ]; then
|
||||
sleep 1
|
||||
let timeout=timeout-1
|
||||
let cost=cost+1
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
echo "start $name successful"
|
||||
}
|
||||
|
||||
function start_mysql() {
|
||||
echo "start mysql ..."
|
||||
# start mysql
|
||||
MYSQL_ROOT_PASSWORD=Hello1234
|
||||
# connect local mysql
|
||||
if [ -z "$(ls -A /var/lib/mysql)" ]; then
|
||||
mysql_install_db --user=mysql --datadir=/var/lib/mysql 1>>/tmp/start.log 2>&1
|
||||
# These statements _must_ be on individual lines, and _must_ end with
|
||||
# semicolons (no line breaks or comments are permitted).
|
||||
# TODO proper SQL escaping on ALL the things D:
|
||||
TEMP_FILE='/tmp/init.sql'
|
||||
echo "update mysql.user set password=password('${MYSQL_ROOT_PASSWORD}') where user='root';" >> $TEMP_FILE
|
||||
echo "grant all privileges on *.* to 'root'@'%' WITH GRANT OPTION ;" >> $TEMP_FILE
|
||||
echo "create database if not exists $MYSQL_DATABASE ;" >> $TEMP_FILE
|
||||
echo "create user $MYSQL_USER identified by '$MYSQL_USER_PASSWORD' ;" >> $TEMP_FILE
|
||||
echo "grant all privileges on $MYSQL_DATABASE.* to '$MYSQL_USER'@'%' identified by '$MYSQL_USER_PASSWORD' ;" >> $TEMP_FILE
|
||||
echo "grant all privileges on $MYSQL_DATABASE.* to '$MYSQL_USER'@'localhost' identified by '$MYSQL_USER_PASSWORD' ;" >> $TEMP_FILE
|
||||
echo "flush privileges;" >> $TEMP_FILE
|
||||
service mysqld start
|
||||
checkStart "mysql" "echo 'show status' | mysql -s -h127.0.0.1 -P3306 -uroot | grep -c Uptime" 30
|
||||
mysql -h127.0.0.1 -uroot -e "source $TEMP_FILE" 1>>/tmp/start.log 2>&1
|
||||
|
||||
cmd="mysql -h127.0.0.1 -u$MYSQL_USER -p$MYSQL_USER_PASSWORD $MYSQL_DATABASE -e 'source /home/admin/canal-admin/conf/canal_manager.sql' 1>>/tmp/start.log 2>&1"
|
||||
eval $cmd
|
||||
/bin/rm -f /home/admin/canal-admin/conf/canal_manager.sql
|
||||
else
|
||||
chown -R mysql:mysql /var/lib/mysql
|
||||
service mysqld start
|
||||
#check start
|
||||
checkStart "mysql" "echo 'show status' | mysql -b -s -h127.0.0.1 -P3306 -uroot -p$MYSQL_ROOT_PASSWORD | grep -c Uptime" 30
|
||||
fi
|
||||
}
|
||||
|
||||
function stop_mysql() {
|
||||
echo "stop mysql ..."
|
||||
# stop mysql
|
||||
service mysqld stop
|
||||
echo "stop mysql successful ..."
|
||||
}
|
||||
|
||||
function start_admin() {
|
||||
echo "start admin ..."
|
||||
serverPort=`perl -le 'print $ENV{"server.port"}'`
|
||||
if [ -z "$serverPort" ] ; then
|
||||
serverPort=8089
|
||||
fi
|
||||
su admin -c 'cd /home/admin/canal-admin/bin/ && sh restart.sh 1>>/tmp/start.log 2>&1'
|
||||
sleep 5
|
||||
#check start
|
||||
checkStart "canal" "nc 127.0.0.1 $serverPort -w 1 -z | wc -l" 30
|
||||
}
|
||||
|
||||
function stop_admin() {
|
||||
echo "stop admin"
|
||||
su admin -c 'cd /home/admin/canal-admin/bin/ && sh stop.sh 1>>/tmp/start.log 2>&1'
|
||||
echo "stop admin successful ..."
|
||||
}
|
||||
|
||||
echo "==> START ..."
|
||||
|
||||
if [ -z "${MYSQL_ADDRESS}" ]; then
|
||||
start_mysql
|
||||
fi
|
||||
start_admin
|
||||
|
||||
echo "==> START SUCCESSFUL ..."
|
||||
|
||||
tail -f /dev/null &
|
||||
# wait TERM signal
|
||||
waitterm
|
||||
|
||||
echo "==> STOP"
|
||||
|
||||
if [ -z "${MYSQL_ADDRESS}" ]; then
|
||||
stop_admin
|
||||
fi
|
||||
stop_mysql
|
||||
|
||||
echo "==> STOP SUCCESSFUL ..."
|
||||
110
docker/image/canal_manager.sql
Normal file
110
docker/image/canal_manager.sql
Normal file
@@ -0,0 +1,110 @@
|
||||
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `canal_manager` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;
|
||||
|
||||
USE `canal_manager`;
|
||||
|
||||
SET NAMES utf8;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for canal_adapter_config
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `canal_adapter_config`;
|
||||
CREATE TABLE `canal_adapter_config` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`category` varchar(45) NOT NULL,
|
||||
`name` varchar(45) NOT NULL,
|
||||
`status` varchar(45) DEFAULT NULL,
|
||||
`content` text NOT NULL,
|
||||
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for canal_cluster
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `canal_cluster`;
|
||||
CREATE TABLE `canal_cluster` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(63) NOT NULL,
|
||||
`zk_hosts` varchar(255) NOT NULL,
|
||||
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for canal_config
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `canal_config`;
|
||||
CREATE TABLE `canal_config` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`cluster_id` bigint(20) DEFAULT NULL,
|
||||
`server_id` bigint(20) DEFAULT NULL,
|
||||
`name` varchar(45) NOT NULL,
|
||||
`status` varchar(45) DEFAULT NULL,
|
||||
`content` text NOT NULL,
|
||||
`content_md5` varchar(128) NOT NULL,
|
||||
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `sid_UNIQUE` (`server_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for canal_instance_config
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `canal_instance_config`;
|
||||
CREATE TABLE `canal_instance_config` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`cluster_id` bigint(20) DEFAULT NULL,
|
||||
`server_id` bigint(20) DEFAULT NULL,
|
||||
`name` varchar(45) NOT NULL,
|
||||
`status` varchar(45) DEFAULT NULL,
|
||||
`content` text NOT NULL,
|
||||
`content_md5` varchar(128) DEFAULT NULL,
|
||||
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name_UNIQUE` (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for canal_node_server
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `canal_node_server`;
|
||||
CREATE TABLE `canal_node_server` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`cluster_id` bigint(20) DEFAULT NULL,
|
||||
`name` varchar(63) NOT NULL,
|
||||
`ip` varchar(63) NOT NULL,
|
||||
`admin_port` int(11) DEFAULT NULL,
|
||||
`tcp_port` int(11) DEFAULT NULL,
|
||||
`metric_port` int(11) DEFAULT NULL,
|
||||
`status` varchar(45) DEFAULT NULL,
|
||||
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for canal_user
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `canal_user`;
|
||||
CREATE TABLE `canal_user` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`username` varchar(31) NOT NULL,
|
||||
`password` varchar(128) NOT NULL,
|
||||
`name` varchar(31) NOT NULL,
|
||||
`roles` varchar(31) NOT NULL,
|
||||
`introduction` varchar(255) DEFAULT NULL,
|
||||
`avatar` varchar(255) DEFAULT NULL,
|
||||
`creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of canal_user
|
||||
-- ----------------------------
|
||||
BEGIN;
|
||||
INSERT INTO `canal_user` VALUES (1, 'admin', '6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9', 'Canal Manager', 'admin', NULL, NULL, '2019-07-14 00:05:28');
|
||||
COMMIT;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
Reference in New Issue
Block a user