这几天对开发服务器中的 k8s和相关模块 进行升级,做个记录

环境,与系统

系统:centos 7.6

内核: 5.1.9-1.el7.elrepo.x86_64

Kubernetes(K8s) 1.14.3

服务器IP:192.168.0.254

服务器IP 说明

如果更改了服务器IP 为其他IP,那么请全局全部替换成你改的IP
fox.风

如何安装 k8s

请看 最近写的一篇文章,

https://blog.csdn.net/fenglailea/article/details/88745642
常用 k8s 命令
https://foxwho.blog.csdn.net/article/details/92137467

服务器资源限制

对CPU,内存都做了限制,请自行针对修改

没有使用持久化存储,这里直接使用宿主机存储,如有需要,请自行增加

目录

请把项目放置到 /www/k8s/foxdev/ 目录下,所有都是基于此目录
或者请看 下面一节的 拉取代码

拉取代码

mkdir -p /www/k8s/
cd /www/k8s/git clone https://github.com/foxiswho/k8s-nacos-sentinel-rocketmq-zipkin-elasticsearch-redis-mysql.git foxdevcd foxdev

以下是 独立部署 相关模块

k8s rocketmq 独立部署

rocketmq 采用 server:1主,Broker:1主1从模式

带有 rocketmq-console web 简单管理界面

相关参数说明

对外端口:

server: 宿主机IP:30876
ui:(console) 宿主机IP:30879

端口:

server: 宿主机IP:9876
Broker:(master) 宿主机IP:10909
Broker:(master) 宿主机IP:10911
Broker:(master) 宿主机IP:10912
Broker:(slave) 宿主机IP:10919
Broker:(slave) 宿主机IP:10921
Broker:(slave) 宿主机IP:10922
ui:(console) 宿主机IP:8180

broker中3个端口说明

  1. listenPort=10911 Broker 对外服务的监听端口
  2. haListenPort=10912 haService中使用 默认值为:listenPort + 1
  3. fastListenPort=10909 主要用于slave同步master listenPort - 2

XX-rc.yml文件启动参数autoCreateTopicEnable=true,表示 允许 Broker 自动创建Topic

日志相关目录

执行命令时候,会自动创建 以下7个目录,部署时候要映射 pod内部目录

/www/k8s/foxdev/rocketmq/logs/
/www/k8s/foxdev/rocketmq/logs-b/
/www/k8s/foxdev/rocketmq/logs-b-s/
/www/k8s/foxdev/rocketmq/logs-ui//www/k8s/foxdev/rocketmq/store/
/www/k8s/foxdev/rocketmq/store-b/
/www/k8s/foxdev/rocketmq/store-b-s/

logs: server 日志目录
logs-b: Broker(master) 日志目录
logs-b-s: Broker(slave) 日志目录
logs-ui: console 日志目录

store: server store 目录
store-b: Broker(master) store 目录
store-b-s: Broker(slave) store 目录

独立部署 rocketmq 操作

直接执行 rocketmq 目录下 rmq.start.sh 即可


cd ./rocketmq/ && ./rmq.start.sh

大约几分钟后,使用rocketmq或者访问浏览器http://192.168.0.254:30879,即可看到 rocketmq-console的管理界面

http://192.168.0.254:30879

使用命令查看相关信息

kubectl get svc,pod,cs,rc或
kubectl get svckubectl get podkubectl get cskubectl get rc

查看pod

kubectl get pod

输出

NAME                 READY   STATUS    RESTARTS   AGE
rmqbroker-0          1/1     Running   0          3h5m
rmqbroker-slave-0    1/1     Running   0          3h5m
rmqui-0              1/1     Running   0          3h5m
rocketmq-0           1/1     Running   0          3h5m

查看 service

kubectl get svc

输出

