当前位置: 首页 > news >正文

ceph存储池

1、存储池

1、存储池的概念

  • 存储池就是ceph的逻辑分区,专门用来存储对象的
  1. 特点

    • 将文件切片成对象,通过hash算法,找到存储池中的pg,池中的pg根据crush算法找到osd节点

    • 存储中的PG数量对性能有重要的影响,过多和过少都不行(前面第一章讲了的),超过了一定的数量后,禁止创建存储池

    • 访问级别,不同用户对于同一个存储池有不同的权限

2、存储的类型

  1. 冗余池

    • 提供数据冗余性,让数据不容易丢失,就是写入多份的意思
  2. 缓存池(加速池)

    • 为数据的读写实现加速(在冗余池前面挂载一个缓存池,作为加速池,后面的R版本的被弃用了)
  3. 根据冗余性分类的话

    • 分为复制池

    • 纠删码池

3、复制池

1、创建资源池

  • pgp 指的是OSD在pg上的排列组合方式

[root@node1 ~]# ceph osd pool create 
Invalid command: missing required parameter pool(<poolname>)
osd pool create <pool> [<pg_num:int>] [<pgp_num:int>] [replicated|erasure] [<erasure_code_profile>] [<rule>] [<expected_num_objects:int>] [<size:int>] [<pg_num_min:int>] [<pg_num_max:int>] [on|off|warn] [--bulk] [<target_size_bytes:int>] [<target_size_ratio:float>] :  create pool
Error EINVAL: invalid command# <poolname> # pg_num:int> 存储池中的pg总数# pgp_num:int 存储池中pg有效数,通常与pg相等[root@node1 ~]# ceph osd pool  create pool01
pool 'pool01' created
[root@node1 ~]# # 查看存储池[root@node1 ~]# ceph osd pool ls 
device_health_metrics
pool01

2、查看存储池

# 查看存储类型,详情
[root@node1 ~]# ceph osd pool  ls detail 
pool 1 'device_health_metrics' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 45 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr_devicehealth
pool 2 'pool01' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 46 flags hashpspool stripe_width 0# replicated size 3  这个就是存储池的规则,写入了一份数据,然后存储三份,也就是3个副本,确保了数据的高可用性# min_size 2 最小的副本数,也就是至少要存储到2个副本才行,否则不能存储# crush_rule 0,crush规则,使用的是默认的规则,pg与osd之间的映射(也就是数据与osd的映射之间的关系)# object_hash rjenkins 对象映射到pg的算法为 rjenkins# pg_num 32 ,pgp_num 32 pg和pgp的数量都为32个# autoscale_mode on  池子开启了自我扩展,也就是自动调整PG的数量# 查看存储池容量
[root@node1 ~]# ceph df 
--- RAW STORAGE ---
CLASS    SIZE   AVAIL     USED  RAW USED  %RAW USED
hdd    90 GiB  87 GiB  2.6 GiB   2.6 GiB       2.84
TOTAL  90 GiB  87 GiB  2.6 GiB   2.6 GiB       2.84--- POOLS ---
POOL                   ID  PGS  STORED  OBJECTS  USED  %USED  MAX AVAIL
device_health_metrics   1    1     0 B        0   0 B      0     28 GiB
pool01                  2   32     0 B        0   0 B      0     28 GiB# 查询每个osd容量
[root@node1 ~]# ceph osd df 
ID  CLASS  WEIGHT   REWEIGHT  SIZE    RAW USE  DATA     OMAP     META     AVAIL    %USE  VAR   PGS  STATUS2    hdd  0.00980   1.00000  10 GiB  291 MiB  484 KiB      0 B  290 MiB  9.7 GiB  2.84  1.00   13      up4    hdd  0.00980   1.00000  10 GiB  291 MiB  484 KiB      0 B  290 MiB  9.7 GiB  2.84  1.00   12      up7    hdd  0.00980   1.00000  10 GiB  291 MiB  488 KiB      0 B  291 MiB  9.7 GiB  2.84  1.00    8      up1    hdd  0.00980   1.00000  10 GiB  291 MiB  488 KiB      0 B  291 MiB  9.7 GiB  2.84  1.00    7      up5    hdd  0.00980   1.00000  10 GiB  291 MiB  484 KiB      0 B  291 MiB  9.7 GiB  2.84  1.00   13      up8    hdd  0.00980   1.00000  10 GiB  291 MiB  488 KiB      0 B  290 MiB  9.7 GiB  2.84  1.00   13      up0    hdd  0.00980   1.00000  10 GiB  291 MiB  484 KiB      0 B  291 MiB  9.7 GiB  2.84  1.00   10      up3    hdd  0.00980   1.00000  10 GiB  291 MiB  484 KiB      0 B  291 MiB  9.7 GiB  2.84  1.00   15      up6    hdd  0.00980   1.00000  10 GiB  291 MiB  488 KiB      0 B  291 MiB  9.7 GiB  2.84  1.00    8      upTOTAL  90 GiB  2.6 GiB  4.3 MiB  8.5 KiB  2.6 GiB   87 GiB  2.84                   
MIN/MAX VAR: 1.00/1.00  STDDEV: 0

3、绑定存储池应用类型

  • 如果不绑定存储池类型的话,直接存储数据,ceph会告警

  • 应用类型值的就是提供何种存储业务,块存储(rbd),文件系统存储(cephfs),还是对象存储池(rgw)

  • 区分不同存储池的类型

# 给一个池子打上一个标签
[root@node1 ~]# ceph osd pool application enable pool01 rbd
enabled application 'rbd' on pool 'pool01'# 也可以一个池子有多个标签(但是没有应用场景)
[root@node1 ~]# ceph osd  pool application enable pool01 rgw --yes-i-really-mean-it
enabled application 'rgw' on pool 'pool01'
[root@node1 ~]# ceph osd pool ls detail 
pool 1 'device_health_metrics' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 45 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr_devicehealth
pool 2 'pool01' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 48 flags hashpspool stripe_width 0 application rbd,rgw

4、移除存储的指定标签

