• Canal 单机测试


    安装

    2 run.sh 修改

    #!/bin/bash
    
    function usage() {
        echo "Usage:"
        echo "  run.sh [CONFIG]"
        echo "example 1 :"
        echo "  run.sh -e canal.instance.master.address=127.0.0.1:3306 \"
        echo "         -e canal.instance.dbUsername=canal \"
        echo "         -e canal.instance.dbPassword=canal \"
        echo "         -e canal.instance.connectionCharset=UTF-8 \"
        echo "         -e canal.instance.tsdb.enable=true \"
        echo "         -e canal.instance.gtidon=false \"
        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
    }
    
    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
    }
    DATA="/usr/local/canal/data"
    echo "宿主挂载目录:"$DATA
    CONFIG=${@:1}
    VOLUMNS="-v $DATA:/home/admin/canal-server/logs"
    PORTLIST="11110 11111 11112 9100"
    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
    
    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"
            PORTS=""
            ;;
        *)
            bin_abs_path=`cd $(dirname $0); pwd`
            NET_MODE="--net=host"
            PORTS=""
            ;;
    esac
    BASE=${bin_abs_path}
    DATA="$BASE/data"
    mkdir -p $DATA
    
    if [ $# -eq 0 ]; then
        usage
    elif [ "$1" == "-h" ] ; then
        usage
    elif [ "$1" == "help" ] ; then
        usage
    fi
    
    
    
    MEMORY="-m 4096m"
    LOCALHOST=`getMyIp`
    cmd="docker run -d -it -h $LOCALHOST $CONFIG --name=canal-server $VOLUMNS $NET_MODE $PORTS $MEMORY canal/canal-server:v1.1.1"
    echo $cmd
    eval $cmd
    View Code

    3 start.sh 新增

    #!/bin/bash
    sh run.sh -e canal.auto.scan=false 
              -e canal.destinations=zomble 
              -e canal.instance.master.address=120.79.210.194:3306  
              -e canal.instance.dbUsername=canal  
              -e canal.instance.dbPassword=canal  
              -e canal.instance.connectionCharset=UTF-8 
              -e canal.instance.tsdb.enable=true 
              -e canal.instance.gtidon=false  

    zomble 是目标域

    4 执行./start.sh 最终的执行docker命令

    host 网络模式

    docker run -d -it -h 192.168.1.171 -e canal.auto.scan=false -e canal.destinations=zomble -e canal.instance.master.address=120.79.210.194:3306 -e canal.instance.dbUsername=canal -e canal.instance.dbPassword=canal -e canal.instance.connectionCharset=UTF-8 -e canal.instance.tsdb.enable=true -e canal.instance.gtidon=false --name=canal-server -v /usr/local/canal/data/:/home/admin/canal-server/logs --net=host -m 4096m canal/canal-server:v1.1.1

    上面的命令网络是host 方式 即容器占用的端口,宿主机也就占用了, 此时若想开多个实例可改为默认的桥接模式, 命令如下

    桥接模式

    docker run -d -it -h 192.168.1.171 -p 8777:11111 -e canal.auto.scan=false -e canal.destinations=zomble -e canal.instance.master.address=120.79.210.194:3306 -e canal.instance.dbUsername=canal -e canal.instance.dbPassword=canal -e canal.instance.connectionCharset=UTF-8 -e canal.instance.tsdb.enable=true -e canal.instance.gtidon=false --name=canal-server-8777 -v /usr/local/canal/data/:/home/admin/canal-server/logs --net=bridge -m 4096m canal/canal-server:v1.1.1

     同时改个名称

     同时映射端口-p 8777:11111, 推荐的映射端口还有2222, 8000, 11112

     

    DEMO 官网找

      

  • 相关阅读:
    python:JSON的两种常用编解码方式实例解析
    Python中的map与reduce函数简介
    Python初学者的几个迷惑点
    Python Numpy中数据的常用的保存与读取方法
    python全栈 day03 操作系统 -- 摘要
    python全栈 day02 计算机原理 -- 硬件
    Python作业之购物商城
    Lesson one of python
    总体设计
    ASP.Net页面上用户控件相互调用的方法
  • 原文地址:https://www.cnblogs.com/eason-d/p/11843583.html
Copyright © 2020-2023  润新知