NAME              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                           AGE
rmqbroker         NodePort    10.1.183.152   <none>        10909:10909/TCP,10911:10911/TCP,10912:10912/TCP   3h59m
rmqbroker-slave   NodePort    10.1.128.180   <none>        10919:10919/TCP,10921:10921/TCP,10922:10922/TCP   3h7m
rmqui             NodePort    10.1.95.26     <none>        8080:8180/TCP                                     3h7m
rocketmq          NodePort    10.1.128.90    <none>        9876:9876/TCP                                     3h7m

在开发服务器上部署成功,有问题的,可以联系我

资源编排文件

后缀为-rc.yml 是 StatefulSet/Pod 文件
后缀为-service.yml 是 service 文件

开头rocketmq 是 rocketmq server
开头broker 是 rocketmq broker
开头broker-s 是 rocketmq broker slave ,其他的是 master

开头ui 是 rocketmq console 简单页面管理

rocketmq server 资源编排

rocketmq-rc.yml

# 版本
apiVersion: apps/v1
# 资源对象
kind: StatefulSet
metadata:#名称name: rocketmq#标签labels:#标签名和标签值app: rocketmq#命名空间
#  namespace: default
spec:#服务名称serviceName: rocketmqreplicas: 1selector:#匹配标签matchLabels:#标签名和值app: rocketmqtemplate:metadata:labels:app: rocketmqspec:containers:#容器名称- name: rocketmq# 镜像image: foxiswho/rocketmq:server#Always:不管镜像是否存在都会进行一次拉取imagePullPolicy: Always#资源限制resources:limits:cpu: 250mmemory: 1000Mirequests:cpu: 100mmemory: 768Mi#环境变量env:#设置时区- name: TZvalue: Asia/Shanghai- name: JAVA_OPTvalue: -Duser.home=/opt- name: JAVA_OPT_EXTvalue: -server -Xms768m -Xmx768m -Xmn256mports:# 容器端口- containerPort: 9876# 加载外部券路径等volumeMounts:- name: vol-logsmountPath: /opt/logs- name: vol-init-dmountPath: /opt/storevolumes:- name: vol-logshostPath:path: /www/k8s/foxdev/rocketmq/logstype: Directory- name: vol-init-dhostPath:path: /www/k8s/foxdev/rocketmq/storetype: Directory

rocketmq-service.yml

apiVersion: v1
kind: Service
metadata:#  namespace: defaultname: rocketmqlabels:app: rocketmq
spec:#nodePort 是提供给集群外部客户访问service的入口type: NodePortports:- port: 9876targetPort: 9876# 外部访问端口nodePort: 30876selector:app: rocketmq

rocketmq broker master 资源编排

broker-rc.yml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: rmqbrokerlabels:app: rmqbroker
#  namespace: default
spec:serviceName: rmqbrokerreplicas: 1selector:matchLabels:app: rmqbrokertemplate:metadata:labels:app: rmqbrokerspec:containers:- name: rmqbrokerimage: foxiswho/rocketmq:brokerimagePullPolicy: Alwaysresources:limits:cpu: 250mmemory: 1000Mirequests:cpu: 100mmemory: 512Mienv:- name: TZvalue: Asia/Shanghai- name: NAMESRV_ADDRvalue: rocketmq:9876- name: JAVA_OPT_EXTvalue:  -Duser.home=/opt -server -Xms512m -Xmx512m -Xmn128mcommand: ["mqbroker","-c","/etc/rocketmq/broker.conf","-n","rocketmq:9876","autoCreateTopicEnable=true"]ports:- containerPort: 10909- containerPort: 10911- containerPort: 10912volumeMounts:- name: vol-logsmountPath: /opt/logs- name: vol-storemountPath: /opt/store- name: vol-brokermountPath: /etc/rocketmq/broker.confvolumes:- name: vol-logshostPath:path: /www/k8s/foxdev/rocketmq/logs-btype: Directory- name: vol-storehostPath:path: /www/k8s/foxdev/rocketmq/store-btype: Directory- name: vol-brokerhostPath:path: /www/k8s/foxdev/rocketmq/conf/broker.conftype: File

broker-service.yml