# 有多个存储池的类型的话,就是使用--yes-i-really-mean-it 即可
[root@node1 ~]# ceph osd pool application disable pool01 rgw --yes-i-really-mean-it
disable application 'rgw' on pool 'pool01'
[root@node1 ~]# ceph osd pool  ls detail 
pool 1 'device_health_metrics' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 45 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr_devicehealth
pool 2 'pool01' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 49 flags hashpspool stripe_width 0 application rbd

5、验证存储池是3副本

# 创建一个1M的文件
[root@node1 ~]# dd if=/dev/zero of=123.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.000645748 s, 1.6 GB/s# 存储到池子里面去
[root@node1 ~]# rados -p pool01 put 123.txt ./123.txt
[root@node1 ~]# rados -p pool01 ls 
123.txt# 发现对象为1个,但是占用了3M的空间,证明这个pool01是3副本的规则
[root@node1 ~]# ceph df 
--- RAW STORAGE ---
CLASS    SIZE   AVAIL     USED  RAW USED  %RAW USED
hdd    90 GiB  87 GiB  2.6 GiB   2.6 GiB       2.85
TOTAL  90 GiB  87 GiB  2.6 GiB   2.6 GiB       2.85--- POOLS ---
POOL                   ID  PGS  STORED  OBJECTS   USED  %USED  MAX AVAIL
device_health_metrics   1    1     0 B        0    0 B      0     28 GiB
pool01                  2   32   1 MiB        1  3 MiB      0     28 GiB

4、存储池对象的管理

1、上传对象

# rados -p 存储池名 put 对象名 对象路径

2、下载对象

# rados -p 存储池名 get 对象名 对象路径

3、查看对象

# rados -p 存储池名 ls 

4、删除对象

# rados -p u存储名 rm 对象名

5、查询对象存储的OSD

  • ceph osd map pool01 对象名
# 先要查看到PG
[root@node1 ~]# ceph pg dump# 简略输出PG
[root@node1 ~]# ceph pg dump pgs_brief
PG_STAT  STATE         UP       UP_PRIMARY  ACTING   ACTING_PRIMARY
2.1f     active+clean  [4,3,8]           4  [4,3,8]               4
2.1e     active+clean  [7,5,3]           7  [7,5,3]               7# 都是以2开头的,因为这个池子的id是2
# [] 里面对应的就是OSD编号
# active+clean 干净可用的# 一共有32个PG
[root@node1 ~]# ceph pg dump pgs_brief | grep ^2 | wc -l
dumped pgs_brief
32# 去找一下,32个PG里面有数据
[root@node1 ~]# ceph pg dump | grep ^2 | awk '{print $1,$2}'# 上面的方法是最原始的方法,当数据多起来的时候,就不行了# ceph里面有查询pg,osd的方法
[root@node1 ~]# ceph osd map pool01 123.txt
osdmap e49 pool 'pool01' (2) object '123.txt' -> pg 2.613d0fb4 (2.14) -> up ([6,1,4], p6) acting ([6,1,4], p6)
[root@node1 ~]# 

5、存储池配额管理

1、配额方式

  • 对象数量配额

  • 容量配额

  • 限制这个存储池使用的空间

1、查询配额管理

[root@node1 ~]# ceph osd pool  get-quota  pool01
quotas for pool 'pool01':max objects: N/Amax bytes  : N/A# 输出都是N/A则没有开启配额
# max objects 没有开启对象配额
# max bytes 没有开启容量配额

2、设置对象配额

[root@node1 ~]# ceph osd pool  set-quota  pool01 max_objects 3
set-quota max_objects = 3 for pool pool01[root@node1 ~]# ceph osd pool  get-quota  pool01
quotas for pool 'pool01':max objects: 3 objects  (current num objects: 1 objects)max bytes  : N/A# 这个存储池最大存储个对象# 上传了三个对象之后,再要上传或者删除文件都会卡主
# 当配额满了之后,触发时,IO会被无限期的延长,直到配额不满足的时候,才行# 解决方法,扩展配额

3、解除对象配额

[root@node1 ~]# ceph osd pool set-quota pool01 max_objects 0
set-quota max_objects = 0 for pool pool01

4、容量配额

  • 当配额的对象的为容量时,只有存储池在上传对象的这一刻,没有达到配额,哪怕对象的容量达到了存储池配额,也能进行上传,但是下一次传输对象的话,就会传不上去,因为,达到了对象配额最大了
# 设置10M
[root@node1 ~]# ceph osd pool  set-quota pool01 max_bytes 10M
set-quota max_bytes = 10485760 for pool pool01[root@node1 ~]# ceph osd pool get-quota  pool01
quotas for pool 'pool01':max objects: 3 objects  (current num objects: 1 objects)max bytes  : 10 MiB  (current num bytes: 1048576 bytes)[root@node1 ~]# ceph osd pool set-quota pool01 max_bytes 0
set-quota max_bytes = 0 for pool pool01
[root@node1 ~]# ceph osd pool  get-quota pool01
quotas for pool 'pool01':max objects: N/Amax bytes  : N/A

6、存储池操作

1、修改存储池重命名

  • 重命名不会影响对象在OSD上面的移动

  • 因为独有的存储池的ID不会发生变化,对应的PG也不会发生变化(分裂,合并)

  • 存储池的名字不会影响存储池的PG

  • 当PG发生分裂或者合并的话,就会影响对象

  • 存储池改名,会对上层的业务有一定的影响,如果ceph对接了openstack或者k8s的话,则需要修改配置文件

[root@node1 ~]# ceph osd pool rename pool01 cloud
rpool 'pool01' renamed to 'cloud'
[root@node1 ~]# ceph osd pool ls 
device_health_metrics
cloud

7、存储池的快照

  • 几乎上没有用到

  • 存储池基于对象层的快照,也就是为每一个对象拍摄快照

  • 快照也是存储在存储池中的

1、创建快照

[root@node1 ~]# ceph osd pool mksnap cloud snap1
created pool cloud snap snap1

2、查看快照

# 查看有几个快照
rados -p 存储池 lssnap[root@node1 ~]# rados -p cloud lssnap
1	snap1	2024.12.06 09:21:29
1 snaps# 查看快照中的内容
rados -p 存储池 -s 快照名 ls [root@node1 ~]# rados -p cloud -s snap1 ls
selected snap 1 'snap1'
123.txt

