当前位置: 首页 > 后端技术 > PHP

QConf搭建配置中心

时间:2023-03-29 23:46:24 PHP

今天给大家分享奇虎360开源的QConf配置中心。为什么我们需要做这样的事情?因为我们遇到过,当业务分布广,配置分布广时,容易出现一些问题,比如负载均衡,需要调整应用配置。刚好漏了一台机器,偶尔会出现一些问题,排查难度很大。QConfarchitecture:QConfarchitecture除了QConf本身提供的工具外,我们使用掌悦科技开发的一款zkdashzookeeper管理工具。个人理解:QConf可以说是一个zookeeper的客户端,通过agent来观察zookeeper的变化,数据存在于本地,当zookeeper发生变化时,本地的数据会自动变化,达到同步更新的效果。这也是QConf需要配合zookeeper使用的原因之一。QConfserverQConf使用ZooKeeper集群作为服务器提供服务。众所周知,ZooKeeper是一套分布式应用协调服务。根据上述配置内容的定位,我们认为可以将单个配置内容直接存储在ZooKeeper的一个ZNode上,利用ZooKeeper的Watch监控功能实现配置的变更。及时通知客户。按照ZooKeeper的设计目标,它只提供最基本的功能,包括顺序一致性、原子性、单系统镜像、可靠性和及时性。我们选择Zookeeper是因为它具有以下特点:1.类文件系统的节点组织2.稳定性,无单点问题3.订阅通知机制关于Zookeeper的更多信息参见:https://zookeeper.apache。org/QConfClients由于ZooKeeper在接口方面只提供了非常基础的操作,其客户端接口是独创的,因此我们需要在QConf的客户端部分解决以下问题:1.减少与ZooKeeper的链接数在原生ZooKeeper中client,所有需要获取配置的进程都需要和ZooKeeper保持长连接。在生产环境中,每台客户端机器可能有上百个进程需要访问数据,这给ZooKeeper带来了很大的压力,没有必要。2、本地缓存当然,我们不希望客户端进程每次都通过网络获取数据,所以我们需要维护一个客户端缓存,只有在配置发生变化时才更新它。3、容错当出现进程死亡、网络终止、机器重启等异常情况时,我们希望尽可能提供可靠的配置获取服务。4、多语言版本接口目前可用的语言版本包括:c、php、java、python、go、lua、shell。5、及时的配置更新,秒级同步到所有客户端机器。6.高效配置读取内存级访问速度。安装了解基本知识和原理后,开始实践思路和操作。理论要结合实践,否则就是废话。环境Linux:Ubuntu16.04installzookeeper安装包地址:zookeeper$sudowgethttp://apache.stu.edu.tw/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz$sudotar-zxvfzookeeper-3.4.9.tar.gz解压完成后可以直接运行zkServer,但是需要配置自己的基本信息。$cdzookeeper-3.4.9$sudocpconf/zoo_sample.cfgconf/zoo.cfg启动zkServer$cd../$./bin/zkServer.shstart默认监听:0.0.0.0:2181测试服务是否启动:telnet127.0.0.12181输入statZookeeper版本:3.4.9-1757313,建立于08/23/201606:50GMTClients:xxxLatencymin/avg/max:0/0/51Received:252717Sent:252716Connections:5Outstanding:0xand3Node:count:10会输出以上信息,服务器启动成功。然后创建zookeeper测试数据:shzkCli.shcreate/demodemocreate/demo/confsconfscreate/demo/confs/conf1111111111111111111111create/demo/confs/conf222222222222222create2222/demo/confs/conf33333333333333333333333QConf的安装方法可以找到在官方wikiInstallationFAQ安装好qconf后,进入qconf安装目录,调整idc.conf$cdconf/$sudovimidc.conf输入自己的zookeeper服务器地址,多次使用,分隔符:#[zookeeper]################################################################################QCONF配置#################################################################################所有zookeeper主机配置。#[zookeeper]zookeeper.test=zookeeperhost保存启动QConf代理。ubuntu下使用bash启动$sudobash./bin/agent-cmd.shstart启动成功,查看QConf命令。qconfget_conf/demo/confs/conf1qconfget_batch_keys/demo/confs如果返回相应信息,则表示可以正常获取数据。如果失败,则到logs/目录下查询错误信息,并进行相应的修改。安装PHP扩展/usr/local/php/bin/phpize./configure--with-php-config=/usr/local/php/bin/php-config--with-libqconf-dir=/usr/local/qconf/include--enable-staticLDFLAGS=/usr/local/qconf/lib/libqconf.amakeinstallqconf配置在安装qconf的目录下,根据路径可以找到对应的依赖包。安装完成后,将其添加到php.ini中,使用php--ini查看配置文件位置。检查扩展安装:php-m|grepqconfQConf操作API安装好QConf和zookeeper后,再安装我们的管理后台。zkdash要求Python>=2.7。如果你是centos65用户,需要升级自己的Python版本。升级方法参见:Python升级地址:zkdash安装zkdash后,配置对应节点并进行管理。zkdashweb管理服务默认对全网开放。需要修改监控主机和端口。修改方法是$sudoviminit.py修改监控主机地址:74defmain():75"""主程序入口76"""77logger.init_logger(LOG_ITEMS,suffix=OPTIONS.port)78application=Application()79http_server=tornado.httpserver.HTTPServer(application,80xheaders=True)81http_server.listen(OPTIONS.port,address="输入你需要的监听地址")82tornado.ioloop.IOLoop.instance()。start()83address是一个新的主机参数。恭喜你,你已经搭建了自己的配置中心。接下来要做的就是提高性能,稳定性,扩展zookeeper。我只能帮你走到这里,接下来的路,你自己走吧。更多开源项目欢迎关注:https://github.com/janhuang