apiVersion: v1
kind: Service
metadata:#  namespace: defaultname: rmqbrokerlabels:app: rmqbroker
spec:#type: NodePortports:- port: 10909targetPort: 10909#nodePort: 10909name: slave-master- port: 10911targetPort: 10911#nodePort: 10911name: listen- port: 10912targetPort: 10912#nodePort: 10912name: ha-serviceselector:app: rmqbroker

rocketmq broker slave 资源编排

broker-s-rc.yml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: rmqbroker-slavelabels:app: rmqbroker-slave
#  namespace: default
spec:serviceName: rmqbroker-slavereplicas: 1selector:matchLabels:app: rmqbroker-slavetemplate:metadata:labels:app: rmqbroker-slavespec:containers:- name: rmqbroker-slaveimage: foxiswho/rocketmq:brokerimagePullPolicy: Alwaysresources:limits:cpu: 250mmemory: 1000Mirequests:cpu: 100mmemory: 512Mienv:- name: TZvalue: Asia/Shanghai- name: NAMESRV_ADDRvalue: rocketmq:9876- name: JAVA_OPT_EXTvalue:  -Duser.home=/opt -server -Xms512m -Xmx512m -Xmn128mcommand: ["mqbroker","-c","/etc/rocketmq/broker-s.conf","-n","rocketmq:9876","autoCreateTopicEnable=true"]ports:- containerPort: 10919- containerPort: 10921- containerPort: 10922volumeMounts:- name: vol-logsmountPath: /opt/logs- name: vol-storemountPath: /opt/store- name: vol-broker-smountPath: /etc/rocketmq/broker-s.confvolumes:- name: vol-logshostPath:path: /www/k8s/foxdev/rocketmq/logs-b-stype: Directory- name: vol-storehostPath:path: /www/k8s/foxdev/rocketmq/store-b-stype: Directory- name: vol-broker-shostPath:path: /www/k8s/foxdev/rocketmq/conf/broker-s.conftype: File

broker-s-service.yml

apiVersion: v1
kind: Service
metadata:#  namespace: defaultname: rmqbroker-slavelabels:app: rmqbroker-slave
spec:#type: NodePortports:- port: 10919targetPort: 10919#nodePort: 10919name: slave-master- port: 10921targetPort: 10921#nodePort: 10921name: broker-listen- port: 10922targetPort: 10922#nodePort: 10922name: ha-serviceselector:app: rmqbroker-slave

rocketmq ui console 资源编排

ui-rc.yml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: rmquilabels:app: rmqui
#  namespace: default
spec:serviceName: rmquireplicas: 1selector:matchLabels:app: rmquitemplate:metadata:labels:app: rmquispec:containers:- name: rmquiimage: styletang/rocketmq-console-ngimagePullPolicy: Alwaysresources:limits:cpu: 450mmemory: 1768Mirequests:cpu: 100mmemory: 768Mienv:- name: TZvalue: Asia/Shanghai- name: JAVA_OPTSvalue: -Drocketmq.namesrv.addr=rocketmq:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Duser.home=/root  -Xms768m -Xmx768mports:- containerPort: 8080volumeMounts:- name: vol-logsmountPath: /root/logsvolumes:- name: vol-logshostPath:path: /www/k8s/foxdev/rocketmq/logs-uitype: Directory

ui-service.yml

apiVersion: v1
kind: Service
metadata:#  namespace: defaultname: rmquilabels:app: rmqui
spec:type: NodePortports:- port: 8080targetPort: 8080nodePort: 30879selector:app: rmqui

broker 配置文件

两个文件只有以下配置不一样,其他都是一样的

#0 表示Master,>0 表示Slave
brokerId=1
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#Broker 对外服务的监听端口
listenPort=10921

broker master 配置文件