3、还原快照

  • 非常的鸡肋,删除了一个对象,但是查看的时候,还是有这个对象,只是下载不过来,因为这个是快照的对象

  • 手动还原的话,就是将这个快照中对象下载到本地,然后重新上传到存储池中

[root@node1 ~]# rados -p cloud rm 123.txt# 删除了也还只是有一个对象,因为这个是快照里面的
[root@node1 ~]# rados -p cloud ls 
123.txt# 下载的时候报错了
[root@node1 ~]# rados -p cloud get 123.txt 123.txt
error getting cloud/123.txt: (2) No such file or directory# 然后基于这个快照下载这个对象,然后上传这个对象
[root@node1 ~]# rados -p cloud -s snap1 get 123.txt 123.txt
selected snap 1 'snap1'
[root@node1 ~]# ls
123.txt  anaconda-ks.cfg  ceph.pub[root@node1 ~]# rados -p cloud put 123.txt 123.txt 
[root@node1 ~]# rados -p cloud ls 
123.txt# 前面是对象名,后面是下载到本地的对象名
[root@node1 ~]# rados -p cloud get 123.txt 1.txt
[root@node1 ~]# ls
123.txt  1.txt  anaconda-ks.cfg  ceph.pub

4、一键还原快照

  • 直接将快照中的对象还原到存储池中

[root@node1 ~]# rados -p cloud rm 123.txt
[root@node1 ~]# rados -p cloud ls 
123.txt
[root@node1 ~]# rados -p cloud rollback 123.txt snap1
rolled back pool cloud to snapshot snap1
[root@node1 ~]# rados -p cloud ls 
123.txt
[root@node1 ~]# rados -p  cloud get 123.txt 2.txt
[root@node1 ~]# ls
123.txt  1.txt  2.txt  anaconda-ks.cfg  ceph.pub

5、删除快照

rados -p cloud rmsnap snap1
[root@node1 ~]# rados -p cloud lssnap
0 snaps

6、快照总结

  • 生产中,上面的2个方式都没有使用,因为这些东西没有可控性

  • 一般是基于应用进行快照,基于RBD快照,基于文件系统快照,基于对象存储备份或者是双活

6、配置存储池的中的参数

1、查看存储池所有参数

[root@node1 ~]# ceph osd pool get cloud all
size: 3   # 副本数量为3个,存储池规则
min_size: 2   # 最少是2个副本数量
pg_num: 32
pgp_num: 32
crush_rule: replicated_rule  # 存储池类型
hashpspool: true
nodelete: false  # 这个存储池没有被保护,也就是可以删除
nopgchange: false
nosizechange: false
write_fadvise_dontneed: false
noscrub: false
nodeep-scrub: false
use_gmt_hitset: 1
fast_read: 0
pg_autoscale_mode: on  # PG会自动扩展
bulk: false# 查看指定类型参数
[root@node1 ~]# ceph osd pool  get cloud size
size: 3

2、设置存储池参数

# 设置一个PG对应2个副本
[root@node1 ~]# ceph osd pool set cloud size 2# 改成2的话,数据就会缩容,扩展的话,会增加的数据的,也就是复制的数据而已,副本之间的复制即可
[root@node1 ~]# ceph pg dump pgs_brief 
PG_STAT  STATE         UP       UP_PRIMARY  ACTING   ACTING_PRIMARY
2.1f     active+clean    [4,3]           4    [4,3]               4
2.1e     active+clean    [7,5]           7    [7,5]               7
2.1d     active+clean    [8,3]           8    [8,3]               8
2.1c     active+clean    [8,3]           8    [8,3]               8

3、PG数量调整

  • PG数量调大的话
    • 如果存储池中的PG的对象较多的话,则调大PG,会引起PG的分裂,在新的OSD上产生新的PG,对象复制到新的PG中

    • 存储中PG对象较少,则直接产生新的PG,不会造成数据的移动

    • 在存储池中,不要随意调整PG的数量,由MGR的pg自我扩展数量来调整

# 设置PG参数
# 将PG数量增加即可
[root@node1 ~]# ceph osd pool set cloud pg_num 35
set pool 2 pg_num to 35
[root@node1 ~]# ceph osd pool get cloud all
size: 2
min_size: 1
pg_num: 35
pgp_num: 35   # 自动的就行调整
crush_rule: replicated_rule
hashpspool: true
nodelete: false# 35个PG
[root@node1 ~]# ceph pg dump pgs_brief | grep ^2 |wc -l
dumped pgs_brief
35# 扩容PG数量,PG中的对象会进行移动,在新的OSD上生成一个PG
# 就是虽然扩展了PG数量,但是了原始的OSD还是没有变,那么根据crush算法,要算出新的PG与OSD的映射关系,进行重新的平衡

3、保护存储池

[root@node1 ~]# ceph osd pool set cloud nodelete true
set pool 2 nodelete to true
[root@node1 ~]# ceph osd pool get cloud all
size: 2
min_size: 1
pg_num: 35
pgp_num: 35
crush_rule: replicated_rule  # 复制池
hashpspool: true
nodelete: true  # 设置存储池不能被删除
nopgchange: false
nosizechange: false
write_fadvise_dontneed: false
noscrub: false
nodeep-scrub: false
use_gmt_hitset: 1
fast_read: 0
pg_autoscale_mode: on
bulk: false

7、PG核心规则

1、pg扩容情况

  1. 扩容PG,PG对象数量较多的情况

    • PG 对象较多时,扩容 PG 会导致 PG 分裂,即现有 PG 被拆分成多个更小的 PG,新生成的 PG 会分布到不同的 OSD 上,可能需要移动数据以保持副本的一致性。
  2. 缩容PG,PG对象数量较少的情况

    • PG 对象较少时,扩容 PG 不会导致数据的迁移,而是直接创建新的 PG,不涉及数据的重新分配。
  3. 体现了数据负载均衡能力和容错能力,能在合适的时机对PG进行分裂或者扩展

  4. 图解
    画pg分为2个,然后数据进行迁移

  5. 扩容PG

  • 直接扩容PG的话,PG会进行分裂,那么PG中的对象需要消耗一定计算和带宽资源,因为PG分裂的话,所对应的新的PG和OSD之间的映射关系有CRUSH算法算出来,然后那些OSD的数据进行复制移动到新的OSD上面,这样的话就需要消耗一点的资源

  • 因此的话,扩容PG在业务的低谷进行

  1. 扩容PGP
  • 3个PG对应3个pgp,扩容PGP的话,不会影响原来的PG与OSD的映射关系

  • 当对象来存储的话,将会存储到新的PG在OSD上面的分布(当有新的PG的话),会影响后来新创建的PG

  • 新创建的pg会有新的排列组合方式,就会使用这种新的排列方式

