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:
@@ -6,12 +6,14 @@ spring:
|
|||||||
time-zone: GMT+8
|
time-zone: GMT+8
|
||||||
|
|
||||||
spring.datasource:
|
spring.datasource:
|
||||||
url: jdbc:mysql://127.0.0.1:3306/canal_manager?useUnicode=true&characterEncoding=UTF-8&useSSL=false
|
address: 127.0.0.1:3306
|
||||||
username: root
|
database: canal_manager
|
||||||
password: 121212
|
username: canal
|
||||||
|
password: canal
|
||||||
driver-class-name: com.mysql.jdbc.Driver
|
driver-class-name: com.mysql.jdbc.Driver
|
||||||
|
url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false
|
||||||
hikari:
|
hikari:
|
||||||
maximum-pool-size: 10
|
maximum-pool-size: 30
|
||||||
minimum-idle: 1
|
minimum-idle: 1
|
||||||
|
|
||||||
canal:
|
canal:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/ `canal_manager` /*!40100 DEFAULT CHARAC
|
|||||||
|
|
||||||
USE `canal_manager`;
|
USE `canal_manager`;
|
||||||
|
|
||||||
SET NAMES utf8mb4;
|
SET NAMES utf8;
|
||||||
SET FOREIGN_KEY_CHECKS = 0;
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
@@ -17,7 +17,7 @@ CREATE TABLE `canal_adapter_config` (
|
|||||||
`content` text NOT NULL,
|
`content` text NOT NULL,
|
||||||
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Table structure for canal_cluster
|
-- Table structure for canal_cluster
|
||||||
@@ -29,7 +29,7 @@ CREATE TABLE `canal_cluster` (
|
|||||||
`zk_hosts` varchar(255) NOT NULL,
|
`zk_hosts` varchar(255) NOT NULL,
|
||||||
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Table structure for canal_config
|
-- Table structure for canal_config
|
||||||
@@ -46,7 +46,7 @@ CREATE TABLE `canal_config` (
|
|||||||
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE KEY `sid_UNIQUE` (`server_id`)
|
UNIQUE KEY `sid_UNIQUE` (`server_id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Table structure for canal_instance_config
|
-- Table structure for canal_instance_config
|
||||||
@@ -63,7 +63,7 @@ CREATE TABLE `canal_instance_config` (
|
|||||||
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE KEY `name_UNIQUE` (`name`)
|
UNIQUE KEY `name_UNIQUE` (`name`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Table structure for canal_node_server
|
-- Table structure for canal_node_server
|
||||||
@@ -80,7 +80,7 @@ CREATE TABLE `canal_node_server` (
|
|||||||
`status` varchar(45) DEFAULT NULL,
|
`status` varchar(45) DEFAULT NULL,
|
||||||
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Table structure for canal_user
|
-- Table structure for canal_user
|
||||||
@@ -96,7 +96,7 @@ CREATE TABLE `canal_user` (
|
|||||||
`avatar` varchar(255) DEFAULT NULL,
|
`avatar` varchar(255) DEFAULT NULL,
|
||||||
`creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
`creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
SET FOREIGN_KEY_CHECKS = 1;
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
sh stop.sh
|
args=$@
|
||||||
|
|
||||||
sh startup.sh
|
sh stop.sh $args
|
||||||
|
sh startup.sh $args
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM canal/osbase:v1
|
FROM canal/osbase:v2
|
||||||
|
|
||||||
MAINTAINER agapple (jianghang115@gmail.com)
|
MAINTAINER agapple (jianghang115@gmail.com)
|
||||||
|
|
||||||
@@ -10,6 +10,7 @@ RUN \
|
|||||||
cp -R /tmp/docker/alidata /alidata && \
|
cp -R /tmp/docker/alidata /alidata && \
|
||||||
chmod +x /alidata/bin/* && \
|
chmod +x /alidata/bin/* && \
|
||||||
mkdir -p /home/admin && \
|
mkdir -p /home/admin && \
|
||||||
|
cp -R /tmp/docker/app.sh /home/admin/ && \
|
||||||
cp -R /tmp/docker/admin/* /home/admin/ && \
|
cp -R /tmp/docker/admin/* /home/admin/ && \
|
||||||
/bin/cp -f alidata/bin/lark-wait /usr/bin/lark-wait && \
|
/bin/cp -f alidata/bin/lark-wait /usr/bin/lark-wait && \
|
||||||
|
|
||||||
@@ -17,6 +18,9 @@ RUN \
|
|||||||
tar -xzvf /home/admin/canal.deployer-*.tar.gz -C /home/admin/canal-server && \
|
tar -xzvf /home/admin/canal.deployer-*.tar.gz -C /home/admin/canal-server && \
|
||||||
/bin/rm -f /home/admin/canal.deployer-*.tar.gz && \
|
/bin/rm -f /home/admin/canal.deployer-*.tar.gz && \
|
||||||
|
|
||||||
|
tar zxvf /tmp/node_exporter.tar.gz -C /home/admin && \
|
||||||
|
ln -s /home/admin/node_exporter-0.18.1.linux-arm64 /home/admin/node_exporter && \
|
||||||
|
|
||||||
mkdir -p home/admin/canal-server/logs && \
|
mkdir -p home/admin/canal-server/logs && \
|
||||||
chmod +x /home/admin/*.sh && \
|
chmod +x /home/admin/*.sh && \
|
||||||
chmod +x /home/admin/bin/*.sh && \
|
chmod +x /home/admin/bin/*.sh && \
|
||||||
@@ -24,8 +28,8 @@ RUN \
|
|||||||
yum clean all && \
|
yum clean all && \
|
||||||
true
|
true
|
||||||
|
|
||||||
# 2222 sys , 8000 debug , 11111 canal , 11112 metrics
|
# 11110 admin , 11111 canal , 11112 metrics, 9100 exporter
|
||||||
EXPOSE 2222 11111 8000 11112
|
EXPOSE 11110 11111 11112 9100
|
||||||
|
|
||||||
WORKDIR /home/admin
|
WORKDIR /home/admin
|
||||||
|
|
||||||
|
|||||||
35
docker/Dockerfile_admin
Normal file
35
docker/Dockerfile_admin
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
FROM canal/osadmin:v1
|
||||||
|
|
||||||
|
MAINTAINER agapple (jianghang115@gmail.com)
|
||||||
|
|
||||||
|
# install canal
|
||||||
|
COPY image/ /tmp/docker/
|
||||||
|
COPY canal.admin-*.tar.gz /home/admin/
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
cp -R /tmp/docker/alidata /alidata && \
|
||||||
|
chmod +x /alidata/bin/* && \
|
||||||
|
mkdir -p /home/admin && \
|
||||||
|
mkdir -p /home/admin/bin/ && \
|
||||||
|
cp -R /tmp/docker/app_admin.sh /home/admin/app.sh && \
|
||||||
|
cp -R /tmp/docker/admin/* /home/admin/ && \
|
||||||
|
/bin/cp -f alidata/bin/lark-wait /usr/bin/lark-wait && \
|
||||||
|
|
||||||
|
mkdir -p /home/admin/canal-admin && \
|
||||||
|
tar -xzvf /home/admin/canal.admin-*.tar.gz -C /home/admin/canal-admin && \
|
||||||
|
/bin/rm -f /home/admin/canal.admin-*.tar.gz && \
|
||||||
|
|
||||||
|
mkdir -p home/admin/canal-admin/logs && \
|
||||||
|
chmod +x /home/admin/*.sh && \
|
||||||
|
chmod +x /home/admin/bin/*.sh && \
|
||||||
|
chown admin: -R /home/admin && \
|
||||||
|
yum clean all && \
|
||||||
|
true
|
||||||
|
|
||||||
|
# 2222 sys , 8000 debug , 8089 web , 11110 admin , 11111 canal , 11112 metrics
|
||||||
|
EXPOSE 2222 11110 11111 8000 8089 11112
|
||||||
|
|
||||||
|
WORKDIR /home/admin
|
||||||
|
|
||||||
|
ENTRYPOINT [ "/alidata/bin/main.sh" ]
|
||||||
|
CMD [ "/home/admin/app.sh" ]
|
||||||
@@ -4,6 +4,7 @@ MAINTAINER agapple (jianghang115@gmail.com)
|
|||||||
|
|
||||||
env DOWNLOAD_LINK="http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.rpm"
|
env DOWNLOAD_LINK="http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.rpm"
|
||||||
# install system
|
# install system
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
/bin/cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
|
/bin/cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
|
||||||
echo 'root:Hello1234' | chpasswd && \
|
echo 'root:Hello1234' | chpasswd && \
|
||||||
@@ -32,7 +33,6 @@ RUN \
|
|||||||
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=xxx; oraclelicense=accept-securebackup-cookie" "$DOWNLOAD_LINK" -O /tmp/jdk-8-linux-x64.rpm && \
|
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=xxx; oraclelicense=accept-securebackup-cookie" "$DOWNLOAD_LINK" -O /tmp/jdk-8-linux-x64.rpm && \
|
||||||
yum -y install /tmp/jdk-8-linux-x64.rpm && \
|
yum -y install /tmp/jdk-8-linux-x64.rpm && \
|
||||||
/bin/rm -f /tmp/jdk-8-linux-x64.rpm && \
|
/bin/rm -f /tmp/jdk-8-linux-x64.rpm && \
|
||||||
|
|
||||||
echo "export JAVA_HOME=/usr/java/latest" >> /etc/profile && \
|
echo "export JAVA_HOME=/usr/java/latest" >> /etc/profile && \
|
||||||
echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profile && \
|
echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profile && \
|
||||||
yum clean all && \
|
yum clean all && \
|
||||||
|
|||||||
11
docker/base/Dockerfile_admin
Normal file
11
docker/base/Dockerfile_admin
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
FROM canal/osbase:v1
|
||||||
|
|
||||||
|
MAINTAINER agapple (jianghang115@gmail.com)
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
groupadd -r mysql && useradd -r -g mysql mysql && \
|
||||||
|
yum -y install wget mysql-server --nogpgcheck && \
|
||||||
|
yum clean all && \
|
||||||
|
true
|
||||||
|
|
||||||
|
CMD ["/bin/bash"]
|
||||||
11
docker/base/Dockerfile_v2
Normal file
11
docker/base/Dockerfile_v2
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
FROM canal/osbase:v1
|
||||||
|
|
||||||
|
MAINTAINER agapple (jianghang115@gmail.com)
|
||||||
|
|
||||||
|
env NODE_EPORTER_LINK="https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-arm64.tar.gz"
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
wget "$NODE_EPORTER_LINK" -O /tmp/node_exporter.tar.gz && \
|
||||||
|
true
|
||||||
|
|
||||||
|
CMD ["/bin/bash"]
|
||||||
@@ -16,6 +16,15 @@ BASE=${bin_abs_path}
|
|||||||
|
|
||||||
if [ "$1" == "base" ] ; then
|
if [ "$1" == "base" ] ; then
|
||||||
docker build --no-cache -t canal/osbase $BASE/base
|
docker build --no-cache -t canal/osbase $BASE/base
|
||||||
|
elif [ "$1" == "base_v2" ] ; then
|
||||||
|
docker build --no-cache -t canal/osbase $BASE/base -f $BASE/base/Dockerfile_v2
|
||||||
|
elif [ "$1" == "base_admin" ] ; then
|
||||||
|
docker build --no-cache -t canal/osadmin $BASE/base -f $BASE/base/Dockerfile_admin
|
||||||
|
elif [ "$1" == "admin" ] ; then
|
||||||
|
rm -rf $BASE/canal.*.tar.gz ;
|
||||||
|
cd $BASE/../ && mvn clean package -Dmaven.test.skip -Denv=release && cd $current_path ;
|
||||||
|
cp $BASE/../target/canal.admin-*.tar.gz $BASE/
|
||||||
|
docker build --no-cache -t canal/canal-admin $BASE/ -f $BASE/Dockerfile_admin
|
||||||
else
|
else
|
||||||
rm -rf $BASE/canal.*.tar.gz ;
|
rm -rf $BASE/canal.*.tar.gz ;
|
||||||
cd $BASE/../ && mvn clean package -Dmaven.test.skip -Denv=release && cd $current_path ;
|
cd $BASE/../ && mvn clean package -Dmaven.test.skip -Denv=release && cd $current_path ;
|
||||||
|
|||||||
@@ -26,6 +26,10 @@ baseClean(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
CANAL_DIR="/home/admin/canal-server/logs"
|
CANAL_DIR="/home/admin/canal-server/logs"
|
||||||
|
if [ ! -d "$CANAL_DIR" ]
|
||||||
|
CANAL_DIR="/home/admin/canal-admin/logs"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -d $CANAL_DIR ]]; then
|
if [[ -d $CANAL_DIR ]]; then
|
||||||
USAGE=$(df -h|awk 'NR>1 {gsub(/%$/,"",$5);print $5 }'|sort -nr|head -1)
|
USAGE=$(df -h|awk 'NR>1 {gsub(/%$/,"",$5);print $5 }'|sort -nr|head -1)
|
||||||
if [[ $USAGE -ge 90 ]]; then
|
if [[ $USAGE -ge 90 ]]; then
|
||||||
|
|||||||
@@ -1,11 +1,23 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
metrics_port=`perl -le 'print $ENV{"canal.metrics.pull.port"}'`
|
|
||||||
if [ "$metrics_port" == "" ]; then
|
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"
|
metrics_port="11112"
|
||||||
|
fi
|
||||||
|
|
||||||
|
CHECK_URL="http://127.0.0.1:$metrics_port/metrics"
|
||||||
|
CHECK_POINT="canal"
|
||||||
fi
|
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`
|
CHECK_COUNT=`curl -s --connect-timeout 7 --max-time 7 $CHECK_URL | grep -c $CHECK_POINT`
|
||||||
if [ $CHECK_COUNT -eq 0 ]; then
|
if [ $CHECK_COUNT -eq 0 ]; then
|
||||||
echo "[FAILED]"
|
echo "[FAILED]"
|
||||||
|
|||||||
@@ -76,6 +76,19 @@ function checkStart() {
|
|||||||
|
|
||||||
function start_canal() {
|
function start_canal() {
|
||||||
echo "start canal ..."
|
echo "start canal ..."
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
metricsPort=`perl -le 'print $ENV{"canal.metrics.pull.port"}'`
|
metricsPort=`perl -le 'print $ENV{"canal.metrics.pull.port"}'`
|
||||||
if [ -z "$metricsPort" ] ; then
|
if [ -z "$metricsPort" ] ; then
|
||||||
metricsPort=11112
|
metricsPort=11112
|
||||||
@@ -92,10 +105,12 @@ function start_canal() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
su admin -c 'cd /home/admin/canal-server/bin/ && sh restart.sh 1>>/tmp/start.log 2>&1'
|
su admin -c 'cd /home/admin/canal-server/bin/ && sh restart.sh 1>>/tmp/start.log 2>&1'
|
||||||
sleep 5
|
sleep 5
|
||||||
#check start
|
#check start
|
||||||
checkStart "canal" "nc 127.0.0.1 $metricsPort -w 1 -z | wc -l" 30
|
checkStart "canal" "nc 127.0.0.1 $metricsPort -w 1 -z | wc -l" 30
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function stop_canal() {
|
function stop_canal() {
|
||||||
@@ -104,8 +119,17 @@ function stop_canal() {
|
|||||||
echo "stop canal successful ..."
|
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 ..."
|
echo "==> START ..."
|
||||||
|
|
||||||
|
start_exporter
|
||||||
start_canal
|
start_canal
|
||||||
|
|
||||||
echo "==> START SUCCESSFUL ..."
|
echo "==> START SUCCESSFUL ..."
|
||||||
@@ -117,5 +141,6 @@ waitterm
|
|||||||
echo "==> STOP"
|
echo "==> STOP"
|
||||||
|
|
||||||
stop_canal
|
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;
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
function usage() {
|
function usage() {
|
||||||
echo "Usage:"
|
echo "Usage:"
|
||||||
echo " run.sh [CONFIG]"
|
echo " run.sh [CONFIG]"
|
||||||
echo "example:"
|
echo "example 1 :"
|
||||||
echo " run.sh -e canal.instance.master.address=127.0.0.1:3306 \\"
|
echo " run.sh -e canal.instance.master.address=127.0.0.1:3306 \\"
|
||||||
echo " -e canal.instance.dbUsername=canal \\"
|
echo " -e canal.instance.dbUsername=canal \\"
|
||||||
echo " -e canal.instance.dbPassword=canal \\"
|
echo " -e canal.instance.dbPassword=canal \\"
|
||||||
@@ -11,6 +11,11 @@ function usage() {
|
|||||||
echo " -e canal.instance.tsdb.enable=true \\"
|
echo " -e canal.instance.tsdb.enable=true \\"
|
||||||
echo " -e canal.instance.gtidon=false \\"
|
echo " -e canal.instance.gtidon=false \\"
|
||||||
echo " -e canal.instance.filter.regex=.*\\\\\\..* "
|
echo " -e canal.instance.filter.regex=.*\\\\\\..* "
|
||||||
|
echo "example 2 :"
|
||||||
|
echo " run.sh -e canal.admin.manager=127.0.0.1:8089 \\"
|
||||||
|
echo " -e canal.admin.port=11110 \\"
|
||||||
|
echo " -e canal.admin.user=admin \\"
|
||||||
|
echo " -e canal.admin.passwd=4ACFE3202A5FF5CF467898FC58AAB1D615029441"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,7 +77,7 @@ DATA="$BASE/data"
|
|||||||
mkdir -p $DATA
|
mkdir -p $DATA
|
||||||
CONFIG=${@:1}
|
CONFIG=${@:1}
|
||||||
#VOLUMNS="-v $DATA:/home/admin/canal-server/logs"
|
#VOLUMNS="-v $DATA:/home/admin/canal-server/logs"
|
||||||
PORTLIST="8000 2222 11111 11112"
|
PORTLIST="11110 11111 11112 9100"
|
||||||
PORTS=""
|
PORTS=""
|
||||||
for PORT in $PORTLIST ; do
|
for PORT in $PORTLIST ; do
|
||||||
#exist=`check_port $PORT`
|
#exist=`check_port $PORT`
|
||||||
|
|||||||
90
docker/run_admin.sh
Normal file
90
docker/run_admin.sh
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function usage() {
|
||||||
|
echo "Usage:"
|
||||||
|
echo " run_admin.sh [CONFIG]"
|
||||||
|
echo "example :"
|
||||||
|
echo " run_admin.sh -e server.port=8089 \\"
|
||||||
|
echo " -e canal.adminUser=admin \\"
|
||||||
|
echo " -e canal.adminPasswd=admin \\"
|
||||||
|
echo " -e spring.datasource.username=canal \\"
|
||||||
|
echo " -e spring.datasource.password=canal"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_port() {
|
||||||
|
local port=$1
|
||||||
|
local TL=$(which telnet)
|
||||||
|
if [ -f $TL ]; then
|
||||||
|
data=`echo quit | telnet 127.0.0.1 $port| grep -ic connected`
|
||||||
|
echo $data
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
local NC=$(which nc)
|
||||||
|
if [ -f $NC ]; then
|
||||||
|
data=`nc -z -w 1 127.0.0.1 $port | grep -ic succeeded`
|
||||||
|
echo $data
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
echo "0"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMyIp() {
|
||||||
|
case "`uname`" in
|
||||||
|
Darwin)
|
||||||
|
myip=`echo "show State:/Network/Global/IPv4" | scutil | grep PrimaryInterface | awk '{print $3}' | xargs ifconfig | grep inet | grep -v inet6 | awk '{print $2}'`
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
myip=`ip route get 1 | awk '{print $NF;exit}'`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo $myip
|
||||||
|
}
|
||||||
|
|
||||||
|
NET_MODE=""
|
||||||
|
case "`uname`" in
|
||||||
|
Darwin)
|
||||||
|
bin_abs_path=`cd $(dirname $0); pwd`
|
||||||
|
;;
|
||||||
|
Linux)
|
||||||
|
bin_abs_path=$(readlink -f $(dirname $0))
|
||||||
|
NET_MODE="--net=host"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
NET_MODE="--net=host"
|
||||||
|
bin_abs_path=`cd $(dirname $0); pwd`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
BASE=${bin_abs_path}
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
usage
|
||||||
|
elif [ "$1" == "-h" ] ; then
|
||||||
|
usage
|
||||||
|
elif [ "$1" == "help" ] ; then
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
DATA="$BASE/data"
|
||||||
|
mkdir -p $DATA
|
||||||
|
CONFIG=${@:1}
|
||||||
|
#VOLUMNS="-v $DATA:/home/admin/canal-admin/logs"
|
||||||
|
PORTLIST="8089"
|
||||||
|
PORTS=""
|
||||||
|
for PORT in $PORTLIST ; do
|
||||||
|
#exist=`check_port $PORT`
|
||||||
|
exist="0"
|
||||||
|
if [ "$exist" == "0" ]; then
|
||||||
|
PORTS="$PORTS -p $PORT:$PORT"
|
||||||
|
else
|
||||||
|
echo "port $PORT is used , pls check"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
MEMORY="-m 1024m"
|
||||||
|
LOCALHOST=`getMyIp`
|
||||||
|
cmd="docker run -d -it -h $LOCALHOST $CONFIG --name=canal-admin $VOLUMNS $NET_MODE $PORTS $MEMORY canal/canal-admin"
|
||||||
|
echo $cmd
|
||||||
|
eval $cmd
|
||||||
@@ -1,13 +1,11 @@
|
|||||||
package com.alibaba.otter.canal.instance.manager;
|
package com.alibaba.otter.canal.instance.manager;
|
||||||
|
|
||||||
import org.junit.Ignore;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
import com.alibaba.otter.canal.instance.manager.plain.PlainCanal;
|
import com.alibaba.otter.canal.instance.manager.plain.PlainCanal;
|
||||||
import com.alibaba.otter.canal.instance.manager.plain.PlainCanalConfigClient;
|
import com.alibaba.otter.canal.instance.manager.plain.PlainCanalConfigClient;
|
||||||
|
|
||||||
@Ignore
|
|
||||||
public class PlainCanalConfigClientIntegration {
|
public class PlainCanalConfigClientIntegration {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user