openEuler 22.03 LTS x86_64 cephadm 部署ceph16.2.14 【2】添加mon

news2024/11/17 13:51:56

接上篇

openEuler 22.03 LTS x86_64 cephadm 部署ceph18.2.0 未完成 笔记-CSDN博客

故障 /usr/libexec/podman/catatonit: no such file or directory

[root@node-1 ~]# cephadm bootstrap --mon-ip 10.47.76.94 --skip-pull
Verifying podman|docker is present...
Verifying lvm2 is present...
Verifying time synchronization is in place...
Unit chronyd.service is enabled and running
Repeating the final host check...
podman (/usr/bin/podman) version 3.4.4 is present
systemctl is present
lvcreate is present
Unit chronyd.service is enabled and running
Host looks OK
Cluster fsid: 18788cd6-8825-11ee-9f59-08002726ce7d
Verifying IP 10.47.76.94 port 3300 ...
Verifying IP 10.47.76.94 port 6789 ...
Mon IP `10.47.76.94` is in CIDR network `10.47.76.0/24`
- internal network (--cluster-network) has not been provided, OSD replication will default to the public_network
Non-zero exit code 125 from /usr/bin/podman run --rm --ipc=host --stop-signal=SIGTERM --net=host --entrypoint ceph --init -e CONTAINER_IMAGE=quay.io/ceph/ceph:v16 -e NODE_NAME=node-1 -e CEPH_USE_RANDOM_NONCE=1 quay.io/ceph/ceph:v16 --version
ceph: stderr Error: container-init binary not found on the host: stat /usr/libexec/podman/catatonit: no such file or directory
Traceback (most recent call last):
  File "/usr/sbin/cephadm", line 8571, in <module>
    main()
  File "/usr/sbin/cephadm", line 8559, in main
    r = ctx.func(ctx)
  File "/usr/sbin/cephadm", line 1787, in _default_image
    return func(ctx)
  File "/usr/sbin/cephadm", line 4257, in command_bootstrap
    image_ver = CephContainer(ctx, ctx.image, 'ceph', ['--version']).run().strip()
  File "/usr/sbin/cephadm", line 3420, in run
    out, _, _ = call_throws(self.ctx, self.run_cmd(),
  File "/usr/sbin/cephadm", line 1467, in call_throws
    raise RuntimeError('Failed command: %s' % ' '.join(command))
RuntimeError: Failed command: /usr/bin/podman run --rm --ipc=host --stop-signal=SIGTERM --net=host --entrypoint ceph --init -e CONTAINER_IMAGE=quay.io/ceph/ceph:v16 -e NODE_NAME=node-1 -e CEPH_USE_RANDOM_NONCE=1 quay.io/ceph/ceph:v16 --version

参考方案

container-init binary not found on the host: stat /usr/libexec/podman/catatonit: no such file or directory · Issue #54 · mgoltzsche/podman-static · GitHub

解决

wget https://github.com/openSUSE/catatonit/releases/download/v0.2.0/catatonit.x86_64
cp catatonit.x86_64 /usr/libexec/podman/catatonit
chmod +x /usr/libexec/podman/catatonit

bootstrap

cephadm bootstrap --mon-ip 10.47.76.94 --skip-pull

[root@node-1 ~]# cephadm bootstrap --mon-ip 10.47.76.94 --skip-pull
Verifying podman|docker is present...
Verifying lvm2 is present...
Verifying time synchronization is in place...
Unit chronyd.service is enabled and running
Repeating the final host check...
podman (/usr/bin/podman) version 3.4.4 is present
systemctl is present
lvcreate is present
Unit chronyd.service is enabled and running
Host looks OK
Cluster fsid: 4466c6c0-8828-11ee-b74e-08002726ce7d
Verifying IP 10.47.76.94 port 3300 ...
Verifying IP 10.47.76.94 port 6789 ...
Mon IP `10.47.76.94` is in CIDR network `10.47.76.0/24`
- internal network (--cluster-network) has not been provided, OSD replication will default to the public_network
Ceph version: ceph version 16.2.14 (238ba602515df21ea7ffc75c88db29f9e5ef12c9) pacific (stable)
Extracting ceph user uid/gid from container image...
Creating initial keys...
Creating initial monmap...
Creating mon...
firewalld ready
Enabling firewalld service ceph-mon in current zone...
Waiting for mon to start...
Waiting for mon...
mon is available
Assimilating anything we can from ceph.conf...
Generating new minimal ceph.conf...
Restarting the monitor...
Setting mon public_network to 10.47.76.0/24
Wrote config to /etc/ceph/ceph.conf
Wrote keyring to /etc/ceph/ceph.client.admin.keyring
Creating mgr...
Verifying port 9283 ...
firewalld ready
Enabling firewalld service ceph in current zone...
firewalld ready
Enabling firewalld port 9283/tcp in current zone...
Waiting for mgr to start...
Waiting for mgr...
mgr not available, waiting (1/15)...
mgr not available, waiting (2/15)...
mgr is available
Enabling cephadm module...
Waiting for the mgr to restart...
Waiting for mgr epoch 5...
mgr epoch 5 is available
Setting orchestrator backend to cephadm...
Generating ssh key...
Wrote public SSH key to /etc/ceph/ceph.pub
Adding key to root@localhost authorized_keys...
Adding host node-1...
Deploying mon service with default placement...
Deploying mgr service with default placement...
Deploying crash service with default placement...
Deploying prometheus service with default placement...
Deploying grafana service with default placement...
Deploying node-exporter service with default placement...
Deploying alertmanager service with default placement...
Enabling the dashboard module...
Waiting for the mgr to restart...
Waiting for mgr epoch 9...
mgr epoch 9 is available
Generating a dashboard self-signed certificate...
Creating initial admin user...
Fetching dashboard port number...
firewalld ready
Enabling firewalld port 8443/tcp in current zone...
Ceph Dashboard is now available at:

         URL: https://node-1:8443/
        User: admin
    Password: uqmwzrvev2

Enabling client.admin keyring and conf on hosts with "admin" label
You can access the Ceph CLI with:

    sudo /usr/sbin/cephadm shell --fsid 4466c6c0-8828-11ee-b74e-08002726ce7d -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring

Please consider enabling telemetry to help improve Ceph:

    ceph telemetry on

For more information see:

    https://docs.ceph.com/docs/pacific/mgr/telemetry/

Bootstrap complete.
 

dashboard

启用ceph cli(本质上是进入ceph容器)

[root@node-1 ~]# cephadm shell
Inferring fsid 4466c6c0-8828-11ee-b74e-08002726ce7d
Using recent ceph image quay.io/ceph/ceph@sha256:c00e089064cc7afd4db454ac645cc4d760f2eae86eb73655124abde9bb9058fb
[ceph: root@node-1 /]# ceph -s
  cluster:
    id:     4466c6c0-8828-11ee-b74e-08002726ce7d
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 1 daemons, quorum node-1 (age 2h)
    mgr: node-1.tmiabs(active, since 2h)
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:     
 
 

可以看到目前有两个容器

[root@node-1 ~]# podman ps
CONTAINER ID  IMAGE                  COMMAND               CREATED      STATUS          PORTS       NAMES
b647a11ed239  quay.io/ceph/ceph:v16  -n mon.node-1 -f ...  2 hours ago  Up 2 hours ago              ceph-4466c6c0-8828-11ee-b74e-08002726ce7d-mon-node-1
727bde63ebbc  quay.io/ceph/ceph:v16  -n mgr.node-1.tmi...  2 hours ago  Up 2 hours ago              ceph-4466c6c0-8828-11ee-b74e-08002726ce7d-mgr-node-1-tmia

添加节点

配置免密登录(容器内)

[root@node-1 ~]# cephadm shell
Inferring fsid 4466c6c0-8828-11ee-b74e-08002726ce7d
Using recent ceph image quay.io/ceph/ceph@sha256:c00e089064cc7afd4db454ac645cc4d760f2eae86eb73655124abde9bb9058fb

[ceph: root@node-1 ~]# ceph cephadm get-pub-key > ~/ceph.pub
[ceph: root@node-1 ~]# ssh-copy-id -f -i ~/ceph.pub root@10.47.76.95

[ceph: root@node-1 ~]# ssh-copy-id -f -i ~/ceph.pub root@10.47.76.96

新节点安装podman

同步离线安装包

[root@node-1 ~]# rsync -avr -P rpmbuild/RPMS node-2:~/rpmbuild/

[root@node-1 ~]# rsync -avr -P rpmbuild/RPMS node-3:~/rpmbuild/
[root@node-1 ~]# rsync -avr -P ref node-2:~/

[root@node-1 ~]# rsync -avr -P ref node-3:~/

安装podman及依赖

[root@node-2 ~]# rpm -ivUh rpmbuild/RPMS/x86_64/*.rpm rpmbuild/RPMS/noarch/*.rpm ref/*.rpm
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:protobuf-3.14.0-6.oe2203         ################################# [  4%]
   2:protobuf-compiler-3.14.0-6.oe2203################################# [  8%]
   3:protobuf-c-1.4.0-2.oe2203        ################################# [ 12%]
   4:yajl-2.1.0-18.oe2203             ################################# [ 16%]
   5:libnet-1.2-1.oe2203              ################################# [ 20%]
   6:criu-3.16.1-2.oe2203             ################################# [ 24%]
   7:crun-1.4.5-1                     ################################# [ 28%]
Creating group dnsmasq with gid 987.
Creating user dnsmasq (Dnsmasq DHCP and DNS server) with uid 987 and gid 987.
   8:dnsmasq-2.86-2.oe2203            ################################# [ 32%]
   9:container-selinux-2:2.138-4.oe220################################# [ 36%]
uavc:  op=load_policy lsm=selinux seqno=3 res=1  10:containers-common-1:1.5.2-3.oe220################################# [ 40%]
  11:containernetworking-plugins-1.0.1################################# [ 44%]
  12:podman-gvproxy-1:3.4.4-1         ################################# [ 48%]
  13:podman-plugins-1:3.4.4-1         ################################# [ 52%]
  14:podman-debugsource-1:3.4.4-1     ################################# [ 56%]
  15:crun-debugsource-1.4.5-1         ################################# [ 60%]
  16:conmon-debugsource-2:2.1.0-1     ################################# [ 64%]
  17:conmon-2:2.1.0-1                 ################################# [ 68%]
  18:podman-1:3.4.4-1                 ################################# [ 72%]
  19:podman-docker-1:3.4.4-1          ################################# [ 76%]
  20:conmon-debuginfo-2:2.1.0-1       ################################# [ 80%]
  21:crun-debuginfo-1.4.5-1           ################################# [ 84%]
  22:podman-debuginfo-1:3.4.4-1       ################################# [ 88%]
  23:podman-remote-1:3.4.4-1          ################################# [ 92%]
  24:podman-help-1:3.4.4-1            ################################# [ 96%]
  25:crun-help-1.4.5-1                ################################# [100%]
 

[root@node-3 ~]# rpm -ivUh rpmbuild/RPMS/x86_64/*.rpm rpmbuild/RPMS/noarch/*.rpm ref/*.rpm
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:protobuf-3.14.0-6.oe2203         ################################# [  4%]
   2:protobuf-compiler-3.14.0-6.oe2203################################# [  8%]
   3:protobuf-c-1.4.0-2.oe2203        ################################# [ 12%]
   4:yajl-2.1.0-18.oe2203             ################################# [ 16%]
   5:libnet-1.2-1.oe2203              ################################# [ 20%]
   6:criu-3.16.1-2.oe2203             ################################# [ 24%]
   7:crun-1.4.5-1                     ################################# [ 28%]
Creating group dnsmasq with gid 987.
Creating user dnsmasq (Dnsmasq DHCP and DNS server) with uid 987 and gid 987.
   8:dnsmasq-2.86-2.oe2203            ################################# [ 32%]
   9:container-selinux-2:2.138-4.oe220################################# [ 36%]
uavc:  op=load_policy lsm=selinux seqno=3 res=1  10:containers-common-1:1.5.2-3.oe220################################# [ 40%]
  11:containernetworking-plugins-1.0.1################################# [ 44%]
  12:podman-gvproxy-1:3.4.4-1         ################################# [ 48%]
  13:podman-plugins-1:3.4.4-1         ################################# [ 52%]
  14:podman-debugsource-1:3.4.4-1     ################################# [ 56%]
  15:crun-debugsource-1.4.5-1         ################################# [ 60%]
  16:conmon-debugsource-2:2.1.0-1     ################################# [ 64%]
  17:conmon-2:2.1.0-1                 ################################# [ 68%]
  18:podman-1:3.4.4-1                 ################################# [ 72%]
  19:podman-docker-1:3.4.4-1          ################################# [ 76%]
  20:conmon-debuginfo-2:2.1.0-1       ################################# [ 80%]
  21:crun-debuginfo-1.4.5-1           ################################# [ 84%]
  22:podman-debuginfo-1:3.4.4-1       ################################# [ 88%]
  23:podman-remote-1:3.4.4-1          ################################# [ 92%]
  24:podman-help-1:3.4.4-1            ################################# [ 96%]
  25:crun-help-1.4.5-1                ################################# [100%]
 

添加主机(容器内)

[root@node-1 ~]# cephadm shell
Inferring fsid 4466c6c0-8828-11ee-b74e-08002726ce7d
Using recent ceph image quay.io/ceph/ceph@sha256:c00e089064cc7afd4db454ac645cc4d760f2eae86eb73655124abde9bb9058fb
[ceph: root@node-1 /]# ceph orch host add node-2 10.47.76.95 --labels _admin
Added host 'node-2' with addr '10.47.76.95'
[ceph: root@node-1 /]# ceph orch host add node-3 10.47.76.96 --labels _admin
Added host 'node-3' with addr '10.47.76.96'


查看主机列表

添加更多的mon节点

podman离线部署ceph镜像

[root@node-1 ~]# scp ceph-v16.tar node-2:~/

Authorized users only. All activities may be monitored and reported.
ceph-v16.tar                                                                                                                                                                                                                                                                                                  100% 1158MB 206.4MB/s   00:05    
[root@node-1 ~]# scp ceph-v16.tar node-3:~/

Authorized users only. All activities may be monitored and reported.
ceph-v16.tar                                                                                                                                                                                                                                                                                                  100% 1158MB 222.8MB/s   00:05    
[root@node-1 ~]#

登录node-2,node-3导入podman镜像

[root@node-2 ~]# podman load -i ceph-v16.tar 
Getting image source signatures
Copying blob 602fe9f6cc5a done  
Copying blob c9b8d8af634e done  
Copying config ae96fc565b done  
Writing manifest to image destination
Storing signatures
Loaded image(s): quay.io/ceph/ceph:v16

[root@node-3 ~]# podman load -i ceph-v16.tar 
Getting image source signatures
Copying blob 602fe9f6cc5a done  
Copying blob c9b8d8af634e done  
Copying config ae96fc565b done  
Writing manifest to image destination
Storing signatures
Loaded image(s): quay.io/ceph/ceph:v16

手动安装catatonit

[root@node-1 ~]# scp catatonit.x86_64 node-2:/usr/libexec/podman/catatonit

Authorized users only. All activities may be monitored and reported.
catatonit.x86_64                                                                                                                                                                                                                                                                                              100% 3924KB 206.4MB/s   00:00    
[root@node-1 ~]# ssh node-2 chmod +x /usr/libexec/podman/catatonit

Authorized users only. All activities may be monitored and reported.

[root@node-1 ~]# scp catatonit.x86_64 node-3:/usr/libexec/podman/catatonit

Authorized users only. All activities may be monitored and reported.
catatonit.x86_64                                                                                                                                                                                                                                                                                              100% 3924KB 266.8MB/s   00:00    
[root@node-1 ~]# ssh node-3 chmod +x /usr/libexec/podman/catatonit

Authorized users only. All activities may be monitored and reported.
 

添加mon(容器内)

[root@node-1 ~]# cephadm shell
Inferring fsid 4466c6c0-8828-11ee-b74e-08002726ce7d
Using recent ceph image quay.io/ceph/ceph@sha256:c00e089064cc7afd4db454ac645cc4d760f2eae86eb73655124abde9bb9058fb
[ceph: root@node-1 /]# ceph orch apply mon --unmanaged
Scheduled mon update...
[ceph: root@node-1 /]# ceph orch daemon add mon node-2:10.47.76.95
Deployed mon.node-2 on host 'node-2'
[ceph: root@node-1 /]# ceph orch daemon add mon node-3:10.47.76.96
Deployed mon.node-3 on host 'node-3'
 

# 把自己加回去!

[ceph: root@node-1 /]# ceph orch daemon add mon node-1:10.47.76.94
Deployed mon.node-1 on host 'node-1'
 

状态

提交

ceph orch apply mon --placement="node-1,node-2,node-3"

整半天,版本是16.2.14....

参考

Deploying a new Ceph cluster — Ceph Documentation

Host Management — Ceph Documentation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1247266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设置定时自动请求测试_自动定时循环发送http_post请求---postman工作笔记001

其实就是创建接口文件夹的时候,有个monitor collection 用来监听接口执行情况,这里就可以设置 可以看到多久执行一次对吧,这里可以设置每几分钟执行一次,一共执行多少次等等 但是这里要说明一下,如果需要使用monitor功能,必须需要登录, 所以如果这里点击monitor collection…

医保线上购药系统:代码驱动的医疗创新

医保线上购药系统&#xff0c;这是一个融合技术和医疗的创新典范。本文将通过简单的技术代码示例&#xff0c;为您揭示这一系统是如何通过技术驱动医疗创新&#xff0c;为用户提供更智能、便捷的健康管理体验的。 1. 前端界面开发 使用React框架&#xff0c;我们可以轻松构建…

工业以太网交换机的特点

交换机的使用范围非常广泛&#xff0c;可以说只有需要进行网络连接的地方&#xff0c;基本上都会与交换机有关。但是工业以太网交换机的适用范围相对较小&#xff0c;主要用于工业控制领域的以太网交换设备。工业以太网交换机拥有电信级的性能特征&#xff0c;能够适应苛刻的工…

【亚太杯B题论文已更新】2023年第十三届APMCM亚太地区大学生数学建模竞赛——(文末领取方式)

2023年第十三届APMCM亚太地区大学生数学建模竞赛——论文无偿分享&#xff01;&#xff01;&#xff01; B题第一问论文代码已出&#xff0c;其他赛题及后续论文代码会持续更新。 祝各位小伙伴都能在比赛中发挥出色&#xff0c;取得心仪的成绩呦&#xff01;一起加油&#xff…

java编程:使用递归 循环和位运算实现将10进制转为2进制

1 递归 /*** 递归&#xff1a;十进制转二进制* param decimal 待转换的十进制数* param binary 转换后的二进制数*/public static void decimalToBinaryByRecursion(int decimal,StringBuilder binary){if(decimal < 0){return;}decimalToBinaryByRecursion(decimal/2,bina…

用 VirtualBox 安装 OpenWrt 等 Linux 系统,无法启动的解决办法

用 VirtualBox 安装 OpenWrt 等 Linux 系统&#xff0c;无法启动的解决办法 最近新买了台联想小新 Pro 14 2023 锐龙版&#xff0c;因为有 32GB 的运行内存&#xff0c;所以想安装虚拟机以充分发挥。一开始使用 Hyper-V 来安装可以正常使用&#xff0c;但是后面想使用 Virtual…

数据库表结构导出成Excel或Word格式

前言 该工具主要用于导出excel、word&#xff0c;方便快速编写《数据库设计文档》&#xff0c;同时可以快速查看表的结构和相关信息。 本博客仅作记录&#xff0c;最新源码已经支持多种数据库多种格式导出&#xff0c;有兴趣的可移步源码作者地址&#xff1a;https://gitee.co…

基于LiteFlow构建实时会员权益体系

知识简介&#xff1a;通过LiteFlow规则引擎构建会员权益体系&#xff0c;实现权益节点可插拔&#xff0c;可编排&#xff0c;可复用的特性。完成会员权益数据底盘建设&#xff0c;将分散的权益数据集中&#xff0c;提升权益查询及管理水平。 历史痛点 1&#xff09;不同等级权…

Grafana 如何实现雷达图

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

「德州仪器嵌入式技术创新发展研讨会」落幕,飞凌嵌入式携手TI推动技术创新

11月22日&#xff0c;德州仪器嵌入式技术创新发展研讨会&#xff08;北京站&#xff09;顺利举行&#xff0c;本次研讨会邀请了众多业界领先的企业和专家到场&#xff0c;飞凌嵌入式作为TI生态伙伴受邀参加&#xff0c;与众多业内伙伴共话嵌入式技术的未来发展趋势。 在本次研…

Pix2Pix 使用指南:从原理到项目应用

Pix2Pix Pix2Pix 介绍&#xff1a;使用条件 GAN 进行图像到图像的转换Pix2Pix 原理Pix2Pix 模型结构生成器&#xff1a;Unet结构判别器&#xff1a;PatchGAN目标函数 Pix2Pix 项目使用 Pix2Pix 介绍&#xff1a;使用条件 GAN 进行图像到图像的转换 Pix2Pix 论文&#xff1a;ht…

安防系统智能视频监控中出现画面异常该如何自检?

大家都知道&#xff0c;在当今社会&#xff0c;摄像头无处不在&#xff0c;除了常见的生活与工作场景中&#xff0c;在一些无法人员无法长期驻点场景&#xff0c;如野生动物监测、高空作业监控、高压电缆监控等场景&#xff0c;在这些地方安装摄像头就是为方便日常监控。但是由…

leaflet对线设置渐变色

效果展示: 引用leaflet-polycolor组件 npm install leaflet-polycolor .vue文件中使用 import leafletPolycolor from leaflet-polycolor; leafletPolycolor(L); const latLngs = [[37.03, 111.92], [37.53444, 111.98555], [36.88, 112.12], [37.53444, 112.24], [36.88, 1…

node-red - 节点实战总结1

node-red - 节点实战总结1 二、功能2.1 循环(for\while) 三、网络四、序列五、解析六、存储七、协议7.1 modbus协议7.2 opcua 八、formats8.1 时间格式化与时区转换 二、功能 2.1 循环(for\while) 安装节点node-red-contrib-loop-processing,该节点支持三种方式的循环&#xf…

Linux:配置Ubuntu系统的镜像软件下载地址

一、原理介绍 好处&#xff1a;从国内服务器下载APT软件&#xff0c;速度快。 二、配置 我这里配置的是清华大学的镜像服务器地址 https://mirrors.tuna.tsinghua.edu.cn/ 1、备份文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak2、清空sources.list ec…

openEuler 22.03 LTS x86_64 cephadm 部署ceph 16.2.14 未完成 笔记

环境 准备三台虚拟机 10.47.76.94 node-1 10.47.76.95 node-2 10.47.76.96 node-3 下载cephadm [rootnode-1 ~]# yum install cephadm Last metadata expiration check: 0:11:31 ago on Tue 21 Nov 2023 10:00:20 AM CST. Dependencies resolved. Package …

【python入门篇】函数(6)

这一节将详细介绍Python中函数的用法&#xff0c;包括函数的定义、调用、参数、返回值、作用域等。 函数的概述&#xff1a; Python函数是一种封装了特定任务的可重用代码块。通过将程序分解为更小、更具体的任务&#xff0c;函数提供了一种有效的方式来组织和管理代码&#xf…

社交媒体广告数据采集:Jsoup 的最佳实践

搜狐是中国领先的综合门户网站之一&#xff0c;广告在其网站上广泛投放。为了了解搜狐广告的策略和趋势&#xff0c;采集和分析搜狐广告数据变得至关重要。但是&#xff0c;搜狐网站的广告数据通常需要通过网页抓取的方式获取&#xff0c;这就需要一个强大的工具来解析和提取数…

教师编制缩减

近年来&#xff0c;教师编制缩减成为了老师们备受关注的话题。各国为了优化教育资源&#xff0c;提高教育质量&#xff0c;纷纷开始对教师编制进行调整。 一、教师编制缩减的背景 教师编制缩减的背景主要源于两个方面&#xff1a;一是人口变化趋势&#xff0c;二是教育资源的优…