img

  • 一般来说的话,现在就是自动扩展的

2、pg自我扩展模式

  • 根据这个mgr中的模块可以实现自我扩展,N版本,默认就是开启的
# 关掉扩展模式
[root@node1 ~]# ceph osd pool set cloud pg_autoscale_mode off
set pool 2 pg_autoscale_mode to off# 开启扩展模式
[root@node1 ~]# ceph osd pool set cloud pg_autoscale_mode on
set pool 2 pg_autoscale_mode to on
[root@node1 ~]# ceph osd pool get cloud all
size: 2
min_size: 1
pg_num: 32
pgp_num: 32
crush_rule: replicated_rule
hashpspool: true
nodelete: true
nopgchange: false
nosizechange: false
write_fadvise_dontneed: false
noscrub: false
nodeep-scrub: false
use_gmt_hitset: 1
fast_read: 0
pg_autoscale_mode: on
bulk: false

8、存储池中的命令空间

1、命名空间概念

2、命名空间查看

# 前面为空的话,就是默认的命名空间
[root@node1 ~]# rados -p cloud ls --allpasswd# 上传对象的时候,可以使用-N,命名空间的名字
[root@node1 ~]# rados -p cloud put group /etc/group -N group1
[root@node1 ~]# rados -p cloud ls --allpasswd
group1	group# 查看指定命名空间的对象
[root@node1 ~]# rados -p cloud ls -N group1
group# 查看的时候以json格式输出
[root@node1 ~]# rados -p cloud ls --all --format=json
[{"namespace":"","name":"passwd"},{"namespace":"group1","name":"group"}][root@node1 ~]# 
  • 命名空间在ceph原生应用(librados),用户相册,使用这个可以进行隔离

9、删除存储池

1、必要条件

  • monitor要允许删除存储池

  • 存储池没有被保护

# 允许删除monitor删除存储池
[root@node1 ceph]# ceph config set mon mon_allow_pool_delete true# 关掉存储池的保护
[root@node1 ceph]# ceph osd pool set cloud nodelete false
set pool 2 nodelete to false# 删掉存储池
[root@node1 ceph]# ceph osd pool delete cloud  cloud --yes-i-really-really-mean-it
pool 'cloud' removed

10、纠删码池

1、纠删码池

  • 和复制池一样,都是为ceph提供存储池的冗余性,与复制池比较的话,拥有更大存储利用率,同样是三个副本的场景中,复制池可以用33%的利用率,但是纠删码池的话,有75%的利用率,这个就是纠删码池的性价比,在海量存储池使用纠删码池来提供业务

  • n=k+m,n指的就是数据块+编码块的总数 (也就是一个对象要切成多少个块才行)

  • k 数据块个数,将一个对象切分成多少个数据块

  • m 编码个数,切分出来的数据块生成多少个编码块

  • 任意个m恢复任意个K,因此在纠删码池中,m决定了存储池的冗余性,决定了能够丢失多少个块,而不是丢失数据

  • 3个副本,一个文件大小为3M的话,存储的方式为1M+1M+1M+1M+1M 即可,因为要分成3个块,每一个块的大小为1M

2、纠删码池的工作原理

img

  • 在被切成片的时候,还需要再次切成块进行存储

3、纠删码池的创建

# 存储池的类型
[root@node1 ceph]# ceph osd pool create pool01 erasure
pool 'pool01' created# 查看详细情况
[root@node1 ceph]# ceph osd pool ls detail 
pool 1 'device_health_metrics' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 57 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr_devicehealth
pool 3 'pool01' erasure profile default size 4 min_size 3 crush_rule 1 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 98 flags hashpspool stripe_width 8192

4、查看纠删码池的规则

# 查看所有纠删码规则
[root@node1 ceph]# ceph osd erasure-code-profile ls
default# 查看纠删码的详细规则
[root@node1 ceph]# ceph osd erasure-code-profile get default
k=2  # 数据块个数
m=2  # 纠删码块个数
plugin=jerasure  # 使用的插件
technique=reed_sol_van# 如果n=4的话,则4个块会选择4台不同的主机,也就是故障域为主机

5、刚创建出来的纠删码池,为什么不可用

[root@node1 ceph]# ceph -s cluster:id:     47a615ea-b2dc-11ef-a364-000c29679dd7health: HEALTH_WARNDegraded data redundancy: 32 pgs undersizedservices:mon: 3 daemons, quorum node1,node2,node3 (age 7h)mgr: node1.ajdllh(active, since 7h), standbys: node2.gkqxdyosd: 9 osds: 9 up (since 7h), 9 in (since 23h)data:pools:   2 pools, 33 pgsobjects: 0 objects, 0 Busage:   2.6 GiB used, 87 GiB / 90 GiB availpgs:     32 active+undersized1  active+clean[root@node1 ceph]# ceph pg dump pgs_brief 
PG_STAT  STATE              UP                  UP_PRIMARY  ACTING              ACTING_PRIMARY3.1f     active+undersized  [2,0,1,2147483647]           2  [2,0,1,2147483647]               2
3.1e     active+undersized  [2,5,2147483647,3]           2  [2,5,2147483647,3]               2
3.1d     active+undersized  [5,0,2147483647,4]           5  [5,0,2147483647,4]               5
3.1c     active+undersized  [6,2147483647,7,1]           6  [6,2147483647,7,1]               6
3.1b     active+undersized  [1,3,2147483647,7]           1  [1,3,2147483647,7]               1
3.1a     active+undersized  [1,4,3,2147483647]           1  [1,4,3,2147483647]               1# 最后一个OSD没有主机选择,所以故障了[root@node1 ceph]# ceph osd erasure-code-profile get default
k=2
m=2
plugin=jerasure
technique=reed_sol_van# n=4的话,4个块就会分布在4台主机上面,所以的话,最后一个块没有主机选择,所以就会故障# 默认的域是主机,4个主机,不符合,所以就会发生故障

