6.0.22, 6.0.22***guard-java21, 5.0.34, latest| 标签 | 说明 |
|---|---|
| latest | MigratoryData服务器最新版本镜像 |
<version> | 指定版本的MigratoryData服务器镜像(如6.0.22) |
MigratoryData Server是一款高可扩展的消息服务器,专为支持数百万用户的实时Web和移动应用设计并使用。该Docker镜像提供了MigratoryData Server的容器化部署方案,简化了服务器的安装、配置和扩展流程。
更多关于MigratoryData Server的信息,请访问[***]
!logo
要启动单个MigratoryData实例并允许客户端通过8800端口连接,请先安装Docker,然后运行以下命令:
console$ docker pull migratorydata/server:latest $ docker run -d --name my_migratorydata -p 8800:8800 migratorydata/server:latest
现在,您可以通过[***]访问并运行MigratoryData服务器提供的演示应用(yourhostname是安装该实例的机器的DNS名称或IP地址,需确保客户端可解析和访问)。
查看容器日志:
console$ docker logs my_migratorydata
停止并删除容器:
console$ docker stop my_migratorydata $ docker rm my_migratorydata
可通过以下方式自定义Docker容器中运行的MigratoryData服务器的各个方面。
通过设置MIGRATORYDATA_EXTRA_OPTS环境变量,可定义或覆盖默认配置文件中的参数,语法如下:
console-Dparameter=value
注意:参数和值均无需使用单引号或双引号,且值中不允许包含空格。完整参数列表请参见MigratoryData配置指南。
三个环境变量用于自定义Java选项:
MIGRATORYDATA_JAVA_GC_LOG_OPTS: 垃圾回收日志选项MIGRATORYDATA_JAVA_GC_OPTS: 垃圾收集器配置MIGRATORYDATA_JAVA_EXTRA_OPTS: 其他Java选项这些选项均有默认值,适用于大多数场景,通常无需额外配置。
要使用许可证密钥,通过额外选项覆盖默认配置文件中的LicenseKey参数:
console$ docker run --platform linux/amd64 -d -e MIGRATORYDATA_EXTRA_OPTS='-DLicenseKey=yourlicensekey' \ --name my_migratorydata -p 8800:8800 migratorydata/server:latest
其中yourlicensekey是从MigratoryData获取的评估、测试或生产许可证密钥。
要启用JMX监控,需定义JMX相关参数并将JMX端口映射到主机:
console$ docker run --platform linux/amd64 -d \ -e MIGRATORYDATA_EXTRA_OPTS='-DLicenseKey=yourlicensekey -DMonitor=JMX -DMonitorUsername=admin -DMonitorPassword=pass \ -DMonitorJMX.Listen=*:3000 -DMonitorJMX.Authentication=true -DMonitorJMX.Encryption=false' \ --name my_migratorydata -p 8800:8800 -p 3000:3000 migratorydata/server:latest
现在,您可以使用JMX客户端通过yourhostname:3000连接,凭据为admin/pass。若使用Java的jconsole,需通过MIGRATORYDATA_JAVA_EXTRA_OPTS添加额外Java选项:
console$ docker run --platform linux/amd64 -d \ -e MIGRATORYDATA_EXTRA_OPTS='-DLicenseKey=yourlicensekey -DMonitor=JMX -DMonitorUsername=admin -DMonitorPassword=pass \ -DMonitorJMX.Listen=*:3000 -DMonitorJMX.Authentication=true -DMonitorJMX.Encryption=false' \ -e MIGRATORYDATA_JAVA_EXTRA_OPTS='-Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=yourhostname' \ --name my_migratorydata -p 8800:8800 -p 3000:3000 migratorydata/server:latest
除了可通过docker logs my_migratorydata查看的标准输出日志外,镜像还将日志写入默认路径/migratorydata/logs。可通过以下方式修改日志路径:
console$ docker run --platform linux/amd64 -d -e MIGRATORYDATA_EXTRA_OPTS='-DLicenseKey=yourlicensekey \ -DLogFolder=/myvolume/migratorydata/logs' -p 8800:8800 migratorydata/server:latest
要记录访问日志,使用-DAccessLog=true参数:
console$ docker run --platform linux/amd64 -d -e MIGRATORYDATA_EXTRA_OPTS='-DLicenseKey=yourlicensekey \ -DLogFolder=/myvolume/migratorydata/logs \ -DAccessLog=true' -p 8800:8800 migratorydata/server:latest
要部署一个或多个MigratoryData服务器扩展,需将包含扩展的卷挂载到标准扩展目录/migratorydata/extensions。
例如,假设您开发了一个权限扩展extension.jar并部署到持久化目录/myvolume/migratorydata/extensions,运行以下命令加载该扩展:
console$ docker run --platform linux/amd64 -d -e MIGRATORYDATA_EXTRA_OPTS='-DLicenseKey=yourlicensekey -DEntitlement=Custom' \ -v /myvolume/migratorydata/extensions:/migratorydata/extensions \ --name mymigratorydata -p 8800:8800 migratorydata/server:latest
或者,通过构建新镜像部署扩展:
dockerfileFROM migratorydata/server:latest COPY extension.jar /migratorydata/extensions/extension.jar
构建并运行:
console$ docker build -t custom_migratorydata . $ docker run --platform linux/amd64 --name my_custom_migratorydata -d custom_migratorydata
以下示例配置用于在Kubernetes上部署包含三个MigratoryData服务器的集群。
yaml# # 供MigratoryData集群与客户端通信的Service # apiVersion: v1 kind: Service metadata: name: migratorydata-cs # 取消以下两行注释以使用Application Gateway部署集群 #annotations: # service.beta.kubernetes.io/azure-load-***-internal: "true" labels: app: migratorydata spec: type: Load*** ports: - name: client-port port: 80 protocol: TCP targetPort: 8800 selector: app: migratorydata --- # # 用于集群内部通信的Headless Service # apiVersion: v1 kind: Service metadata: name: migratorydata-hs labels: app: migratorydata spec: clusterIP: None ports: - name: inter-cluster1 port: 8801 protocol: TCP targetPort: 8801 - name: inter-cluster2 port: 8802 protocol: TCP targetPort: 8802 - name: inter-cluster3 port: 8803 protocol: TCP targetPort: 8803 - name: inter-cluster4 port: 8804 protocol: TCP targetPort: 8804 selector: app: migratorydata --- apiVersion: policy/v1beta1 kind: PodDisruptionBudget metadata: name: migratorydata-pdb spec: minAvailable: 3 # 该值必须大于或等于种子成员数量 🅐 selector: matchLabels: app: migratorydata --- apiVersion: apps/v1 kind: StatefulSet metadata: name: migratorydata spec: selector: matchLabels: app: migratorydata serviceName: migratorydata-hs replicas: 3 # 期望的集群成员数量 🅑 updateStrategy: type: RollingUpdate podManagementPolicy: OrderedReady template: metadata: labels: app: migratorydata spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchExpressions: - key: "app" operator: In values: - migratorydata topologyKey: "kubernetes.io/hostname" containers: - name: migratorydata-cluster imagePullPolicy: Always image: migratorydata/server:latest env: - name: MIGRATORYDATA_JAVA_EXTRA_OPTS value: "-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap" - name: MIGRATORYDATA_EXTRA_OPTS value: "-DMemory=128MB \ -DClusterDeliveryMode=Guaranteed \ -DLogLevel=INFO \ -DX.ConnectionOffload=true \ -DClusterSeedMemberCount=3" # 定义种子成员数量 🅒 command: - bash - "-c" - | set -x HOST=`hostname -s` DOMAIN=`hostname -d` CLUSTER_PORT=8801 MAX_REPLICAS=5 # 定义集群成员的最大数量 🅓 if [[ $HOST =~ (.*)-([0-9]+)$ ]]; then NAME=${BASH_REMATCH[1]} fi CLUSTER_MEMBER_LISTEN=$HOST.$DOMAIN:$CLUSTER_PORT echo $CLUSTER_MEMBER_LISTEN MIGRATORYDATA_EXTRA_OPTS="$MIGRATORYDATA_EXTRA_OPTS -DClusterMemberListen=$CLUSTER_MEMBER_LISTEN" CLUSTER_MEMBERS="" for (( i=1; i < $MAX_REPLICAS; i++ )) do CLUSTER_MEMBERS="$CLUSTER_MEMBERS$NAME-$((i-1)).$DOMAIN:$CLUSTER_PORT," done CLUSTER_MEMBERS="$CLUSTER_MEMBERS$NAME-$((MAX_REPLICAS-1)).$DOMAIN:$CLUSTER_PORT" echo $CLUSTER_MEMBERS MIGRATORYDATA_EXTRA_OPTS="$MIGRATORYDATA_EXTRA_OPTS -DClusterMembers=$CLUSTER_MEMBERS" echo $MIGRATORYDATA_EXTRA_OPTS export MIGRATORYDATA_EXTRA_OPTS ./start-migratorydata.sh resources: requests: memory: "256Mi" cpu: "0.5" ports: - name: client-port containerPort: 8800 - name: inter-cluster1 containerPort: 8801 - name: inter-cluster2 containerPort: 8802 - name: inter-cluster3 containerPort: 8803 - name: inter-cluster4 containerPort: 8804 readinessProbe: tcpSocket: port: 8800 initialDelaySeconds: 10 periodSeconds: 5 livenessProbe: tcpSocket: port: 8800 initialDelaySeconds: 10 periodSeconds: 5
上述清单包含Headless Service、客户端Service、PodDisruptionBudget和StatefulSet。客户端Service用于处理客户端连接,Headless Service提供集群实例的DNS记录以支持内部通信。
部署集群:
migratorydata-cluster.yamlconsole$ kubectl apply -f migratorydata-cluster.yaml
验证部署:
console$ kubectl get pods NAME READY STATUS RESTARTS AGE migratorydata-0 1/1 Running 0 2m52s migratorydata-1 1/1 Running 0 2m40s migratorydata-2 1/1 Running 0 2m25s
console$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 37m migratorydata-cs Load*** 10.0.58.189 YourExternalIP 80:31596/TCP 4m8s migratorydata-hs ClusterIP None <none> 8801/TCP,8802/TCP,8803/TCP,8804/TCP 4m7s
现在,您可以通过[***]访问集群中每个MigratoryData服务器提供的演示应用(YourExternalIP是Kubernetes分配给客户端Service的外部IP,可通过kubectl get svc获取)。
在阅读本节前,建议先了解MigratoryData的集群功能。
上述示例YAML中,通过shell变量MAX_REPLICAS🅓定义了集群最大成员数为5,但replicas字段🅑仅创建了3个成员,满足minAvailable字段🅐的最小要求。同时,通过ClusterSeedMemberCount参数🅒配置了3个种子节点,满足minAvailable值大于或等于种子成员数的要求。
可根据系统负载手动或自动添加/移除集群成员(最多5个)。
通过修改replicas字段🅑扩展集群(最多5个成员):
console$ kubectl scale statefulsets migratorydata --replicas=5
负载降低时减少成员:
console$ kubectl scale statefulsets migratorydata --replicas=4
注意:replicas值不能大于MAX_REPLICAS🅓,也不能小于minAvailable🅐。
若系统负载变化较快,可使用Kubernetes的自动扩展功能。Kubernetes可监控CPU使用率并自动调整replicas值。
例如,当CPU使用率超过50%时扩展至最多5个成员,低于50%时缩减至最少3个成员:
console$ kubectl autoscale statefulset migratorydata --cpu-percent=50 --min=3 --max=5
或使用YAML清单:
yamlapiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: migratorydata-autoscale spec: maxReplicas: 5 minRe


来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429