自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 收藏
  • 关注

原创 Docker-consul容器服务自动发现与注册

-v /var/run/docker.sock:/tmp/docker.sock:docker.sock的是docker守护进程的UNIX的套接字文件,把他映射到容器当中,registrator容器可以监听docker的所有事件,并且完成自动注册服务。#-v /var/run/docker.sock:/tmp/docker.sock:docker.sock的是docker守护进程的UNIX的套接字文件,把他映射到容器当中,registrator容器可以监听docker的所有事件,并且完成自动注册服务。

2023-12-24 17:15:43 1112

原创 Docker-harbor私有仓库

harbor:是VMware公司开发的,开源的企业级的docker registry项目。harbor都是基于docker容器化部署的,docker-compose一键编排,安装。https:docker-harbor默认的通信协议是https加密通信协议。docker3 安装仓库-----实现远程同步 20.0.0.62。私有,自定义用户的形式登录仓库,拉取或者上传镜像。可以帮助用户快速的搭建一个企业级的docker仓库的服务。Docker3仓库同步docker2仓库里的项目。

2023-12-24 17:06:22 1272

原创 Docker-compose单机容器编排

docker-compose 既可以基于dockerfile,也可以基于镜像,一键式拉起镜像和容器。docker-compose 核心就是yml文件,可以定义容器的一切。docker-compose:命令的开头,使用docker-compose进行容器编排。-f:使用特定的compose的模版文件,一般都用docker-compose.yml。docker-compose:单机容器编排工具,可以实现一键式的拉去镜像和创建容器。Dockerfile:先配置好文件,然后build,镜像-------->容器。

2023-12-24 16:57:35 1086

原创 dockerfile创建镜像-----LNMP+wordpress

创建容器内的数据卷,即可以对外给宿主机挂载,也可以对内,给容器做为挂载点。dockerfile创建镜像 INMP+wordpress。#创建系统用户wordpress可以从任意网段访问。把nginx和wordpress两个压缩包拖进来。#查看docker的自定义网段。把压缩包mysql拖进来。#设定容器启动时的命令。

2023-12-24 16:51:54 975

原创 docker创建镜像的方式---dockerfile

copy只能复制,不能解压,而且只能是本地文件,不支持URL路径。镜像层是不可变的,你在某一层当中添加一个新的命令,但是下一层删除了指令,镜像中基于这个命令创建的文件依然存在,但是在容器中看不见。根据官方提供的镜像源,创建镜像,然后拉起容器。每一层都是layers,每一层都包含文件系统的一部分,这些层次叠加在一起,最终形成的就是rootfs。RUN:在基础的镜像上执行的命令,每一个run就是一层,分层越多,镜像越大。VOLUME:创建一个容器内的挂载点,既可以为宿主机挂载,也可以供容器挂载。

2023-12-24 15:48:22 648

原创 docker的资源控制

-cpu-shares 是给每个容器使用cpu设置了相对的权重,权重高的,可以使用cpu的资源更多,但是,如果只有一个容器在运行,即便设置了权重,但是没有其他更高的权重的容器来占用资源,权重低的容器依然不受限。在使用dd获取空字符集是从文件系统的缓存当中输入,速度是比较快的,禁用文件系统缓存,直接把数据写入磁盘,可以更真实的测试设备的性能,模拟直接写入物理设备的情况。CFS调度周期的长度,微秒,在每个周期内,容器可以使用指定比例的cpu时间,默认情况都是100毫秒。我们也可以自定义容器的调度周期。

2023-12-24 15:30:42 1207

原创 docker网络

数据卷是一个供容器使用的特殊的目录,在容器中,和宿主机的目录进行映射,主机和宿主机之间都可以对目录中的文件进行修改,双方同步生效。问题:docker的网桥是宿主机虚拟出来的,并不是一个真正存在的网络设备,外部网络无法寻址找到。80端口被test1容器中的nginx占用了,把test1容器中的nginx停用,然后重新打开test2容器中的nginx。简单点说,就是会在源容器和接收容器之问建立一条隧道,接收容器可以看到源容器指定的信息。容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。

