zoukankan      html  css  js  c++  java
  • 构建docker镜像部署rocketmq

    构建镜像

    1. runbroker-customize.sh
    2. runserver-customize.sh

    这两个脚本会覆盖到容器${ROCKETMQ_HOME}/bin/路径中

    • 在image-build路径执行命令
    sh build-image.sh RMQ-VERSION BASE-IMAGE
    

    支持的RocketMQ版本参数RMQ-VERSION这里查询。
    支持的基础镜像参数BASE-IMAGE有[centos, alpine]。
    例如: sh build-image.sh 4.7.1 alpine

    在这里插入图片描述
    构建成功
    在这里插入图片描述

    启动服务

    • 启动name server
    docker run --name rmqnamesrv --restart=always -d -p 9876:9876 apacherocketmq/rocketmq:4.7.1-alpine sh mqnamesrv
    
    • 启动broker
    docker run --name rmqbroker --restart=always -d -p 10911:10911 -p 10909:10909 --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" apacherocketmq/rocketmq:4.7.1-alpine sh mqbroker
    

    启动失败

    默认启动脚本会根据主机内存大小自动计算JVM堆栈参数

    • runserver-customize.sh / runbroker-customize.sh
    #===========================================================================================
    # JVM Configuration
    #===========================================================================================
    calculate_heap_sizes()
    {
        case "`uname`" in
            Linux)
                system_memory_in_mb=`free -m| sed -n '2p' | awk '{print $2}'`
                system_cpu_cores=`egrep -c 'processor([[:space:]]+):.*' /proc/cpuinfo`
            ;;
            FreeBSD)
                system_memory_in_bytes=`sysctl hw.physmem | awk '{print $2}'`
                system_memory_in_mb=`expr $system_memory_in_bytes / 1024 / 1024`
                system_cpu_cores=`sysctl hw.ncpu | awk '{print $2}'`
            ;;
            SunOS)
                system_memory_in_mb=`prtconf | awk '/Memory size:/ {print $3}'`
                system_cpu_cores=`psrinfo | wc -l`
            ;;
            Darwin)
                system_memory_in_bytes=`sysctl hw.memsize | awk '{print $2}'`
                system_memory_in_mb=`expr $system_memory_in_bytes / 1024 / 1024`
                system_cpu_cores=`sysctl hw.ncpu | awk '{print $2}'`
            ;;
            *)
                # assume reasonable defaults for e.g. a modern desktop or
                # cheap server
                system_memory_in_mb="2048"
                system_cpu_cores="2"
            ;;
        esac
    
        # some systems like the raspberry pi don't report cores, use at least 1
        if [ "$system_cpu_cores" -lt "1" ]
        then
            system_cpu_cores="1"
        fi
    
        # set max heap size based on the following
        # max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB))
        # calculate 1/2 ram and cap to 1024MB
        # calculate 1/4 ram and cap to 8192MB
        # pick the max
        half_system_memory_in_mb=`expr $system_memory_in_mb / 2`
        quarter_system_memory_in_mb=`expr $half_system_memory_in_mb / 2`
        if [ "$half_system_memory_in_mb" -gt "1024" ]
        then
            half_system_memory_in_mb="1024"
        fi
        if [ "$quarter_system_memory_in_mb" -gt "8192" ]
        then
            quarter_system_memory_in_mb="8192"
        fi
        if [ "$half_system_memory_in_mb" -gt "$quarter_system_memory_in_mb" ]
        then
            max_heap_size_in_mb="$half_system_memory_in_mb"
        else
            max_heap_size_in_mb="$quarter_system_memory_in_mb"
        fi
        MAX_HEAP_SIZE="${max_heap_size_in_mb}M"
    
        # Young gen: min(max_sensible_per_modern_cpu_core * num_cores, 1/4 * heap size)
        max_sensible_yg_per_core_in_mb="100"
        max_sensible_yg_in_mb=`expr $max_sensible_yg_per_core_in_mb "*" $system_cpu_cores`
    
        desired_yg_in_mb=`expr $max_heap_size_in_mb / 4`
    
        if [ "$desired_yg_in_mb" -gt "$max_sensible_yg_in_mb" ]
        then
            HEAP_NEWSIZE="${max_sensible_yg_in_mb}M"
        else
            HEAP_NEWSIZE="${desired_yg_in_mb}M"
        fi
    }
    
    calculate_heap_sizes
    
    # Dynamically calculate parameters, for reference.
    Xms=$MAX_HEAP_SIZE
    Xmx=$MAX_HEAP_SIZE
    Xmn=$HEAP_NEWSIZE
    # Set for `JAVA_OPT`.
    JAVA_OPT="${JAVA_OPT} -server -Xms${Xms} -Xmx${Xmx} -Xmn${Xmn}"
    

    而docker默认隔离性不足,获取系统内存得到的是宿主机内存大小,导致内存不足启动失败(例如宿主机内存32G则计算结果为8G)

    解决

    1. 修改启动脚本
    2. 使用默认脚本,通过设置环境变量JAVA_OPT_EXT可以自定义堆栈参数
    • runserver-customize.sh / runbroker-customize.sh
    JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
    

    rocketmq-console部署参考

  • 相关阅读:
    移动开发 Native APP、Hybrid APP和Web APP介绍
    urllib与urllib2的学习总结(python2.7.X)
    fiddler及postman讲解
    接口测试基础
    UiAutomator2.0 和1.x 的区别
    adb shell am instrument 命令详解
    GT问题记录
    HDU 2492 Ping pong (树状数组)
    CF 567C Geometric Progression
    CF 545E Paths and Trees
  • 原文地址:https://www.cnblogs.com/luguojun/p/14294643.html
Copyright © 2011-2022 走看看