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部署参考

  • 相关阅读:
    10.16作业
    day0402作业
    day04作业
    10.13作业
    JVM原理最全、清晰、通俗讲解
    Java的SimpleDateFormat,DateTimeFormatter:YYYY与yyyy
    从源码层面理解 ArrayList 扩容策略
    哈夫曼树
    面向对象三大基本特性,五大基本原则
    数据结构
  • 原文地址:https://www.cnblogs.com/luguojun/p/14294643.html
Copyright © 2011-2022 走看看