基于zookeeper的主备切换方法_PHP教程-php教程-PHP中文网


本站和网页 https://www.php.cn/php-weizijiaocheng-287211.html 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

基于zookeeper的主备切换方法_PHP教程-php教程-PHP中文网首页视频教程 视频课程直播课程精品课学习路径 入门教程独孤九贱玉女心经天龙八部趣味闯关PHP培训资源下载 源码市场商城源码工具下载在线工具手册下载电子课件js特效网站源码网站素材类库下载技术文章 头条前端开发后端开发数据库php框架每日编程社区 问答博客文章APP下载源码市场编程词典APP下载登录注册新课上线千万级数据并发解决方案9块特价自己动手写MVC框架Laravel9Laravel9教程,想学不会都难!限时特价开通VIP会员免费学习热门搜索Laraval9HTML5CSS3JavaScriptjQueryVue.jsLayui入门PHP基础首页 >后端开发 >php教程 > 正文基于zookeeper的主备切换方法_PHP教程原创2016-07-12 08:55:43679 + php学习QQ群(点击入群)基于zookeeper的主备切换方法zookeeper的ZOO_EPHEMERAL节点(如果ZOO_EPHEMERAL满足不了需求,可以考虑和ZOO_SEQUENCE结合使用),在会话关闭或过期时,会自动删除,利用这一特性可以实现两个或多节点间的主备切换。实现方法:1)在进程启动时调用zookeeper_init()初始化:bool X::init_zookeeper(){ // 第一次调用时_clientid总是为NULL, // 状态为ZOO_EXPIRED_SESSION_STATE时,需要重新调用zookeeper_init, // 这个时候可传入的_clientid为前一次zookeeper_init()产生的_clientid // 请注意zookeeper_init()是一个异步调用,返回非NULL并不表示会话建立成功, // 只有当zk_watcher中的type为ZOO_SESSION_EVENT和state为ZOO_CONNECTED_STATE时, // 才真正表示会话建立成功。 _zhandle = zookeeper_init(zk_hosts, zk_watcher, 5000, _clientid, this, 0); if (NULL == _zhandle) { MYLOG_ERROR("init zookeeper failed: %s\n", zerror(errno)); return false; } MYLOG_INFO("init zookeeper(%s) successfully\n", zk_hosts); return true;}2)进入工作之前,先尝试切换成主,只有成功切换成主后才进入workbool X::run(){ while (true) { int num_items = 0; // 备机最简单的方法是每隔一定时间,如1秒就尝试转成master, // 如果不使用轮询,则可以采用监视_zk_path的方式 mooon::sys::CUtils::millisleep(1000); // 如果不是master,则尝试转成master,如果转成不成功则继续下一次尝试 if (!is_master() && !change_to_master()) continue; do_work(); }}bool X::is_master() const{ return _is_master;}bool X::change_to_master(){ static uint64_t log_counter = 0; // 打log计数器,备状态时的日志输出 // ZOO_EPHEMERAL|ZOO_SEQUENCE // _myip为本地IP地址,可以通过它来判断当前谁是master // _zk_path值示例:/master/test,注意需要先保证/master已存在 int errcode = zoo_create(_zhandle, _zk_path.c_str(), _myip.c_str(), _myip.size()+1, &ZOO_OPEN_ACL_UNSAFE, ZOO_EPHEMERAL, NULL, 0); // (-4)connection loss,比如为zookeeper_init()指定了无效的hosts(一个有效的host也没有) if (errcode != ZOK) { _is_master = false; // 减少为备状态时的日志输出 if (0 == log_counter++ % 600) { MYLOG_DEBUG("become master[%s] failed: (%d)%s\n", _zk_path.c_str(), errcode, zerror(errcode)); } return false; } else { _is_master = true; log_counter = 0; MYLOG_INFO("becase master[%s]\n", _zk_path.c_str()); // sleep一下,以便让原master正在进行的完成 mooon::sys::CUtils::millisleep(2000); return true; }}3)当zookeeper会话成功建立或过期时均会触发zk_watcher,可通过type和state来区分void zk_watcher(zhandle_t *zh, int type, int state, const char *path, void *context){ X* x = static_cast(context); MYLOG_DEBUG("zh=%p, type=%d, state=%d, context=%p, path=%s\n", zh, type, state, context, path); // zookeeper_init成功时type为ZOO_SESSION_EVENT,state为ZOO_CONNECTED_STATE if ((ZOO_SESSION_EVENT == type) && (ZOO_CONNECTED_STATE == state)) { x->on_zookeeper_connected(path); } else if ((ZOO_SESSION_EVENT == type) && (ZOO_EXPIRED_SESSION_STATE == state)) { // 需要重新调用zookeeper_init(),简单点可以退出当前进程重启 x->on_zookeeper_expired(); }}附: zookeeper日志默认情况下zookeeper日志是输出到stderr,但可以通过zoo_set_log_stream()来定向到自己的日志输出中,还可以使用zoo_set_debug_level()来控制zookeeper的日志级别。
http://www.bkjia.com/PHPjc/1115820.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1115820.htmlTechArticle基于zookeeper的主备切换方法 zookeeper的ZOO_EPHEMERAL节点(如果ZOO_EPHEMERAL满足不了需求,可以考虑和ZOO_SEQUENCE结合使用),在会话关闭或过期时...
微信分享声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。相关标签:android程序员必备接口测试调试工具:点击使用Apipost = Postman + Swagger + Mock + JmeterApi设计、调试、文档、自动化测试工具网页生成APP,用做网站的技术去做APP:立即创建手机网站开发APP、自助封装APP、200+原生模块、2000+映射JS接口按需打包上一篇:PHP中数组的三种排序方法,php数组三种排序_PHP教程下一篇:php完整验证码代码,php验证码_PHP教程相关文章相关视频PHP编译器BPC6.0已发布,聊聊有哪些新功能吧...汇总有关PHP多进程开发面试常见问题(附答案)验证码的使用收藏的PHP常用函数 推荐收藏保存_php基础基于zookeeper的主备切换方法_PHP教程2015年最新Android基础入门教程目录使用Eclipse + ADT + SDK开发Android APP使用Android Studio开发Android APPAndroid程序签名打包Android网络编程要学的东西与Http协议学习视频教程分类php视频教程html视频教程css视频教程JS视频教程jQuery视频教程mysql视频教程Linux视频教程Python视频教程Laravel视频教程Vue视频教程专题推荐独孤九贱-php全栈开发教程全栈 170W+主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门玉女心经-web前端开发教程入门 80W+主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门天龙八部-实战开发教程实战 120W+主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习Laravel 9 学习正当时—保姆级教程,想学不会都难!实战 21317次学习主讲:博愿 全栈工程师,拼命探索,不计后果千万级数据并发解决方案(理论+实战)实战 55750次学习主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习共22门课程,总价3725元,开通VIP会员免费学 实战 55750次学习主讲:Peter-Zhu、西门大官人、灭绝师太、欧阳克官方公众号php中文网课程
扫码关注官方公众号回复“phpcn01”领取php学习资料课程
全套工具、电子书、脑图、内部课程等发表技术文章推荐视频教程开通VIP会员课 0元学推荐会员免费非会员课新课折扣VUE3学习,零基础开始,工程化开发,死磕VUE3!限时3折¥ 980¥ 3199限时折扣信息系统项目管理师(软考高级)一站式通关课程限时8折,仅剩5小时¥ 799¥ 999限时折扣时间管理,自律给我自由限时0.9折,仅剩5小时¥ 9¥ 99VIP¥ 8限时折扣PHP Workerman 基础与实战:即时通讯聊天系统(ThinkPHP6)限时4.7折,仅剩5小时¥ 189¥ 399VIP¥ 119限时折扣Laravel 9 学习正当时—保姆级教程,想学不会都难!限时6折,仅剩5小时¥ 168¥ 279VIP¥ 139限时折扣自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)限时3折,仅剩5小时¥ 59¥ 199会员免费基于workerman仿百度商桥IM即时通讯(Laravel实战四)¥ 299会员免费tp6+adminlte搭建通用后台¥ 198会员免费Uniapp180分钟快速入门¥ 168会员免费vue-cli4商城项目案例¥ 198会员免费限时折扣时间管理,自律给我自由限时0.9折,仅剩5小时¥ 9¥ 99VIP¥ 8限时折扣信息系统项目管理师(软考高级)一站式通关课程限时8折,仅剩5小时¥ 799¥ 999使用Go语言搭建家庭相册系统¥ 199限时折扣PHP Workerman 基础与实战:即时通讯聊天系统(ThinkPHP6)限时4.7折,仅剩5小时¥ 189¥ 399VIP¥ 119限时折扣Laravel 9 学习正当时—保姆级教程,想学不会都难!限时6折,仅剩5小时¥ 168¥ 279VIP¥ 139最新文章热门排行❤️‍🔥如何利用业余时间发展副业,做做兼职?!网上购物商城系统-B2B2C多用户商城系统PHP编译器BPC6.0已发布,聊聊有哪些新功能吧!汇总有关PHP多进程开发面试常见问题(附答案)php对称加解密的5个问答小结浅析PHP应用程序中正确调用系统命令的方法你知道如何用PHP实现多进程吗PHP与MySQL连接的方法总结工具包分享:PHP实现滑块验证图片PHP8.2发布了,快来看看有什么改动!共22门课程,总价3725元,开通VIP会员免费学习!php实现图片批量下载到本地实例VPN是什么循环大量数据导致内存超出,不增加内存如何解决该问题PHP快速搭建一个简单的QQ机器人API常用签名验证方法(PHP实现)php是什么文件?如何打开?四种打开php格式文件方法(图)PHP常用日期时间操作合集Mac电脑设置hosts的方法(图文步骤)热门推荐网站首页 PHP视频PHP实战PHP代码PHP手册词条手记编程词典php培训php中文网:公益在线php培训,帮助PHP学习者快速成长!Copyright 2014-2021 https://www.php.cn/ All Rights Reserved | 苏ICP备2020058653号-1关于我们免责申明赞助与捐赠广告合作
目录 发布文章赚赏钱PHP培训活动PHP进阶特惠前端培训新课VIP免费学讲师入驻源码市场广告投放源码入驻APP下载 扫码下载官方APP返回顶部