6、自定义纠删码规则

  • 编写一个profile
[root@node1 /]# ceph osd erasure-code-profile set ecdemo k=3 m=2  crush-failure-domain=osd
[root@node1 /]# ceph osd erasure-code-profile ls 
default
ecdemo
[root@node1 /]# ceph osd erasure-code-profile get ecdemo
crush-device-class=
crush-failure-domain=osd
crush-root=default
jerasure-per-chunk-alignment=false
k=3
m=2
plugin=jerasure
technique=reed_sol_van
w=8 # 一个编码块可以允许8个数据块# 故障域为5的话,就是切成块分布在5个OSD上面即可,就不会报错了# ecdemo  纠删码的名称
# k=3 3个数据块,m=2 就是2个纠删块# 创建纠删码池
[root@node1 /]# ceph osd pool create pool01 erasure ecdemo
cpool 'pool01' created# 这样的话,就不会报错了,创建的5个数据块,会分布在5个不同的OSD上面即可
[root@node1 /]# ceph pg dump pgs_brief 
PG_STAT  STATE         UP           UP_PRIMARY  ACTING       ACTING_PRIMARY
5.1f     active+clean  [3,6,0,8,1]           3  [3,6,0,8,1]               3
5.1e     active+clean  [7,3,5,4,2]           7  [7,3,5,4,2]               7
5.1d     active+clean  [4,2,6,5,1]           4  [4,2,6,5,1]               4
5.1c     active+clean  [0,1,2,5,6]           0  [0,1,2,5,6]               0
5.1b     active+clean  [0,7,3,1,8]           0  [0,7,3,1,8]               0
5.1a     active+clean  [1,0,2,6,7]           1  [1,0,2,6,7]               1#	k:在不同 OSD 之间拆分的数据区块数量。默认值为 2。
#	m:数据变得不可⽤之前可以出现故障的 OSD 数量。默认值为 1。
#	plugin: 此可选参数定义要使⽤的纠删代码算法。
#	crush-failure-domain:CRUSH 故障域,默认设置为 host
#	crush-device-class: 典型的类别可能包括 hdd、ssd 或nvme。
#	crush-root:此可选参数设置 CRUSH 规则集的根节点。
#	key=value: 插件可以具有对该插件唯⼀的键值参数。
#  technique:每个插件提供⼀组不同的技术来实施不同的算法。

7、纠删码推荐的关系

  1. k和m的关系

    • k值大的话,表示可以使用存储利用率比较的高

    • 利用率的话, k/(k+m)

    • M值大的话,表示冗余率就高

8、删除纠删码规则

# 因此的话,存储池使用该规则的时候,不能被删除
[root@node1 /]# ceph osd erasure-code-profile rm ecdemo
Error EBUSY: pool01 pool(s) are using the erasure code profile 'ecdemo'

9、profile规则

  • 也就是存储池在使用这个规则的时候,不能删除,更改,或者替换成其他的规则

相关文章:

ceph存储池

1、存储池 1、存储池的概念 存储池就是ceph的逻辑分区&#xff0c;专门用来存储对象的 特点 将文件切片成对象&#xff0c;通过hash算法&#xff0c;找到存储池中的pg&#xff0c;池中的pg根据crush算法找到osd节点 存储中的PG数量对性能有重要的影响&#xff0c;过多和过少…...

STM32基于HAL库的串口接收中断触发机制和适用场景

1. HAL_UART_Receive_DMA函数 基本功能 作用&#xff1a;启动一个固定长度的 DMA 数据接收。特点&#xff1a; 需要预先指定接收数据的长度&#xff08;Size 参数&#xff09;。DMA 会一直工作直到接收到指定数量的数据&#xff0c;接收完成后触发 HAL_UART_RxCpltCallback 回…...

如何查看电脑的屏幕刷新率?

1、按一下键盘的 win i 键&#xff0c;打开如下界面&#xff0c;选择【系统】&#xff1a; 2、选择【屏幕】-【高级显示设置】 如下位置&#xff0c;显示屏幕的刷新率&#xff1a;60Hz 如果可以更改&#xff0c;则选择更高的刷新率&#xff0c;有助于电脑使用起来界面更加流…...

Q3收入回退,盈利与商业化落地步履艰难,文远知行亟待背水一战

撰稿|行星 来源|贝多财经 12月2日&#xff0c;全球商业杂志《Fortune》&#xff08;财富&#xff09;揭晓了2024年“未来50强”&#xff08;The Future 50&#xff09;企业榜单&#xff0c;上市不久的全球Rbotaxi第一股文远知行&#xff08;NASDAQ:WRD&#xff09;位列第26名…...

如何利用Java爬虫获得商品类目

在当今数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。获取和分析数据的能力对于任何希望在市场上保持竞争力的企业来说都是至关重要的。对于电子商务平台和市场研究公司而言&#xff0c;获取商品类目数据尤为重要&#xff0c;因为这些数据可以帮助他们更好地理解市场…...

Charts 教程:创建交互式图表的基础

ECharts 是一个开源的、基于 JavaScript 的数据可视化库&#xff0c;它可以帮助你快速创建交互式的图表。无论是简单的柱状图、折线图&#xff0c;还是复杂的地图和关系图&#xff0c;ECharts 都能够轻松应对。本文将带你了解如何在你的网页中使用 ECharts 创建图表&#xff0c…...

Jackson - JsonGenerator创建JSON、JsonParser解析JSON

以下是关于如何使用Jackson的JsonGenerator类来创建JSON内容以及如何使用JsonParser类来读取JSON内容的教程。 依赖项 首先&#xff0c;在pom.xml文件中添加以下依赖项以引入Jackson库&#xff1a; <dependency><groupId>com.fasterxml.jackson.core</groupI…...

数据结构与算法——1202—排序递归

1、选择排序 #include<iostream> #include<vector> using namespace std;void SelectSort(vector<int>& nums) {int i;int j;int minIndex;int length nums.size();if (length 0 || length 1) return;for (i 0; i < length-1; i)//遍历所有元素{…...

