ceph高可用

这篇具有很好参考价值的文章主要介绍了ceph高可用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

操作系统:centos8

三台服务器:

192.168.6.22:mon,mgr,mds,osd

192.168.6.23:mon,mgr,mds,osd

192.168.6.24:mon,mgr,mds,osd

正式环境osd和mon不应该在一个节点,建议osd单独服务器安装。

ceph版本:18.1.3

配置基础环境

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld


# 关闭selinux
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

安装基础环境

   然后安装ceph的密钥,centos7和8都要执行,下面不特别说明都是centos7/8都执行命令:

rpm --import 'https://download.ceph.com/keys/release.asc'

把基础centos镜像传上去,才能执行下面

# 更新yum源
yum install epel-release
yum install snappy leveldb gdisk gperftools-libs

把ceph镜像源加进去,才能安装ceph 

或者vim /etc/yum.repos.d/ceph.repo

[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-18.1.3/el8//x86_64/
enabled=1
gpgcheck=1
priority=2
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-18.1.3/el8//noarch/
gpgcheck=1
priority=2
enabled=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-18.1.3/el8//SRPMS
gpgcheck=1
enabled=0
priority=2
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

每个节点都安装

yum install ceph

安装过程中会自动安装python3.6以及相关

的依赖等,安装完成之后最好再确认一下下面两个python模块是否存在,不存在就需要安装一下:

pip3 install pecan
pip3 install werkzeug

ceph-mon服务部署

在第一个节点执行

uuidgen 生成id

创建配置文件   vim /etc/ceph/ceph.conf

fsid,  public netword (网络按cidr设置),mon_initial_members ,mon_host 默认端口6789,

  osd pool default size = 3(正常数据会复制多少个副本)
  osd pool default min size = 2(降级状态下,数据最少有多少副本,如果副本数小于它说明出问题了不能正常用)

osd pool default pg num(pg的数量,官方建议 (100*osd数量)/副本数量, 并且最接近2的幂,这里是 (100*3)/3=100,最接近2的幂是128)

osd pool default pgp num的值和osd pool default pg num相等

  这些配置都需要改

[global]
        fsid = 88ad70c0-b814-426b-bd92-745cea0e9dd5
        mon_initial_members = server22,server23,server24
        mon_host = 192.168.6.22,192.168.6.23,192.168.6.24
        public network = 192.168.6.0/22
        auth cluster required = cephx
        auth service required = cephx
        auth client required = cephx
        osd journal size = 1024
        osd pool default size = 3
        osd pool default min size = 2
        osd pool default pg num = 128
        osd pool default pgp num = 128
        osd crush chooseleaf type = 1
        mon_allow_pool_delete = true

 创建秘钥

# 为集群创建1个密钥环,作为监视器密钥 注意其中的点.不要丢
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
# 生成管理员密钥环 创建admin用户 也是第一个客户端用户
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
# 生成bootstrap密钥环和用户
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
# 然后将刚才生成的密钥追加到ceph.mon.keyring
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
# 修改ceph.mon.keyring的权限为ceph ceph用户安装时已经自动创建
chown ceph:ceph /tmp/ceph.mon.keyring

 安装监控

# 使用主机名,主机IP地址和FSID生成monitor map。另存为/tmp/monmap:
#node1  注意修改 hostname和ip地址
monmaptool --create --add server22 192.168.6.22 --add server23 192.168.6.23 --add server23 192.168.6.23 --fsid 88ad70c0-b814-426b-bd92-745cea0e9dd5 /tmp/monmap

# 复制monitor map到另外2个节点
#node1
scp /tmp/monmap root@server23:/tmp
scp /tmp/monmap root@server24:/tmp

# 复制ceph.client.admin.keyring到另外2个节点
#node1
scp /etc/ceph/ceph.client.admin.keyring root@server23:/etc/ceph/
scp /etc/ceph/ceph.client.admin.keyring root@server24:/etc/ceph/

# 复制ceph.mon.keyring到另外2个节点
#node1
scp /tmp/ceph.mon.keyring root@server23:/tmp/
scp /tmp/ceph.mon.keyring root@server24:/tmp/

#复制conf
scp /etc/ceph/ceph.conf  root@server23:/etc/ceph/
scp /etc/ceph/ceph.conf  root@server24:/etc/ceph/

#注意修改文件权限
#node1
chown ceph:ceph /tmp/ceph.mon.keyring
#node2
chown ceph:ceph /tmp/ceph.mon.keyring
#node3
chown ceph:ceph /tmp/ceph.mon.keyring

# 创建monitor数据目录. {集群名}-{节点名}
#node1
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-server22
#node2
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-server23
#node3
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-server24

# 用monitor map和keyring填充monitor守护程序。 注意修改节点名
#node1
sudo -u ceph ceph-mon --mkfs -i server22 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
#node2
sudo -u ceph ceph-mon --mkfs -i server23 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
#node3
sudo -u ceph ceph-mon --mkfs -i server24 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
执行这如果出错报/var/lib/ceph/mon/ceph-server23已经存在,就手动把这个目录删了,再次执行

# 查看生成的文件
#node1
ls /var/lib/ceph/mon/ceph-server22/
keyring  kv_backend  store.db

# 启动monitor服务
#node1
systemctl restart ceph-mon@server22
systemctl enable ceph-mon@server22
#node2
systemctl restart ceph-mon@server23
systemctl enable ceph-mon@server23
#node3
systemctl restart ceph-mon@server24
systemctl enable ceph-mon@server24

 查看集群状态

ceph -s,此时应该有三个监控启动

# 若异常则启用msgr2
# ceph mon enable-msgr2

manager节点部署

在三个节点分别执行

#server22
# 创建mgr密钥目录, 命名为: 集群名-主机名
mkdir /var/lib/ceph/mgr/ceph-server22
# 创建mgr身份验证密钥 注意里面的mgr.server22,为主机名
ceph auth get-or-create mgr.server22 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-server22/keyring
# 修改权限
chown -R ceph:ceph /var/lib/ceph/mgr/ceph-server22/

#server23
# 创建mgr密钥目录, 命名为: 集群名-主机名
mkdir /var/lib/ceph/mgr/ceph-server23
# 创建mgr身份验证密钥 注意里面的mgr.server23,为主机名
ceph auth get-or-create mgr.server23 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-server23/keyring
# 修改权限
chown -R ceph:ceph /var/lib/ceph/mgr/ceph-server23/

#server24
# 创建mgr密钥目录, 命名为: 集群名-主机名
mkdir /var/lib/ceph/mgr/ceph-server24
# 创建mgr身份验证密钥 注意里面的mgr.server24,node1为主机名
ceph auth get-or-create mgr.server24 mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-server24/keyring
# 修改权限
chown -R ceph:ceph /var/lib/ceph/mgr/ceph-server24/

# 注意官网这里用$name代替主机名,这里说的很含糊,建议使用主机名,无论如何和前面指定的那个host保持一致,这样后面就不会有一些奇怪的问题导致集群不能用,然后启动ceph-mgr守护进程:
ceph-mgr -i server22
ceph-mgr -i server23
ceph-mgr -i server24

# 启动ceph-mgr守护程序:
#node1
systemctl restart ceph-mgr@server22
systemctl enable ceph-mgr@server22
#node2
systemctl restart ceph-mgr@server23
systemctl enable ceph-mgr@server23
#node3
systemctl restart ceph-mgr@server24
systemctl enable ceph-mgr@server24

# 通过ceph status查看输出来检查mgr是否出现
这时候应该有三个mgr


[root@server24 ceph-server24]# ceph -s
  cluster:
    id:     88ad70c0-b814-426b-bd92-745cea0e9dd5
    health: HEALTH_WARN
            mons are allowing insecure global_id reclaim
            OSD count 0 < osd_pool_default_size 3

  services:
    mon: 3 daemons, quorum server22,server23,server24 (age 2h)
    mgr: server22(active, since 2h), standbys: server24, server23
    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:

OSD部署

# 复制keyring到其他2个节点
#node1
scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@server23:/var/lib/ceph/bootstrap-osd/
scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@server24:/var/lib/ceph/bootstrap-osd/

# 创建OSD
[root@node1 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0  100G  0 disk 
├─sda1        8:1    0    1G  0 part /boot
└─sda2        8:2    0   99G  0 part 
  ├─cs-root 253:0    0 61.2G  0 lvm  /
  ├─cs-swap 253:1    0  7.9G  0 lvm  
  └─cs-home 253:2    0 29.9G  0 lvm  /home
sdb           8:16   0   10G  0 disk 


# 3个节点上执行
ceph-volume lvm create --data /dev/sdb

# 启动各个节点osd进程
#node1
systemctl restart ceph-osd@0
systemctl enable ceph-osd@0
#node2
systemctl restart ceph-osd@1
systemctl enable ceph-osd@1
#node3
systemctl restart ceph-osd@2
systemctl enable ceph-osd@2


# 查看集群状态
ceph -s
  cluster:
    id:     8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb
    health: HEALTH_WARN
            mons are allowing insecure global_id reclaim
 
  services:
    mon: 3 daemons, quorum node1,node2,node3 (age 5m)
    mgr: node3(active, since 4m), standbys: node1, node2
    osd: 3 osds: 3 up (since 7s), 3 in (since 62s)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 2 objects, 577 KiB
    usage:   18 MiB used, 30 GiB / 30 GiB avail
    pgs:     1 active+clean
 
  io:
    client:   1.2 KiB/s rd, 36 KiB/s wr, 1 op/s rd, 1 op/s wr
    recovery: 27 KiB/s, 0 objects/s

mds部署

# 创建mds数据目录。
#node1
sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-server22
#node2
sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-server23
#node3
sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-server24


# 创建keyring:
#node1
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-server22/keyring --gen-key -n mds.server22
#node2
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-server23/keyring --gen-key -n mds.server23
#node3
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-server24/keyring --gen-key -n mds.server24

# 导入keyring并设置权限:
#node1
ceph auth add mds.server22 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-server22/keyring
chown ceph:ceph /var/lib/ceph/mds/ceph-server22/keyring
#node2
ceph auth add mds.server23 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-server23/keyring
chown ceph:ceph /var/lib/ceph/mds/ceph-server23/keyring
#node3
ceph auth add mds.server24 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-server24/keyring
chown ceph:ceph /var/lib/ceph/mds/ceph-server24/keyring
所有节点修改ceph.conf配置文件,追加以下内容

cat >> /etc/ceph/ceph.conf <<EOF
[mds.server22]
host = server22

[mds.server23]
host = server23

[mds.server24]
host = server24
EOF

重新启动所有服务

#node1
systemctl restart ceph-mon@server22
systemctl restart ceph-mgr@server22
systemctl restart ceph-mds@server22
systemctl enable ceph-mds@server22
systemctl restart ceph-osd@0

#node2
systemctl restart ceph-mon@server23
systemctl restart ceph-mgr@server23
systemctl restart ceph-mds@server23
systemctl enable ceph-mds@server23
systemctl restart ceph-osd@1

#node3
systemctl restart ceph-mon@server24
systemctl restart ceph-mgr@server24
systemctl restart ceph-mds@server24
systemctl enable ceph-mds@server24
systemctl restart ceph-osd@2

创建存储池以及ceph文件系统

    ceph所有的存储都是基于存储池才能分配,因此要先创建存储池,初始情况至少创建两个存储池(RADOS):1个用于存储数据,1个用于存储元数据信息,创建命令如下:

这个大小需要再研究

# 创建名字为cephfs_data的数据池 pg大小为128
ceph osd pool create cephfs_data 128
# 创建名字为cephfs_metadata的存储池 pg大小为64
ceph osd pool create cephfs_metadata 64

    存储池可以创建多个,并且所有的存储池共享底层的存储空间,比如A存储池占用了一部分,那个B存储池就只能用剩下的部分了,而且之后挂载后剩余大小的显示也会变小,这个后面可以验证 

    另外就是注意这里pg大小正常指定128或64就够了,正常默认1个pool最多支持250个pg,可以通过参数调整限制大小,这里两个池都是一样的数据池,后续创建文件系统会指定哪个用于数据,哪个用于元数据存储,这里名字只是个代号,然后基于存储池创建文件系统,命令如下:

# ceph fs new <fs名称> <元数据池> <数据池>
ceph fs new cephfs cephfs_metadata cephfs_data

    执行成功之后通过命令: ceph fs ls 查看存在的文件系统,正常显示如下:

ceph高可用,ceph,服务器,linux

     然后还可以执行 ceph mds stat 查看mds当前的活动状态

挂载

    挂载文件系统有两种方式,一种是基于操作系统内核直接挂载,另一种是使用ceph fuse挂载,通常推荐第一种方式挂载,这样性能和效率都是最高的,如果第一种方式挂载不成功的话,可以尝试使用fuse方式挂载,看看能否定位到什么问题,下面我们直接使用内核方式挂载:

    使用内核方式挂载要确认mount是否支持ceph: stat /sbin/mount.ceph ,正常安装好ceph包都会有/sbin/mount.ceph这个文件,说明支持ceph的文件系统,然后创建挂载点使用admin用户挂载:

在服务端节点直接挂载:

mkdir /home/unity-data
mount -t ceph :/ /home/unity-data/ -o name=admin

在客户端节点挂载:

# 获取最小配置 这里ssh的是ceph-mon节点机器 注意配置hosts 执行按照提示输入密码
ssh root@server22 "ceph config generate-minimal-conf" | tee /etc/ceph/ceph.conf
# 设置默认权限
chmod 644 /etc/ceph/ceph.conf
# 创建用户密钥环 cephfs是文件系统名称 这里用户名是zzy  对根目录/有rw权限
ssh root@server22 "ceph fs authorize cephfs client.zzy / rw" | tee /etc/ceph/ceph.client.zzy.keyring
# 设置密钥文件的权限
chmod 600 /etc/ceph/ceph.client.zzy.keyring
# 创建挂载点
mkdir /home/unity-data
mount -t ceph :/ /home/unity-data/ -o name=zzy

删除挂载:

umount /home/unity-data

安装Dashboard

开启插件。

#ceph mgr module enable dashboard

禁用SSL。

#ceph config set mgr mgr/dashboard/ssl false

配置监听IP。

#ceph config set mgr mgr/dashboard/server_addr 0.0.0.0

温馨提醒

此处必须设置监控地址为0.0.0.0,而不能是直接IP地址,因为其监控的是所有本地地址包括IPV4和IPV6,同时也不能禁用IPV6地址。

配置监听端口。

#ceph config set mgr mgr/dashboard/server_port 8443

在一个文件里写下密码,比如 vim /etc/ceph/dashboard_pwd.txt  

设置用户及密码。

#ceph dashboard ac-user-create admin -i /etc/ceph/dashboard_pwd.txt administrator

查看已开启模块信息。

#ceph mgr services

使用配置生效。

#ceph mgr module disable dashboard
#ceph mgr module enable dashboard

通过查看ceph mgr services命令输出地址。

#ceph mgr services
{
    "dashboard": "http://ceph-node1.localdomain:8443/"
}

访问Ceph Dashboard地址http://192.168.123.199:8443/#

如果发现用户权限有问题,登录不了,可以先删除用户,再创建

删除命令:ceph dashboard ac-user-delete admin 

常用命令

查看有几个client连接。对mds主查

ceph daemon mds.server23 session ls

健康:ceph health detail

查询osd状态和权重: ceph osd tree

查看osd服务: systemctl status ceph-osd@2

查看mon服务: systemctl status ceph-mon@server24

查看mgr服务:systemctl status ceph-mgr@server24

查看mds服务:systemctl status ceph-mds@server24

查询文件在哪个pg,哪个osd上,[1,2,0]代表三个osd都有文件,p1代表1是primary osd: 

ceph osd map cephfs_data /home/unity-data/out22-.txt
结果:osdmap e3313 pool 'cephfs_data' (2) object '/home/unity-data/out22-.txt' -> pg 2.b65944d6 (2.16) -> up ([1,2,0], p1) acting ([1,2,0], p1)

查询pg在哪个osd:

ceph pg map 2.16
osdmap e3313 pg 2.16 (2.16) -> up [1,2,0] acting [1,2,0]

查询fs状态、查mds主、及状态:ceph fs status

查询文件池名称:ceph fs ls文章来源地址https://www.toymoban.com/news/detail-724997.html

到了这里,关于ceph高可用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 推荐一个免费服务器网站|亲测可用

    亲测一段时间,非常好用 阿贝云【ABY】领先的高防服务器、云服务器、虚拟主机、免费空间、高防空间服务商!

    2024年02月15日
    浏览(66)
  • 阿里云服务器地域可用区怎么选?

    阿里云服务器地域和可用区怎么选择?地域是指云服务器所在物理数据中心的位置, 地域选择就近选择 ,访客距离地域所在城市越近网络延迟越低,速度就越快;可用区是指同一个地域下,网络和电力相互独立的区域, 可用区之间可以做到故障隔离 ,将应用部署到不同可用

    2024年02月11日
    浏览(57)
  • DNS服务器可能不可用,去了解决?

    wife连接上,微信,QQ可以聊天,但就是不可以打开浏览器,网络诊断为DNS服务器可能不可用  如何解决呢? 将网络设备电源拔掉,等待3分钟后,再插上电源。 打开控制面板。 点击网络和Internet。 点击网络和共享中心。 更改设备适配设置,之后右击你所使用的网络(WLAN or

    2024年02月13日
    浏览(38)
  • vscode通过跳板机连接远程服务器(亲测可用)

    一、windows用户需要先配置好本地的Remote SSH相关服务并开启服务。 二、打开VS Code,在扩展中搜索\\\"Remote - SSH\\\"并安装。 三、ctrl+shift+p呼出控制面板搜索remote ssh,点击第一个\\\"Connect to Host\\\",并且在弹出的面板中选择最下方的\\\"Configure SSH Hosts…\\\" 点第一个\\\"C:Users…\\\" 四、在出现的co

    2024年02月16日
    浏览(61)
  • 宝塔面板协助搭建RTMP直播服务器(亲测可用)

    1.RTMP直播需要Nginx-Rtmp模块,你现在需要先卸载宝塔所安装的Nginx(或你目前已经安装了的Nginx,记得先备份好重要文件。),然后找到/www/server/panel/install/nginx.sh,Ctrl+F找./configure  2.然后在他后面加上( (大约337行))--add-module=/www/server/nginx_plus/nginx-rtmp-module 3.直接输入git clone h

    2024年03月15日
    浏览(67)
  • 腾讯云服务器可用区是什么?怎么选择随机吗?

    腾讯云服务器可用区什么意思?可用区(Zone)是指腾讯云在同一地域内电力和网络互相独立的物理数据中心 ,一个可用区故障不会影响另一个可用区的正常运行,所以可用区用于构建高容灾、高可靠性应用。腾讯云服务器网来详细说下腾讯云服务器可用区是什么以及可用区

    2024年02月06日
    浏览(51)
  • Docker搭建Nginx+keepalived高可用负载均衡服务器

    一、背景 1.nginx高可用 在生产环境下,Nginx作为流量的入口,如果Nginx不能正常工作或服务器宕机,将导致整个微服务架构的不可用。所以负责负载均衡、反向代理的服务(Nginx)为了提高处理性能,高可用,也需要集群部署。本期咋们采用 keepalived 和 Nginx实现高可用。 2.Kee

    2024年04月22日
    浏览(47)
  • NVIDIA vGPU License许可服务器高可用全套部署秘籍

    第1章 前言 近期遇到比较多的场景使用vGPU,比如Citrix 3D场景、Horizon 3D场景,还有AI等,都需要使用显卡设计研发等,此时许可服务器尤为重要,许可断掉会出现掉帧等情况,我们此次教大家部署HA许可服务器。 第2章 环境准备 许可服务器:Centos Linux 7 (命令行和图形界面均可

    2024年02月07日
    浏览(43)
  • nginx两台负载均衡服务器之间使用keepalived实现高可用

    单点故障:某个重要的功能只有一份,如果他出现问题,会导致全局不能使用 “高可用性”(High Availability,缩写为HA)用于描述系统或服务在面临故障、硬件或软件问题时能够继续正常运行的能力。高可用性的目标是最大程度地减少系统中断或停机时间,确保用户可以随时

    2024年02月09日
    浏览(44)
  • 欧拉系统,yum不可用;服务器检查结果:***信息***您的授权码是无效的,请获得正确的授权码来注册大云Linux操作系统。您可以使用‘bclinux-license -g‘命令获得机器码

    服务器检查结果: ***信息***您的授权码是无效的,请获得正确的授权码来注册大云Linux操作系统。您可以使用\\\'bclinux-license -g\\\'命令获得机器码,然后与我们联系帮您产生订阅从而获得正确的授权码。   rpm -qa | grep license rpm -e bclinux-license-manager-4.0-1.oe2203.bclinux.x86_64  ##卸载这个包

    2024年01月16日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包