broker.conf

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.#所属集群名字
brokerClusterName=DefaultCluster#broker名字,注意此处不同的配置文件填写的不一样,如果在broker-a.properties使用:broker-a,
#在broker-b.properties使用:broker-b
brokerName=broker-a#0 表示Master,>0 表示Slave
brokerId=0#nameServer地址,分号分割
#namesrvAddr=rocketmq-0:9876;rocketmq-1:9876
namesrvAddr=rocketmq:9876#启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed
# 解决方式1 加上一句producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP
brokerIP1=192.168.0.254#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 !!!这里仔细看是false,false,false
#原因下篇博客见~ 哈哈哈哈
autoCreateTopicEnable=true#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true#Broker 对外服务的监听端口
listenPort=10911
#haService中使用  默认值为:listenPort + 1
#haListenPort=10912
#主要用于slave同步master  listenPort - 2
#fastListenPort=10909#删除文件时间点,默认凌晨4点
deleteWhen=04#文件保留时间,默认48小时
fileReservedTime=120#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/opt/store
#commitLog 存储路径
#storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
#消费队列存储
#storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
#消息索引存储路径
#storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
#checkpoint 文件存储路径
#storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
#abort 文件存储路径
#abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
#限制的消息大小
maxMessageSize=65536#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

broker slave 配置文件

broker.conf

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.#所属集群名字
brokerClusterName=DefaultCluster#broker名字,注意此处不同的配置文件填写的不一样,如果在broker-a.properties使用:broker-a,
#在broker-b.properties使用:broker-b
brokerName=broker-a#0 表示Master,>0 表示Slave
brokerId=1#nameServer地址,分号分割
#namesrvAddr=rocketmq-0:9876;rocketmq-1:9876
namesrvAddr=rocketmq:9876#启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed
# 解决方式1 加上一句producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP
brokerIP1=192.168.0.254#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 !!!这里仔细看是false,false,false
#原因下篇博客见~ 哈哈哈哈
autoCreateTopicEnable=true#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true#Broker 对外服务的监听端口
listenPort=10921
#haService中使用  默认值为:listenPort + 1
#haListenPort=10912
#主要用于slave同步master  listenPort - 2
#fastListenPort=10909#删除文件时间点,默认凌晨4点
deleteWhen=04#文件保留时间,默认48小时
fileReservedTime=120#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/opt/store
#commitLog 存储路径
#storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
#消费队列存储
#storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
#消息索引存储路径
#storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
#checkpoint 文件存储路径
#storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
#abort 文件存储路径
#abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
#限制的消息大小
maxMessageSize=65536#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

在开发服务器上部署成功,有问题的,可以联系我

源文件

https://github.com/foxiswho/k8s-nacos-sentinel-rocketmq-zipkin-elasticsearch-redis-mysql/tree/master/rocketmq