Lattice Radiant Software Lattice Propel Builder Lattice Propel 2024.1 安装

因项目需要&#xff0c;对Lattice 器件LIFCL-40 CrossLink进行评估 先从Lattice官网下载Radiant安装包&#xff1a; Lattice Radiant设计软件 新建工程环境...

【Linux系统】 Linux内核与UNIX设计哲学的结合

Linux 内核虽然不是 UNIX 的直接衍生物&#xff0c;但它深受 UNIX 设计哲学的影响。Linux 的开发者&#xff0c;尤其是 Linus Torvalds&#xff0c;在设计和实现 Linux 时&#xff0c;借鉴了 UNIX 的核心思想&#xff0c;使 Linux 成为一个类 UNIX 系统。 以下从 UNIX 设计哲学…...

MKS EDGE Series RF Generators Power Solution 软件

MKS EDGE Series RF Generators Power Solution 软件...

【机器学习 | 基于Lasso回归和随机森林的上海链家二手房房价预测】

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 去除重复数据2.4 去除缺失数据2.5 面积、价格、单价、楼层、建筑时间数据提取2.6 朝向数据处理 &#x1f3f3;️‍&#x1f308; 3. 特…...

MyBatis-Plus分页查询方式

分页查询基本方式 SpringBootTest(classes LearningApplication.class) public class MPTest {AutowiredILearningLessonService lessonService;Testpublic void test(){/*** Page<LearningLesson>&#xff1a;MyBatisPlus提供的分页对象* 1&#xff1a;当前页数* 2&am…...

分布式cap

P&#xff08;分区安全&#xff09;都能保证&#xff0c;就是在C&#xff08;强一致&#xff09;和A&#xff08;性能&#xff09;之间做取舍。 &#xff08;即立马做主从同步&#xff0c;还是先返回写入结果等会再做主从同步。类似的还有&#xff0c;缓存和db之间的同步。&am…...

【组件封装】uniapp vue3 封装一个完整的Tabs(标签页)组件教程,功能由简到杂实现讲解。

文章目录 前言一、简单版Tabs代码实现&#xff1a; 二、下划线带动画的TabsAPI回顾&#xff1a;代码实现&#xff1a; 三、内容区域滑动切换切换动画代码实现&#xff1a;&#xff08;2&#xff09;禁用手势滑动切换&#xff08;3&#xff09;内容区域换为插槽 四、标签栏可滚动…...

AI在SEO中的应用与关键词优化探讨

内容概要 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术为搜索引擎优化&#xff08;SEO&#xff09;带来了革命性的改变。传统的SEO主要依赖于人为的经验和判断&#xff0c;而AI则通过算法分析海量数据&#xff0c;提供更加精准和高效的方式优化关键词…...

JUC:Synchronized和锁升级

1. 面试题 谈谈你对Synchronized的理解Sychronized的锁升级你聊聊Synchronized实现原理&#xff0c;monitor对象什么时候生成的&#xff1f;知道monitor的monitorenter和monitorexit这两个是怎么保证同步的嘛&#xff1f;或者说这两个操作计算机底层是如何执行的偏向锁和轻量级…...

如何使用锁实现多进程和多线程的并发执行的安全

多进程和多线程的并发&#xff1a; 多进程和多线程的并发意思是在同一段时间内&#xff0c;多个进程或者线程一起执行&#xff0c;但是这些进程或者线程的执行并不是真正意义上在同一时刻执行&#xff0c;而是在不同的时间里执行&#xff0c;因为每个CPU在同一时间只能处理同一…...

LabVIEW如何用运动控制卡实现伺服电机的转矩控制?

在LabVIEW中&#xff0c;使用运动控制卡实现伺服电机的转矩控制&#xff0c;通常通过以下几个步骤来完成。这里将结合LabVIEW的运动控制功能和伺服电机控制的基本原理进行详细介绍。 ​ 1. 选择合适的运动控制卡 要实现伺服电机的转矩控制&#xff0c;首先需要一张支持伺服电…...

SQL面试题——百度SQL面试题 无效搜索

百度SQL面试题 无效搜索 今天的题目是来自百度的SQL 面试题目 现有一份用户搜索日志,包含用户ID,时间,用户搜索内容。定义 无效搜索:如果用户下一次搜索内容中包含本次搜索内容,则认为本次搜索为无效搜索。请查询用户无效搜索记录 +---------+---------------------+--…...

媒体查询、浏览器一帧渲染过程

文章目录 媒体查询语法示例根据视口宽度应用不同的样式根据设备像素比应用不同的样式根据方向应用不同的样式 使用场景 浏览器一帧的渲染过程 媒体查询 媒体查询&#xff08;Media Query&#xff09;是CSS3中的一个重要特性&#xff0c;它允许开发者根据设备的特定条件&#x…...

实习工作日志

工作日志 遇到的bug 由于不熟悉Python&#xff0c;造成了这个bug python的浅拷贝与深拷贝&#xff0c;一定要创建新的变量&#xff0c;否则只是单纯拷贝地址...

JavaWeb学习--cookie和session

目录 &#xff08;一&#xff09;Cookie概述 1.什么叫Cookie 2.Cookie规范 3.Cookie的覆盖 4.cookie的最大存活时间 ​​​​​​&#xff08;Cookie的生命&#xff09; &#xff08;二&#xff09; Cookie的API 1.创建Cookie&#xff1a;new 构造方法 2.保存到客户端浏…...

ETCD的封装和测试

etcd是存储键值数据的服务器 客户端通过长连接watch实时更新数据 场景&#xff1a; 当主机A给服务器存储 name&#xff1a; 小王 主机B从服务器中查name ,得到name-小王 当主机A更改name 小李 服务器实时通知主机B name 已经被更改成小李了。 应用&#xff1a;服务注册与发…...

c++引用笔记

1 引用的基本使用 // 引用 // 作用&#xff1a;给变量起别名 // 语法&#xff1a;数据类型 &别名 原名int main(int argc, char const *argv[]) {int a 10;int &b a;cout << "a " << a << endl;cout << "b " <&l…...

macOS运行amd64的镜像

在macOS上运行amd64&#xff08;x86_64&#xff09;架构的镜像&#xff0c;通常通过虚拟化或仿真工具来实现。例如&#xff0c;如果你使用的是基于Apple Silicon&#xff08;M1或M2等&#xff09;芯片的Mac&#xff0c;那么你的处理器是ARM架构的&#xff0c;而amd64是x86架构&…...

Oracle查询优化:高效实现仅查询前10条记录的方法与实践

在 Oracle 中&#xff0c;实现仅查询前10条记录的四种方法 1. 使用 ROWNUM 查询 ROWNUM 是 Oracle 中的伪列&#xff0c;用于限制返回的行数。 SELECT * FROM table_name WHERE condition AND ROWNUM < 10;condition&#xff1a;查询条件。ROWNUM < 10&#xff1a;限制…...

【时时三省】(C语言基础)结构体内存对齐

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 我们已经掌握了结构体的基本使用了。现在我们深入讨论一个问题&#xff1a;计算结构体的大小。 这也是一个特别热门的考点&#xff1a;结构体内存对齐 示例&#xff1a; 第一个s如果根据字…...

工业物联网关

工业物联网关的定义与功能 定义&#xff1a;工业物联网关是一种在工业物联网&#xff08;IIoT&#xff09;系统中起到关键连接作用的设备。它位于工业现场设备&#xff08;如传感器、执行器等&#xff09;和上层的工业网络&#xff08;如企业内部网络、云平台等&#xff09;之间…...

Docker 安装 Yapi

Docker 安装系列 Docker已安装。 1、场景Yapi使用的MongoDB用户信息 1.1 创建自定义 Docker 网络 首先&#xff0c;创建一个自定义的 Docker 网络&#xff0c;以便 MongoDB 和 YApi 容器可以相互通信 [rootflexusx-328569 data]# docker network create yapi-networ…...

MaxEnt模型在物种分布模拟中如何应用?R语言+MaxEnt模型融合物种分布模拟、参数优化方法、结果分析制图与论文写作

目录 第一章 以问题导入的方式&#xff0c;深入掌握原理基础 第二章 常用数据检索与R语言自动化下载及可视化方法 第三章 R语言数据清洗与特征变量筛选 第四章 基于ArcGIS、R数据处理与进阶 第五章 基于Maxent的物种分布建模与预测 第六章 基于R语言的模型参数优化 第七…...

UDE连接不上miniwiggler

PLS 的UDE 软件搭配miniwiggler硬件用来调试英飞凌的单片机是个不错的选择&#xff0c;比如TC275、TC387等等。英飞凌官方开发板板载了miniwiggler&#xff0c;非常方便。 很多买了英飞凌官方开发板的同学可能会发现&#xff0c;使用英飞凌的mentool软件能连接上自己的板子&…...

Trimble X9三维激光扫描仪高效应对化工厂复杂管道扫描测绘挑战【沪敖3D】

化工安全关系到国计民生&#xff0c;近年来随着化工厂数字化改革不断推进&#xff0c;数字工厂逐步成为工厂安全管理的重要手段。而化工管道作为工厂设施的重要组成部分&#xff0c;由于其数量多、种类繁杂&#xff0c;一直是企业管理的重点和难点。 传统的化工管廊往往缺乏详…...

数据结构(Doubly Linked List双向链表)

1.前言&#xff1a; 在计算机科学的广袤领域中&#xff0c;数据结构犹如构建高楼大厦的基石&#xff0c;它们为高效地组织、存储和处理数据提供了坚实的框架。而双向链表作为一种重要且功能强大的数据结构&#xff0c;在众多算法与程序设计场景中都展现出了独特的魅力与价值。…...

【踩坑】修复报错libcurl.so.4、LIBFFI_BASE_7.0、libssl.so.3

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ libcurl.so.4&#xff1a; sudo apt install curl -y LIBFFI_BASE_7.0: conda install libffi3.3 -y libssl.so.3: sudo apt install -y openssl li…...

【Java实现MySQL 数据库导出 Excel 表的方法详解】

MySQL 数据库导出 Excel 表的方法详解 在日常开发中&#xff0c;我们经常需要将数据库中的数据导出为 Excel 文件&#xff0c;以便进行数据分析或分享给其他同事。本文将详细介绍如何从 MySQL 数据库导出数据并生成 Excel 文件&#xff0c;具体实现将基于 Java 语言和 Spring …...

CentOS 7 环境下常见的操作和配置

目录 1. CentOS 7 中的 vsftpd 配置与使用 安装与启动 vsftpd 配置 vsftpd&#xff08;/etc/vsftpd/vsftpd.conf&#xff09; 常见命令 2. 使用 yum 包管理器 3. 安全性与防火墙配置 开放端口 4. 使用 systemd 管理服务 5. SELinux 配置 查看 SELinux 状态 临时禁用…...

使用mtools搭建MongoDB复制集和分片集群

mtools介绍 mtools是一套基于Python实现的MongoDB工具集&#xff0c;其包括MongoDB日志分析、报表生成及简易的数据库安装等功能。它由MongoDB原生的工程师单独发起并做开源维护&#xff0c;目前已经有大量的使用者。 mtools所包含的一些常用组件如下&#xff1a; mlaunch支…...

基于 RNN(GRU, LSTM)+CNN 的红点位置检测(pytorch)

文章目录 1 项目背景2 数据集3 思路4 实验结果5 代码 1 项目背景 需要在图片精确识别三跟红线所在的位置&#xff0c;并输出这三个像素的位置。 其中&#xff0c;每跟红线占据不止一个像素&#xff0c;并且像素颜色也并不是饱和度和亮度极高的红黑配色&#xff0c;每个红线放大…...

35页PDF | 元数据与数据血缘落地实施(限免下载)

一、前言 这份报告详细介绍了元数据与数据血缘的概念、重要性以及在企业数据中台中的应用。报告阐述了数据中台的核心价值在于整合和管理体系内的数据&#xff0c;以提升数据资产化能力并支持业务决策。报告还涵盖了元数据的分类&#xff08;技术元数据和业务元数据&#xff0…...

Hyperf jsonrpc

依赖的 composer 包 composer require hyperf/json-rpc composer require hyperf/rpc-server composer require hyperf/rpc-client composer require hyperf/service-governance composer require hyperf/service-governance-consul composer require hyperf/service-gove…...

MYSQL PARTITIONING分区操作和性能测试

PARTITION OR NOT PARTITION IN MYSQl Bill Karwin says “In most circumstances, you’re better off using indexes instead of partitioning as your main method of query optimization.” According to RICK JAMES: “It is so tempting to believe that PARTITIONing wi…...

go引入skywalking

前置条件&#xff1a;安装好jdk11&#xff0c;linux服务器&#xff08;centos7.9&#xff09;&#xff0c;go版本&#xff08;我的是1.18&#xff0c;1.21都可以&#xff09; 1.下载skywalking Downloads | Apache SkyWalking 2.下载agent源码 Downloads | Apache SkyWalkin…...

如何通过实构与虚构实现动态交互的态、势、感、知的编排组合

通过 实构 与 虚构 实现 动态人机交互的态、势、感、知 的编排组合&#xff0c;是一个涉及多领域的复杂任务。这个问题的核心在于如何将现实和虚拟世界中的元素&#xff0c;特别是人的 态 &#xff08;状态&#xff09;、 势 &#xff08;趋势&#xff09;、 感 &#xff08;感…...

easyexcel 导出日期格式化

1.旧版本 在新的版本中formate已经被打上废弃标记。那么不推荐使用这种方式。 2.推荐方式 推荐使用另外一种方式【 Converter 】代码如下&#xff0c;例如需要格式化到毫秒【yyyy-MM-dd HH:mm:ss SSS】级别 创建一个公共Converter import com.alibaba.excel.converters.Conv…...

大模型Qwen面试内容整理-模型架构与原理

Qwen(通义千问)是阿里巴巴推出的大规模语言模型,其架构和原理与当前主流的大模型(如GPT、LLaMA等)有很多相似之处,但也具备一些独特的特点。下面是Qwen模型架构和原理的详细介绍: Transformer 架构 Qwen模型基于改进的 Transformer 架构,这是一种广泛用于自然语言处理(…...

Python 类的设计(以植物大战僵尸为例)

关于类的设计——以植物大战僵尸为例 一、设计类需满足的三要素1. 类名2. 属性和方法 二、以植物大战僵尸的为例的类的设计1. 尝试分类2. 创建对象调用类的属性和方法*【代码二】*3. 僵尸的继承 三、代码实现 一、设计类需满足的三要素 1. 类名 类名&#xff1a;某类事物的名…...

docker学习笔记(五)--docker-compose

文章目录 常用命令docker-compose是什么yml配置指令详解versionservicesimagebuildcommandportsvolumesdepends_on docker-compose.yml文件编写 常用命令 命令说明docker-compose up启动所有docker-compose服务&#xff0c;通常加上-d选项&#xff0c;让其运行在后台docker-co…...

第一个 JSP 程序

一个简单的 JSP 程序&#xff1a; 使用 IDEA 开发工具新建一个 maven 项目&#xff0c;具体操作如图所示&#xff1a; 配置 Tomcat 服务器 项目结构如下图所示&#xff1a; 3. 修改 index.jsp 页面的代码&#xff1a; <% page language"java" contentType&q…...

MongoDB分片集群搭建及扩容

分片集群搭建及扩容 整体架构 环境准备 3台Linux虚拟机&#xff0c;准备MongoDB环境&#xff0c;配置环境变量。一定要版本一致&#xff08;重点&#xff09;&#xff0c;当前使用 version4.4.9 配置域名解析 在3台虚拟机上执行以下命令&#xff0c;注意替换实际 IP 地址 e…...

开门红!阿拉山口铁路口岸今年首月过货量突破150万吨

今年首月,阿拉山口口岸持续畅通向西开放国际联运通道,实现进出口贸易首月&ldquo;开门红&rdquo;。据统计,阿拉山口铁路口岸1月份完成过货量153.3万吨,同比增长12.2%,其中进口以矿产品为主,出口以机电设备、高新技术产品等为主要品类。截至目前,阿拉山口口岸通行中…...

澳大利亚毛派对毛主席的崇敬源自格瓦拉!

同志们,新年好,老猫在这里给大家拜年了,祝同志们和祖国一起在新的一年里越来越好!最近有不少私信和留言让老猫谈谈小红书这个事!正好我前一段接待了一个澳大利亚的朋友。我和翠西交流以后,突然想明白了一个问题就是毛主席说过:让它们去说我们这也不行那也不行吧!那么请问它…...

海南万宁救人白衣小哥被授予“见义勇为积极分子”称号

女孩海边玩耍被巨浪卷走,白衣小哥冒险将其救下,目击者:他拿命救人。央广网万宁2月1日消息(记者 索迪)2月1日下午,万宁市表彰了海边勇于救人的&ldquo;白衣小哥&rdquo;林佳泰,向其授予颁发&ldquo;万宁市见义勇为积极分子&rdquo;称号,并给予2万元奖励,对…...

陈俊杰:中美网民小红书对账本之陈平不等式解构

&ldquo;如果我(在中国)一个月工资两千块,不到一千美元,但我活的要比在美国三千美元舒服的多。&rdquo;陈平这句话到底可信不可信?因人而异。为了支持其观点,陈平可能参考了诸如购买力平价(PPP)、生活成本指数(CLI)等经济学指标,这些指标能更全面地反映不同国…...

“颜革”离我们还有多远

经常听到网上有官文说,其实间谍离我们并不远。事实上吧,只能经常上网,碰到那些被称为反贼间谍、美狗日杂的汉奸的黄皮白心的人,机率还是很大的。这些香蕉人分布在社会的各个层级,各个系统,有几个相当明显的藏污纳垢的系统中,这样的货色特别引人注目,尤其是在网上,他们…...

南苏丹突发坠机,2名中国公民遇难

据@CCTV国际时讯消息,南苏丹石油部长证实,1月29日,一架载有19名乘客和2名机组人员的飞机从南苏丹联合州起飞仅3分钟后坠毁。事故目前已致20人遇难,1人仍在救治中。经与中国驻南苏丹大使馆确认,遇难者中包括2名中国公民。使馆表示正在协助处理善后事宜。南苏丹总统基尔发表…...