- 博客(55)
- 资源 (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
655
原创 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
1328
原创 juicefs 一致性
内核元数据缓存时间受到mount参数控制(只有过期失效),open时默认会绕过内核的文件属性缓存,到达juicefs客户端,如果--opem-cache为false(默认是false),则会绕过客户端内存的文件属性缓存,去元数据服务器同步文件属性。对于跨chunk的不同机器client的并发写,juicefs本身是不提供原子保证的,需应用自己调用SetLk接口来实现互斥。对于同一个chunk不可机器client的并发写,后写的会覆盖之前写的;元数据更新是事务更新,数据更新是写时复制(不覆盖)
2024-07-19 14:07:11
289
原创 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
505
原创 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
604
原创 ceph条带化原理
数据按照ChunkSize进行布局,不满一个StripeWidth的,后面的StripeUnit进行padding (不满一个条带的按照一个条带对齐,牺牲空间换取性能)
2024-07-19 13:52:47
154
原创 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
190
原创 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
367
原创 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
402
原创 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
482
原创 osd挂掉对业务的影响
对于读请求,如果是主osd挂掉了,需要Peering完之后,client收到最新osdmap后重试新的pg主osd读,所以也是约20s。结论:一个osd挂掉,按照默认配置,当时的写请求约卡顿20s;
2024-07-19 11:29:48
291
原创 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
202
原创 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
528
原创 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
600
原创 linux lvm使用
lv:logic volume, 是逻辑单元vg:volume group, 是逻辑桶pv:physical volume,是物理单元一个vg是有一个或者多个pv组成的逻辑桶;用户可以在vg里创建lv。
2024-07-11 21:09:07
193
原创 MySQL常用命令
如: ALTER TABLE testdatabase.testtable ADD COLUMN testword varchar(255) DEFAULT ‘’ COMMENT ‘’;
2024-07-11 21:03:56
498
原创 vscode编译环境配置-golang
如果单测函数上方不显示run test | debug test,需要安装Code Debugger(因为以前的go Test Explorer不再被维护了)
2024-07-11 20:53:56
540
原创 限制机器上core文件大小防止打爆磁盘
首先,先编写cleanup_core_files.sh脚本(假设只需要保留最近的3个core文件),然后在机器上设置crontab定时任务,如1分钟运行一次。
2024-07-11 16:22:50
186
原创 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
290
原创 关于crontab 环境变量
默认crontab执行的时候不会执行类似bashrc这样的环境脚本(也就是不加载用户的环境变量),所以在执行非默认路径 (/usr/bin)下的二进制的时候,需要写绝对路径。
2024-06-07 14:48:06
338
原创 linux 删除磁盘分区
如果报target is busy,说明有进程在访问挂载点,通过fuser命令查看哪些进程在访问,(确保可删除后)删掉对应进程即可。
2024-06-07 14:35:21
3519
原创 shell中while read line读取文件执行ssh时只读了一行内容
原因:while循环时,文件内容已经缓存到buffer区,ssh默认以stdin作为输入读取了后面的全部内容,所以导致看上去while里只执行了一行。
2024-06-07 14:14:51
245
原创 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
252
原创 正确安装指定版本程序包
从APT源获取最新的软件包列表以确保可以知道软件包的最新可用版本。1,设置软件包管理公钥(以确保后续下载的软件包的可靠性)以ubuntu上安装15.2.13的ceph软件包为例。3,更新本地软件包列表(不下载更新实际的软件包)4,查看对应包的可用版本。
2024-05-28 11:17:50
267
飞思卡尔单片机高效C语言编程(中文)
2013-12-18
WI-FI技术原理以及应用
2013-12-16
wifi技术培训
2013-12-16
如何学好网络编程
2013-11-10
it人士必读
2013-11-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人