常用的 Zookeeper 命令
常用的 Zookeeper 命令当 zk 出现问题时,可以进入 zookeeper 所在 bin目录,启动zk命令行工具进行相关运维操作。
12# 启动 zkCli, 连接 zk./sh zkCli.sh
新增1234# 1.增# 创建节点:create [-s] [-e] path data aclcreate /zk-node 123
删除1234567# 2.删# 删除节点:delete path [version]delete /zk-node# 级联删除节点deleteall path
修改1234# 3.改# 更新节点里的数据set path data [version] set /zk-node 333
查询1234567891011121314151617181920212223242526272829# 4.查# 4.1.查看指定路径ls path [watch]ls /ls /governance_ds_tablels /governance_ds_table/metadata# 级联查看路径ls -R path# 4.2.查看指定节点的数据内容get pa ...
分布式一致性模型
分布式一致性模型分布式一致性探讨的问题:由于分布式环境 CAP 理论的存在,当用户对数据发生读写操作时可能产生的结果。
线性一致性所有操作被记录在一条时间线上,任意两个事件都可以比较先后顺序.任何客户端一定读取到最新写入的数据(包括从其他客户端写入的)。
实现:依赖全局时钟实现,保证所有操作记录在一条时间线上。
顺序一致性多个写操作全局有序,单个客户端看到的写操作的顺序相同。但是不保证各个客户端一定读取到最新值,只能保证一个客户端读取到写入的新值后,不会再读取到旧值即可。
实现: Zookeeper
因果一致性所有过程必须以相同的顺序看到因果相关的操作。没有因果关系的并发写入可以被不同的进程以不同的顺序观察到。也就是说有因果关系的操作按照因果顺序读取到结果,没有关系的操作之间可能会乱序。
实现:依赖逻辑时钟实现。
参考jepsen
Ubuntu Destktop 22.04 禁用自动更新
Ubuntu Desktop 22.04 禁用自动更新Ubuntu 的自动更新并不稳定,之前的一次推送更新了内核版本,稳定性影响比较大,禁用自动更新的方法如下:1.在设置里禁用软件更新
2.关闭 unattended-upgrades如果只禁用上面的更新,unattended-upgrades 还是会在后台更新软件包,也需要禁止。
12345# unattended-upgrades 更新的内容可以在 /var/log/apt/history.log 里查看systemctl status unattended-upgrades# 禁用自动更新systemctl disable unattended-upgrades
禁用后查看结果如下,后续再查看 /var/log/apt/history.log 就不会有软件自动更新的日志了。
1234➜ ~ systemctl status unattended-upgrades○ unattended-upgrades.service Loaded: masked (Reason: Unit u ...
Narayana 事务回滚流程
Narayana 事务回滚流程当用户手动调用 connection.rollback() 回滚当前全局事务时,会走如下流程。
总体流程1234遍历每个 resource 执行 xa end; 执行 xa rollback;清理缓存
使用1234567TransactionManager transactionManager = jtaPropertyManager.getJTAEnvironmentBean().getTransactionManager();// 开启事务transactionManager.begin();// 执行 sql 语句// ...// 回滚事务transactionManager.rollback();
调用链路1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374com.arjuna.ats.internal.jta ...
Ubuntu Destktop 22.04 设置 ssh 超时时间
Ubuntu Destktop 22.04 设置 ssh 超时时间Ubuntu Destktop 22.04 使用 ssh 连接服务器时,发现一段时间不操作就会自动断开连接,解决方法如下:
打开 /etc/ssh/ssh_config 文件:
1sudo vim /etc/ssh/ssh_config
在文件最后添加:
1234# ssh 客户端会每隔 30 秒发送一个 KeepAlive 请求,保证终端不会因为超时空闲而断开连接ServerAliveInterval 30# ssh 客户端发送请求后,没有收到响应的次数达到指定次数后,才会自动断开连接ServerAliveCountMax 18
Narayana 事务恢复流程
Narayana 事务恢复流程总体流程123456789101112131415恢复线程轮询1.判断是否有任务要处理2.若有任务要处理,则处理 1.获取所有配置的 recovery modules 2.遍历recovery modules,执行一阶段处理 XARecoveryModule: 执行 XA recovery 命令从 RM 中获取 prepare 状态的 XID 数组并缓存 AtomicActionRecoveryModule: 从事务日志中,获取需要恢复的 XID 数组并缓存 3.遍历recovery modules,执行二阶段处理 AtomicActionRecoveryModule: 1.根据状态判断是否需要执行二阶段的 commit 或 rollback 2.清理事务 recovery 日志 XARecoveryModule: 再次尝试进行恢复
调用链路123456789101112 ...
Narayana 事务 Commit 流程
Narayana commit 流程整体流程123456789101112131415161718192021222324事务提交 判断是否能进行一阶段提交优化 若能一阶段提交 执行一阶段提交 否则 二阶段提交 prepare阶段 执行 xa end 执行 xa prepare xaResourceRecord 插入到 preparedList BasicAction#insertRecord 更新状态 ActionStatus.COMMITTING 保存状态,打包状态到 outputBuffer 里 XAResourceRecord#save_state ...
Narayana 事务 begin 流程
Narayana 事务 begin 流程整体流程12345检查事务状态获取超时时间创建事务对象 事务对象设置到 ThreadLocal 中,和当前线程绑定 插入事务测超时时间监控
使用 API123TransactionManager transactionManager = jtaPropertyManager.getJTAEnvironmentBean().getTransactionManager();// 开启全局事务transactionManager.begin();
调用链路123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869internal.jta.transaction.arjunacore.BaseTransaction#begin开启事务 internal.jta.transaction.arjunacore.BaseTransaction ...
Narayana 事务资源注册流程
Narayana enlistResource流程XA 事务内每个物理连接执行第一条物理 sql 之前,需要执行 xa start 操作开启每个RM分支上的 xa 事务,并将 xaResource 注册到 TransactionManager 里。
整体流程12345678910transaction.enlistResource(xaResource) 执行 XA start xid 遍历 resource 判断当前是 isNewRM 创建 xid createRecord theTransaction.add(abstractRecord) record 添加到 BasicAction.RecordList 里 执行 xa start 语句,若失败重试 MysqlXAConnection#start 把 XAResource 缓存到 map
使用1234567// 获取 XADataSourceXADataSource xaDatasource = MyS ...
Narayana启动-注册恢复模块流程
Narayana启动-注册恢复模块流程使用代码12// narayana 在启动阶段使用如下 api 加载恢复模块XARecoveryModulexaRecoveryModule = XARecoveryModule.getRegisteredXARecoveryModule();
总体流程1234567891011121314151617注册恢复模块 反射创建 RecoveryEnvironmentBean 配置信息实例 加载 RecoveryActivators 启动 RecoveryActivators 初始化 PeriodicRecovery 设置恢复状态 INACTIVE 设置恢复mode ENABLED 加载恢复模块,module包括: 1.com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule 2.com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule ...