- 博客(53)
- 资源 (7)
- 收藏
- 关注
原创 TiKV集群部署
注:如果/home/tikv/.ssh/目录下有不正确的id_rsa文件,会导致鉴权失败,请删除~/.ssh/id_rsa*;将中控机.ssh/id_rsa.pub内容追加到各部署机的/home/tikv/.ssh/authorized_keys文件末尾,没有.ssh目录则先手动创建.ssh目录。注:如果要输入密码,统一输入tikv(保证统一),其它现象直接默认,如果密码输错了,可以用sudo userdel tikv重来。注:如果这一步没有成功,可以重新执行下,确保没有Fail,才能执行下一步。
2024-07-19 14:12:05
360
原创 juicefs部署实践
注:如果是CephRados作为对象存储后端,则需要将ceph.conf和ceph.client.admin.keyring拷贝到/etc/ceph/目录下,然后执行format, juicefs.ceph format --storage ceph --bucket ceph://juicefs_data --access-key ceph --secret-key client.admin。如:juicefs format --storage s3 --bucket。注:如果是研测环境,url换成"
2024-07-19 14:09:43
814
原创 juicefs 一致性
内核元数据缓存时间受到mount参数控制(只有过期失效),open时默认会绕过内核的文件属性缓存,到达juicefs客户端,如果--opem-cache为false(默认是false),则会绕过客户端内存的文件属性缓存,去元数据服务器同步文件属性。对于跨chunk的不同机器client的并发写,juicefs本身是不提供原子保证的,需应用自己调用SetLk接口来实现互斥。对于同一个chunk不可机器client的并发写,后写的会覆盖之前写的;元数据更新是事务更新,数据更新是写时复制(不覆盖)
2024-07-19 14:07:11
187
原创 ceph log内容解析
dout和ldout类似,也是带前缀的dout_impl,只有个别模块有使用,如src/mds/MDBalancer.cc中。分别表示 时间戳 线程id 日志等级 子模块 内容实体。定义在src/common/dout.h中。定义在src/log/entry.h中。ldout是带前缀的dout_impl。每条log都是由一个Entry构成。如osd的一条log。
2024-07-19 14:03:32
388
原创 ceph进程网卡绑定逻辑
->pick_addresses() // 会读取"cluster_network_interface"和"public_network_interface"这两个配置项来过滤ip。main() //如osd进程,是ceph_osd.cc文件的main函数;mon进程,是ceph_mon.cc文件的main函数。
2024-07-19 13:53:23
521
原创 ceph条带化原理
数据按照ChunkSize进行布局,不满一个StripeWidth的,后面的StripeUnit进行padding (不满一个条带的按照一个条带对齐,牺牲空间换取性能)
2024-07-19 13:52:47
92
原创 cephfs journal模块
fs元数据更新时,MDS执行journal_and_reply,首先封装成log_event,通过submit_mdlog_entry提交到pending_events中,然后submit_thread将journal flush到metadata pool的rados object(200.XXXXXXXX)中,后续在trime_mdlog时,将dirty inode写到metadata pool的rados object(inodeNum.XXXXXXXX)中。
2024-07-19 13:51:51
112
原创 cephrbd常用命令
拷贝ceph.client.{username}.keyring到/etc/ceph/目录。applicationname是rbd、rgw、cephfs中其中一项。(默认用户id=admin,如果不需要创建新用户则可跳过此步)如果不输入poolname,默认poolname为 "rbd"确认内核DYNAMIC_DEBUG属性开启。该步骤执行后会输出该用户对应的key。登录client机器。
2024-07-19 13:50:53
237
原创 cephfs revoke caps逻辑
即重新执行handle_client_mkdir。client侧经过Client::ms_dispatch2() -> Client::handle_caps() -> Client::handle_cap_grant() -> check_caps() -> send_cap() 发送CEPH_CAP_OP_UPDATE操作(CEPH_MSG_CLIENT_CAPS消息)给server。
2024-07-19 13:48:48
288
原创 cephfs client读写流程
fuse_ll_read() -> ll_read() -> Client::_read() -> _read_async() (带缓存) -> ObjectCacher::file_read() -> readx() -> _readx() -> bh_read() -> read_trunc() -> op_submit() -> _op_submit_with_budget() -> _op_submit() -> _send_op() -> send_message()以cephfuse为例。
2024-07-19 11:31:46
401
原创 osd挂掉对业务的影响
对于读请求,如果是主osd挂掉了,需要Peering完之后,client收到最新osdmap后重试新的pg主osd读,所以也是约20s。结论:一个osd挂掉,按照默认配置,当时的写请求约卡顿20s;
2024-07-19 11:29:48
198
原创 rados localize read
获取自己节点的crush_location,然后在localize read时,拿pg的每个osd和自己的crush_location进行公共祖先最短距离比较。首先,任何节点在启动时会通过main()->global_init()->crush_location.init_on_startup()根据crushmap进行距离打分。根据crushmap进行距离打分。
2024-07-19 11:27:39
157
原创 cephrgw lifecycle理解
看代码是WriteOP)3,cls_rgw_lc_get_entry 获取entry,因为entry的状态是processing。3,cls_rgw_lc_get_entry 获取entry,成功,但是为empty。2,cls_rgw_lc_get_head 获取对象的head,成功。2,cls_rgw_lc_get_head 获取对象的head,成功。2,cls_rgw_lc_get_head 获取对象的head,成功。3,cls_rgw_lc_get_entry 获取entry,成功。
2024-07-19 11:23:57
412
原创 cephrgw元数据和数据布局
提示:每个rados object有如下几个组成部分,分别是omap(omapheader、omapkey、omapval)、xattr、data,相关的CLI command。如storage_class、mtime、size、etag、content_type、存放的pool。part、stripe(每个part最大15MB,每个stripe最大4MB,stripe是基本单元)[4MB, 15MB]的对象,有head、tail radosobject。bucket中对象的布局信息。
2024-07-19 11:16:08
496
原创 linux lvm使用
lv:logic volume, 是逻辑单元vg:volume group, 是逻辑桶pv:physical volume,是物理单元一个vg是有一个或者多个pv组成的逻辑桶;用户可以在vg里创建lv。
2024-07-11 21:09:07
167
原创 MySQL常用命令
如: ALTER TABLE testdatabase.testtable ADD COLUMN testword varchar(255) DEFAULT ‘’ COMMENT ‘’;
2024-07-11 21:03:56
475
原创 vscode编译环境配置-golang
如果单测函数上方不显示run test | debug test,需要安装Code Debugger(因为以前的go Test Explorer不再被维护了)
2024-07-11 20:53:56
266
原创 限制机器上core文件大小防止打爆磁盘
首先,先编写cleanup_core_files.sh脚本(假设只需要保留最近的3个core文件),然后在机器上设置crontab定时任务,如1分钟运行一次。
2024-07-11 16:22:50
125
原创 cephfs fuse预读机制
ceph-fuse->ceph ceph-fuse会检测是否是顺序读,根据顺序程度动态调整预读大小128K - 16M之间(client_readahead_min=131072 client_readahead_max_periods=4),实际情况(按照4k顺序读一个大文件)我们抓取到,33%没有预读,23%预读了128K,21%预读了384K,8%预读了1M,剩下的预读范围在[128K, 16M]之间。
2024-07-11 15:36:18
201
原创 关于crontab 环境变量
默认crontab执行的时候不会执行类似bashrc这样的环境脚本(也就是不加载用户的环境变量),所以在执行非默认路径 (/usr/bin)下的二进制的时候,需要写绝对路径。
2024-06-07 14:48:06
166
原创 linux 删除磁盘分区
如果报target is busy,说明有进程在访问挂载点,通过fuser命令查看哪些进程在访问,(确保可删除后)删掉对应进程即可。
2024-06-07 14:35:21
476
原创 shell中while read line读取文件执行ssh时只读了一行内容
原因:while循环时,文件内容已经缓存到buffer区,ssh默认以stdin作为输入读取了后面的全部内容,所以导致看上去while里只执行了一行。
2024-06-07 14:14:51
134
原创 ceph ec 一致性原理
简单说来,使用了pglog来实现分片间的一致性,不仅记录了redo信息,而且记录了undo,当primary osd向所有secondary发送写请求时,各个分片写入pglog,并在pginfo中更新自己的last_update(pglog和pginfo以及数据、元数据一起作为一个transaction queue到objectstore),当primary osd收到全部ack后,标记刚才写入的pglog不可回滚(undo信息可以删除,释放空间)更新自身pginfo的last_complete。
2024-05-31 22:16:19
192
原创 正确安装指定版本程序包
从APT源获取最新的软件包列表以确保可以知道软件包的最新可用版本。1,设置软件包管理公钥(以确保后续下载的软件包的可靠性)以ubuntu上安装15.2.13的ceph软件包为例。3,更新本地软件包列表(不下载更新实际的软件包)4,查看对应包的可用版本。
2024-05-28 11:17:50
139
原创 vscode通过跳板机远程登录服务器配置
b,当vscode在本地ssh到跳板机时,需要找到特定路径的的私有密钥文件,vscode的ssh配置文件在特定的路径,如c:>Users>Administrator>.ssh>config,每次执行ssh时,vscode会读取这个config的配置,每个配置Unit是有特定的格式,如需要配置Host HostName Port User IdentityFile ProxyCommand(如果是xshell,xshell可以配置xagent进行身份验证,xagent记录了IdentifyFile路径)
2024-05-23 19:32:16
549
2
原创 cpu top指标的理解
sys:cpu在处理内核态(不包括硬中断和软中断)进程的任务。(往往是系统调用陷入内核执行,如spinlock)user: cpu在处理用户态(没有配置nice)进程的任务。nice: cpu在处理设置有nice的用户态进程的任务。wait:cpu闲置(至少有一个进程在等待IO)idle:cpu闲置(且没有进程在等待IO)cpu所处的状态细分为这么几种。hi:cpu处理硬中断。si:cpu处理软中断。
2024-04-25 20:45:29
215
1
飞思卡尔单片机高效C语言编程(中文)
2013-12-18
wifi技术培训
2013-12-16
如何学好网络编程
2013-11-10
it人士必读
2013-11-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人