Centos7 Kubernetes(K8s) k8s 开发 单服务器部署 rocketmq相关推荐

  1. 单服务器部署CTFd+whale踩坑

    单服务器部署CTFd+whale踩坑 环境: os: ubuntu16 Docker: Version: 20.10.7 Docker-compose: version v2.12.1 参考: htt ...

  2. openstack 系列: 基于CentOS7系统使用packstack工具单节点部署openstacktrain---Part-I安装简易命令

    1说明 本人非linux专业人士,更不是云计算专家 部署过程是从各大博客自己百度知道 各种搜索排查,硬是搭起了train环境 过程纠结,先是在win 10 vmware 上安装centos7 再基于c ...

  3. Kubernetes多运营商云服务器部署(kubeadm+ipvs+flannel)

    服务器:轻量级阿里云+轻量级腾讯云 系统要求:OS7 (我使用的是7.6 命令:cat /etc/centos-release) 本内容适用于已经对整个搭建过程有一定了解的人来看,每一步没有做很多解释 ...

  4. 啃K8s之快速入门,以及哭吧S(k8s)单节点部署

    啃K8s之快速入门,以及哭吧S(k8s)单节点部署 一:Kubernets概述 1.1:Kubernets是什么? 1.2:Kubernets特性 1.3:Kubernets群集架构与组件 1.3.1 ...

  5. 单服务器配置部署Visual Studio 2005 Team Foundation Server步骤

    最近我所带的开发部部门要采用TFS管理,另外TFS也是在微软的MSF组队模型中非常重要的: Microsoft 解决方案框架 (MSF) 组队模型描述了微软如何通过构建人员以及人员的行为来实现项目成功 ...

  6. 认识kubernetes(k8s),k8s单节点etcd部署

    认识kubernetes(k8s),k8s单节点etcd部署 一.k8s概述 (一).k8s简介 (二).k8s特性 (三).k8s群集架构与组件 (四).k8s核心概念 (五).k8s三种部署方式 ...

  7. centos7 下google Kubernetes(k8s)集群安装部署

    centos7 下google Kubernetes(k8s)集群安装部署 简介 安装环境 安装前准备 ECTD集群配置 命令含义: master节点配置 1.安装kubernetes和etcd 2. ...

  8. Kubernetes(k8s)快速入门和环境部署

    目录 1. Kubernetes介绍 1.1 应用部署方式演变 1.2 kubernetes简介 1.3 kubernetes组件 1.4 kubernetes概念 2. kubernetes集群环境 ...

  9. Kubernetes K8S之kube-prometheus概述与部署

    Kubernetes K8S之kube-prometheus概述与部署 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7. ...

  10. 某系统有6台输出设备 有多个进程均需要使用2台_从零开始学K8s: 2.开发与部署方式的演变...

    近年来,应用开发和部署发生了一些变化.这些变化是由两方面促成的,一方面是大型单体应用被拆解为更多小型的微服务,另一方面是应用程序运行所依赖的基础架构发生了变化.理解这些变化,将使我们更好的看到使用k8 ...

最新文章

  1. 调试H3C MSR 20-20 PPPOE拨号
  2. 在生产环境中使用 Sentinel
  3. Cell封面文章:跑步短短10分钟,身体近10000个分子大变样!蛋白组学破解运动有益健康之谜...
  4. 【AI视野·今日CV 计算机视觉论文速览 第214期】Mon, 7 Jun 2021
  5. 为什么那么多自学WEB前端的人后来都放弃了?
  6. 金融评分卡项目—6.互联网金融业贷款申请评分卡介绍
  7. 拓端tecdat|R语言时变面板平滑转换回归模型TV-PSTR分析债务水平对投资的影响
  8. 计算机 管理 被停用,如果电脑上出现“你的账户已被停用请向系统管理员咨询”怎么办?...
  9. postgres的brin索引
  10. 素数表(Eratosthenes)
  11. php如何把乘法口诀表嵌入表格中,php编辑表格生成器,for循环编写乘法口诀
  12. 腾讯云服务器挂载云硬盘
  13. CTF入门学习思维导图
  14. 压测--部署jp@gc - PerfMon Metrics Collector
  15. i5 12500H性能怎么样 相当于什么水平
  16. while语句和for嵌套c语言,关于循环的嵌套,说法错误的是() 答案:三种循环(while循环、do-while循环和for循 环)不可以互相嵌套。...
  17. C#调用OFFICE转换WORD,EXCEL,PPT文件为PDF
  18. 在openssl申请证书时遇到的问题解决
  19. iOS 开启QQ临时会话
  20. 刻录原版系统光盘(用软碟通)

热门文章

  1. Cocos2d-x 3.0 动作
  2. 网站加速--Cache为王篇
  3. 关于性格内向者的10个误解,献给奋战在一线的程序员
  4. 拓端tecdat|R语言混合正态分布极大似然估计和EM算法
  5. 拓端tecdat|tableau的骑行路线地理数据可视化
  6. 拓端tecdat|用SPSS估计HLM多层(层次)线性模型
  7. Linux-eval命令
  8. mysql数据库中更新数据表用以下哪一项_删除数据表用以下哪一项()_学小易找答案...
  9. 基于最大正向匹配算法的中文分词
  10. opencv判断读取图片是否为空