2023-12-24 15:27:34 804

原创 docker的基本管理和相关概念

docker的特性:即使在创建过程中报错,容器还是会被创建,但是这个容器不可用导入镜像,或者导入容器镜像,如果和已有标签重复,导入的镜像或者容器镜像, tag这一项就会变成none。类似与虚拟机的ISO文件,一个镜像就是一个可执行的包,包里面吗包含了运行这个程序的所有内容(代码,配置文件,环境变量。docker镜像也是一个压缩包,不是一个解压的文件,是一个环境部署的脚本,甚至包含了完整的操作系统。docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的,可移植的,自给自足的容器。

2023-12-24 15:22:15 1073

原创 zabbix监控

减轻主服务器的压力。1.zabbix server的作用:通过一系列的组件SNMP,zabbix agent,ping通过端口远程的监控客户端的数据,把数据收集到服务端进行展示,以及系统用户分析的界面(web)5.zabbix_sender:可选组件,提供命令行的工具,可以将自定义数据发送到zabbix服务器,对于不直接由zabbix代理监控的数据或者从脚本来的数据,比较方便的。2.zabbix agent就是被监控的目标机器,把需要收集的数据以及自定义的监控项数据,发送到zabbix server。

2023-12-24 15:12:54 388

原创 zookeeper集群+kafka集群

点对点一对一:消息的生产者发送消息到队列中,消费者从队列中提取消息,消费者提取完之后,队列中被提取的消息将会被移除。经纪人:Broker 每个kafka节点都有一个Broker,每个负责一台kafka服务器,id唯一,存储主题分区当中数据,处理生产和消费者的请求。zookeeper:zookeeper负责保存元数据,元数据就是topic的相关信息(发在哪台主机上,指定了多少分区,以及副本数,偏移量。EPOCH每个leader任期的代号,没有leader,大家的逻辑地址相同,每投完一次之后,数据是递增。

2023-12-24 15:07:32 749

原创 ELK----filebeat日志收集工具

filebeat是一个轻量级的日志收集工具,所使用的系统资源比logstash部署和启动时使用的资源要小的多。filebeat可以运行在非java环境。他可以代理logstash在非java环境上收集日志。#定义了logstash的工作线程,默认值就是cpu数。filebeat无法实现数据的过滤,一般是结合logstash的数据过滤功能一块使用。ELK:filebeat日志收集工具和logstash相同。filebeat收集的数据可以发往多个主机。再到kibana上创建索引查看是否有日志记录。

2023-12-24 14:54:24 1473

原创 ELK日志分析系统

总结:ELK的作用,当我们管理一个大集群时,需要分析和定位的日志就会很多,每一台服务器分别去分析,将会耗时耗力。极大的提高了定位问题的效率。l:Logstash 数据收集引擎,支持动态的(实时)从各种服务应用收集日志资源,还可以收集到日志数据进行过滤、分析,丰富,统一格式等等操作。#所有的键盘命令行输出转化为标准输(rubydebug的模式),6.0之后,默认的输出格式就是rubydebug的模式。#6.0之后logstash自带的输出格式rubydebug,自动的把输出格式,定义为统一的标准格式输出。

2023-12-24 14:39:33 823

原创 redis-cluster集群

主从复制:主宕机之后,主节点原来负责的哈希槽位将会不可用,需要从节点代替主节点继续负责原有的哈希操作,保证集群正常工作,故障切换的过程中,会提示集群不可用。集群模式自带哨兵模式,可以自动实现故障切换,但是在故障切换完成之前,整个集群都将不可用,切换完毕之后,集群会立即恢复。哈希槽位的值是连续的,如果出现不连续的哈希槽位,或者有哈希槽位没有被分配,集群会即将报错。集群模式当中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读。在集群模式当中,只能选择0库,集群不能切换库。

2023-12-24 14:32:00 999

原创 redis的主从复制和哨兵模式

主节点在一定时间内没有回复或者回复了错误的消息,这个时候,哨兵就会主观的认为主节点下线了,超过半数的哨兵节点认为主节点下线了,这个时候才会认为主节点是客观下线。哨兵节点通过raft算法(选举算法),每个节点共同投票选举出一个新的master,然后新的master实现主节点转移和故障恢复通知。#服务器宕机的最大时间,180秒之内如果主节点但没有响应,从节点开始投票,客观认为主下线了。主从复制推荐使用AOF,通过AOF文件实现实时持久化,主从节点都开启AOF持久化服务从节点同步的就是AOF文件。

2023-12-24 14:29:15 1012

原创 redis的性能管理

RSS是向系统申请的内存空间,redis占用物理空间额外的开销比例,比例越低越好,redis实际占用的物理内存和向系统申请的内存越接近,额外的开销越低。使用redis内置的LRU算法,把已经设置了过期时间的键值对中淘汰数据,移除最近最少使用键值对(针对已经设置了过期时间的键值对)(对设置了过期时间的键值对进行随机移除。#分配器碎片的比例,redis主进程调度时产生的内存,比例越小越好,值越高,内存的浪费越多。已经设置了过期时间的键值对,从当中挑选一个即将过期的键值对(针对有设置过期时间的键值对)

2023-12-24 14:25:46 1231

原创 redis的高可用

AOF重写是把redis进程内的数据,转化为写命令,同步到新的AOF文件当中(不会额外的生成一个新的文件,只是在原内容中进行压缩)。BGSAVE工作流程:主进程会通过fork机制创建一个子进程,子进程的创建过程中,主进程会阻塞,子进程创建完毕,主进程解除阻塞。在实际中,会关闭自动的文件重写。这个是AOF文件执行重写的最小值,避免开始启动redis后,文件太小,然后频繁的进行重写。rdb是redis的默认持久化文件,但是一旦开启AOF持久化,那么redis会以AOF的持久化文件作为最高优先级。

2023-12-17 19:36:21 126

原创 redis非关系型数据库

这里默认为/usr/local/bin/redis-server,需要手动修改为/usr/local/redis/bin/redis-server,注意要一次性正确输入。Executable: /usr/local/redis/bin/redis-server #可执行文件路径。Cli Executable : /usr/local/bin/redis-cli #客户端命令工具。如果部署了多个redis进程,虽然能提高redis的并发处理能力,但是会给服务器的cpu带来很大的压力。

2023-12-17 19:23:35 627

原创 GFS分布式文件系统

分布式府志卷是最常用的分布式文件存储方式,他是实现根据,存储文件时还是分布式的存储方式,分开存储,但是会进行复制。1.BRICK(存储块),存储服务器提供的用于物理存储的专用分区,GFS当中的基本存储单元。在分布式卷模式下,没有对文件进行分块,直接存储在某个server的节点上。GFS是把多个不同服务器上的不同节点,不同硬盘组合起来,形成一个卷(基于网络的虚拟磁盘)。复制卷具备冗余,坏一个节点不影响数据,但是要保存副本,磁盘利用率50%传统式老的分布式系统元服务器,元服务器保存存储节点的目录树信息。

2023-12-17 19:10:45 86

原创 rsync远程同步

inotify通知接口,可以用来监控文件系统的各种变化情况,文件存取,删除,移动,修改都可以被监控。可以保持源文件或者目录的权限不变 时间,软硬连接,所有者,所在组等句可以保持不变。在文件数量较多的情况下,比如百万和千万级别的文件,rm -rf * 速度很慢。-avz:保留文件权限,v:显示详细过程 z:同步过程中对文件进行压缩。rsync同步速度很快,适合同步大文件,可以结合数据库同步使用。--delete:删除目标位置有,但是原始位置没有的文件。-a:归档模式,可以保留文件的权限,属性等等。

2023-12-17 19:03:15 57

原创 squid代理服务器

squid从一个缓存变成了一个web服务器的反向代理的加速模式 squid监听的80端口的请求。squid不是转发请求,要么从缓存获取数据,要么直接请求绑定的web端口。缓存功能使用的内存空间大小,容量最好为4的倍数。TCP_REFRESH_UNMODIFIED/304: TCP_REFRESH_UNMODIFIED 表示该请求是由于缓存未过期,#启动 Squid,第一次启动 Squid 服务时,会自动初始化缓存目录。#添加,指定程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功。

2023-12-17 16:43:52 47

原创 MHA实验和架构

即使设置了权重,但是从服务器的relay_logs落后master100M,即使设置了权重也不会切换。node组件就是用来监控MySQL的状态的。node组件------>需要部署在所有服务器上,manger组件依赖于node组件,node组件监控mysql的状态。Mysql的单点故障问题,一旦主库崩溃,MHA可以在0-30秒内自动完成故障切换。复制上述的自动切换时 VIP 管理的脚本到 /usr/local/bin 目录,MHA使用的是半同步复制,只要有一台从服务器写入数据,就会自动提交给客户端。

2023-12-17 16:30:33 348 1

原创 MYSQL主从复制和读写分离

只要执行完之后,客户端提交事务,主mysql会立即把结果返回给从服务器,主mysql并不关心从mysql是否已经接受,并且处理。主一旦崩溃,主mysql的事务可能没有传到从mysql,这个时候强行把从提升为主,可能到新的主mysql,数据不完整。数据库不是一定需要读写分离的,只有在某些程序在使用数据库过程中,更新少,但是查询较多,这种情况可以考虑读写分离。以确保持久性,最高级别的数据安全性,但是会影响性能,默认就是1。主从复制:主mysql上的数据,新增,修改库,表,表里的数据,都会同步到从mysql上。

2023-12-17 16:26:33 41

原创 MYSQL存储过程

要想使用存储过程里面的结果,必须要out才能传出参数。INOUT:表示调用者向存储过程传入值,存储过程对传入值可能进行额外的操作之后,返回给调用者。insert into info values(2,'dym1',@num,'是')注意点:使用存储过程中,在内部变量不需要加@,外部使用和复制要加@,引用变量。delimiter的作用保证整个存储过程的中的sql语句能够被完整的执行。call test3 调用存储过程,把变量的值传入存储过程。复杂的,需要很多sql语句联合执行完成的任务。

2023-12-17 16:20:03 25

原创 MYSQL高级语句

统计name的行数,计算出学生的个数,把成绩也查出来,然后按照统计出来的学生个数,升序排列,按照地址分组,学生的成绩大于等于70。在左连接当中,左侧表示基础表,接受左边的所有行,然后和右表(参考表)记录进行匹配。exists:关键字在子查询时,主要用于判断子查询的结果集是否为空,不为空返回true,为空,false。接受右侧表的所有记录,匹配的记录,不匹配的记录null值。在mysql查询时,表的名字或者字段名太长,可以使用别名来进行替代,方便书写,增加可读性。在工作当中,我们查询的表未必是真表。

2023-12-16 17:36:12 61

原创 MYSQL备份和恢复

mysqlbinlog --no-defaults --start-position='位置点' --stop-position='位置点' 文件名 | mysql - u root -p。mysqlbinlog --no-defaults --start-datetime='时间点' --stop-datetime='时间点' 文件 | mysql -u root -p。记录修改的sql语句,高并发情况下,记录sql语句时候的顺序可能会出错,恢复数据时可能会导致丢失和误差,效率比较高。

2023-12-16 17:22:07 48

原创 MYSQL存储引擎

2.动态表,动态表可以包含可变字段,记录的长度是不固定的,优点是占用空间少,频繁更新数据,删除记录,会产生碎片。存储引擎:mysql当中数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制,索引技巧 锁定水平以及最终提供的不同功能和能力,这些就是我们说的存储引擎。数据提交更新时,进行校验,发生冲突,数据不生效而已,没有其他的报错或者卡停。如果说使用的id的字段是主键,innodb对主键使用的聚簇索引,锁定整行的记录。排他锁,一个事务在操作,另一个事务的操作无法执行,只能查,排它锁只能加一个。

2023-12-16 17:09:56 115

原创 MYSQL索引和事务

幻读:一个事务对一个表中的数据进行了修改,可能会涉及到表中的全部数据。事务是一种机制,一个操作序列,包含了一组数据库的操作命令,所有命令都是一个整体,向系统提交或者撤销的操作,要么都执行,要么都不执行。I:隔离性 指在并发环境中,当不同事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。索引:索引是一个排序的列表,列表当中存储的是索引的值和包含这个值的数据所在行的物理地址。要么都成功,要么都失败。总结:在事务管理中,原子性是基础,隔离性是手段,一致性是目的,持久性是最终的结果。

2023-12-10 17:33:02 68

原创 MYSQL数据库的概念和sql语句

它是数据库最小工作单元,要么全部执行成功,要么全部不执行,只要有一个操作时间,整个执行的序列都会被回滚,完成的操作也会被撤销。创建临时表:临时表一般用于调试,而且临时表创建之后在表的目录当中是不显示的,连接退出之后,临时表会被销毁。数据库:数据库就是用来组织(各个数据之间是有关联,是按照规则组织起来的),存储和管理(对数据的增,删,改,查)数据的仓库。4,唯一性约束:unique,确保列中的所有值都是唯一的,类似于主键,但是可以为空,而且一个表可以有多个唯一约束。(无限制的可以随便写,也要根据类型的长度)

2023-12-10 17:22:15 54

原创 Haproxy

Haproxy是一个无状态的负载均衡器,没缓存,也没有会话保持,靠应用程序实现会话保持。日志问题:haproxy的日志比较简单,只提供基本的请求日志和错误日志。需要更高级的日志,人工自定义。Haproxy的缺点:单节点部署,单实例运行,代理服务器出现故障,整个负载集群全部不可用。Haproxy:法国人威利塔罗开发的,在2000年基于c语言开发的一个开源软件。16 #同时并发进程数,要么和cpu相同,要么是cpu的两倍。lvs-----haproxy-----nginx(bug多,稳定也差)

2023-11-21 18:28:23 87

原创 LVS+keepalived——高可用集群

主备切换:主服务器发生故障或者不可达,VRRP协议会把请求转移到备服务器,通过组播地址,VRRP可以迅速的通知其他服务器发生了主备切换,确保新的主服务器可以正常的处理客户端的请求。不参与集群的运转,主调度器出现了故障无法运行,备调度器才会承担主调度器的工作。故障恢复:一旦主服务器恢复通信,由组播地址进行通信,发现在恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器,调度和接受请求。主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理,其余的备用调度器处在冗余状态。

2023-11-21 17:10:46 1020

原创 LVS集群

客户端进入时请求调度器的VIP地址,通过LVS交换器配置的算法把请求的目的MAC地址,修改为后台的真实服务器的MAC地址。3、 通过配置转发策略,访问公网的VIP会把请求转发到后台的RS。3.后端真实服务器接受请求,处理完成之后,由于后端服务器直接把响应结果转发给客户端,响应报文中的目的MAC地址修改成客户端的MAC地址,直接把响应报文转发到客户端。2. LVS的调度器接受请求之后,根据算法选择一台后端的真实服务器,请求转发到后端RS,请求的报文的目的MAC地址,修改成后端真实服务器的MAC地址,转发。

2023-11-19 21:41:22 470

原创 页面的动静分离

192.168.120.20 tomcat1 动态网页。192.168.120.50 tomcat2 动态网页。192.168.120.30nginx1代理服务器。192.168.120.60 nginx2七层代理。192.168.120.40 nginx七层代理。进入tomcat1和tomcat2。./startup.sh 开启。./shutdown.sh 关闭。实现动态和静态页面负载均衡。同时关闭防火墙和安全机制。访问静态和动态页面分开。四层+七层+动静分离。

2023-11-13 20:12:58 83

原创 tomcat

net.core.rmem_default, net.core.wmem_default, net.core.rmem_max, net.core.wmem_max: 设置内核套接字接收和。net.ipv4.conf.default.rp_filter 和 net.ipv4.conf.all.rp_filter: 控制反向路径过滤,提高网络安全性。net.ipv6.conf.all.disable_ipv6 和 net.ipv6.conf.default.disable_ipv6: 禁用IPv6。

2023-10-30 14:12:31 440

原创 正向代理和反向代理

四层代理是基于IP地址和端口号,只负责将ip和端口转发到后端服务器,不对请求做任何处理,只是负责转发而已,而且四层走的是内核,四层转发速度较快,四层代理无法提供更高级的功能,只是转发。url_hash和ip_hash是结合在一块使用,可以使用于并发较高的场景,只要是ip_hash和url_hash,访问之后第二次都是访问缓存,可以降低后端服务器的压力。正向代理:客户端也是访问代理服务器,代理服务器转发请求,客户端只代理服务器的地址,后端的webserver的IP地址,客户端也不知道。

2023-10-27 14:10:19 241

原创 location的优先级和匹配方式

总结:rewrite和location都可以跳转,似乎有点相同,但是区别在于rewrite是在同一域名之内更改获取资源的路径,location是对路径访问控制。location = 完整路径 > location ^~ > location ~,~* > location /test > location /在http模块有server,在server模块才有location,location匹配的是uri。last:本条规则匹配完成后,继续向下匹配新的location URI规则。

2023-10-20 17:28:46 68

原创 nginx优化和防盗链

time_wait状态可以重用,一个连接就要占用一个端口,time_wait把所有的端口全部占满了,新的连接请求也不会拒绝。http_gzip_static_module 可以对文件内容和图片进行压缩的功能,节约宽带,提升用户的访问速度。压缩级别:压缩比率1-9 1是速度快,压缩比最低,9 压缩的速度最慢,但是压缩比最高,默认是1。Bug多,更新版本速度比较快 ,所以一旦版本号暴露出去,有可能给对方提供攻击的漏洞。在http大模块中修改,不在server中,也不是location中。

2023-10-14 20:46:35 32

原创 LNMP及论坛搭建

vim /usr/local/nginx/html/index.php #替换原来的测试页内容。N:(前台)nginx:作为LNMP架构的前端,是一款功能强大,稳定性好的Web服务器程序,L:(平台)Linux:作为LNMP架构的基础,提供用于支撑Web站点的操作系统,在企业网站、业务系统等应用中,各种账户信息、产品信息,客户资料、

2023-10-14 20:23:33 26

原创 nginx网站服务

(在实际操作中,为了维持服务器的稳定,一般设置在20000个左右)conf:保存nginx的所有配置文件,其中nginx.conf是nginx的主配置文件。location块:location模块只能配置在server模块当中,匹配uri。七层反向代理模块,只能配置在http模块中,或者stream模块中。html:保存nginx的web文件,.html结尾的文件,图片。proxy:代理功能,核心功能模块之一,配置反向的功能。nginx -V:查看版本和nginx支持的配置模块。

2023-10-13 17:38:23 24

原创 web基础和http协议

缓存:cookie记录用户状态,跟踪统计用户访问该网站的习惯,识别用户身份,保存客户信息。运行的程序也是相同的。http:本身是一种无状态协议,http协议本身不会对发送的请求和响应进行任何处理。500:内部服务器错误 (如果出现500,检查防火墙,检查进程也就是服务状态,检查端口,检查配置文件,端口号被占用)post向服务端发送数据,按照http协议进行,服务器添加数据,post的请求方式会修改服务器上的数据。建立连接:tcp/ip协议与服务器建立连接(三次握手),客户端向服务器的80端口发送连接请求。

2023-10-13 17:23:57 28

原创 iptables防火墙

2.入侵防御:以透明模式工作,分析数据包的内容,一切进入本机的内容进行防护,木马,蠕虫,系统漏洞进行分析判断,然后进行判断,主动的防护机制,部署在整个架构,或者是集群的入口处。3.external:外部区域,允许ssh或者dhcpv6-client的流量可以传入,其他的全部拒绝,默认通过此区域转发的ipv4流量地址,可以进行伪装。根据预定义的规则,人工设置的规则,对符合条件的数据包进行过滤,也是iptables的默认表。1.入侵检测机制 特点:阻断,量化,定位来自内外的网咯的威胁情况。

2023-10-07 23:22:09 23

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除