六、ghost的暂停、继续、限流、终止#
- 暂停和继续
ghost可是实现真正的暂停,当我们出发暂停时,ghost不会再有任何行rowCopy,也不会再处理任何事件。不对主库产生任何压力
相关参数:throttle-additional-flag-file
//在ghost的main.go中有定义这个参数 //这个文件存在的话操作会停止 保留默认值即可,用于限制多个gh ost操作 flag.StringVar(&migrationContext.ThrottleAdditionalFlagFile, "throttle-additional-flag-file", "/tmp/gh-ost.throttle", "operation pauses when this file exists; hint: keep default, use for throttling multiple gh-ost operations") //具体可以通过shell命令完成 echo throttle | socat - /tmp/gh-ost.test.sock //继续 echo no-throttle | socat - /tmp/gh-ost.test.sock
- 限流相关
相关参数
--max-lag-millis
--chunk-size
--max-load
//这些参数在main.go中的定义如下 //限制操作的复制延迟, 当主从复制延迟时间超过该值后,gh-ost将采取节流(throttle)措施 maxLagMillis := flag.Int64("max-lag-millis", 1500, "replication lag at which to throttle operation") //每次迭代中要处理的行数 范围从100 - 100000 //就是rowCopy过程中range chunkSize := flag.Int64("chunk-size", 1000, "amount of rows to handle in each iteration (allowed range: 100-100,000)") //当ghost检测到超过最大负载 ghost不会退出,为了不给系统负载造成更大的压力,ghost会等load低于这个值时再工作。 maxLoad := flag.String("max-load", "Threads_running=25", "Comma delimited status-name=threshold. e.g: 'Threads_running=100,Threads_connected=500'. When status exceeds threshold, app throttles writes")
- 终止
--panic-flag-file
//在main.go中,如下 //创建此文件时,gh ost将立即终止,而不进行清理 flag.StringVar(&migrationContext.PanicFlagFile, "panic-flag-file", "/tmp/ghost.panic.flag", "when this file is created, gh-ost will immediately terminate, without cleanup")
七、写有中文注释的ghost源码项目#
项目使用vender管理依赖,开箱即用
github地址:https://github.com/zhuchangwu/Ghost-source-code-reading-env
- todo:GoMySqlReader