目录:
- QConf介绍
- QConf优点
- QConf架构
- zookeeper 安装
- QConf安装部署
- 使用QConf
- QConf管理界面安装
- PHP SDK 扩展
- 分集群配置 - 不同环境,不同配置
- 与YCRoute框架集成 - db/redis配置化
- 灰度发布
QConf介绍:
QConf 是奇虎360开源的一款分布式配置中心。是一款非常成熟的系统组件,运行3年多,当前超过2万台机器的部署,日处理请求过千亿,并且仍有大量的新业务蜂拥接入,我在360工作的时候,经常会与它打交道。
为什么要用到他呢?
因为它做到了代码和配置的完全分离,避免开发人员被配置文件绑架,也解耦了开发和运维工程师的相互依赖。
尤其是当业务分布较广,配置分布较广的时候,就会很容易地出现一些问题,比如做了负载均衡,需要调整一下应用配置。刚好改漏了一台机,就偶尔出现一些问题,排查起来也是很吃力的。
github: https://github.com/Qihoo360/QConf
QConf优点
-
一处修改,所有机器实时同步更新,通过zookeeper 的推送,而不是轮训查询服务器的配置变化,没有无效请求。
-
相同代码,不同环境,配置不同,在业务运行时,我们开发通常会遇到Test、Beta、Online环境,即使是线上环境也可能需要有多个不同集群,针对这种情况,qconf 保证用户的代码是完全一样,但是不同环境,获取的配置值不同。
-
高效读取配置,客户端读取配置直接从共享内存获取,性能高。
-
安装部署方便,使用简单
-
服务器宕机、网络中断、集群迁移等异常情况,QConf都能保证数据的正确,对用户透明
-
支持c/c++、php、go、java、shell、luajit、node.js、perl、python 等语言
QConf架构
QConf 由3部分组成,zookeeper 服务、agent、各种语言SDK。
zookeeper
zookeeper 服务器用来存储所有的配置信息。它以节点树的形式来组织所有数据,类似于文件系统的目录结构,一个节点有名称和值两个属性,节点下又可以建立若干个子节点,如/a、/b/c、/d/e/f等都是合法的节点名。我们使用节点名代表配置项的名称,如username、timeout等,使用节点值代表配置项的值,如jack、5等。另外它以至少3台服务器组成集群,以提供高可用,它的数据是强一致性。
agent
agent相当于 ZooKeeper 客户端,与zookeeper 保持长链接,获取、维护zookeeper里的配置信息,并将配置写入本地共享内存,在每台需要用到 qconf 的机器上都需要安装。
为防止在网络中断的同时机器重启(此时共享内存内容为空,也无法通过网络去zookeeper上取值;同时会打印相关错误日志信息),agent会定期把共享内存里的所有内容持久化到磁盘上的一个dump文件里,保证在上述情况下可以取到上次备份的配置信息。
SDK
SDK封装了操作共享内存的逻辑,为用户提供读取配置值的接口。
QConf现在提供多种语言的SDK,包括C/C++、Java、PHP、Python、Lua、Go 等等。
zookeeper 安装
因为QConf 依赖zookeeper,所以我们首先来安装zookeeper
网上找个 zookeeper 安装教程,一大堆。
创建配置节点
[root@gzapi: ~]# zkCli.sh
[zk: localhost:2181(CONNECTED) 0] create /demo demo
[zk: localhost:2181(CONNECTED) 1] create /demo/confs confs
[zk: localhost:2181(CONNECTED) 2] create /demo/confs/conf1 test11111111
[zk: localhost:2181(CONNECTED) 3] create /demo/confs/conf2 test22222222
[zk: localhost:2181(CONNECTED) 4] create /demo/confs/conf3 test33333333
QConf安装部署
安装QConf 有如下两种方式可以安装QConf,可以根据自己的情况来决定:
1. 使用源码安装
git clone https://github.com/Qihoo360/QConf.git
cd QConf
mkdir build && cd build
cmake ..
make
make install
默认安装路径为 /usr/local/qconf,通过 cmake .. -DCMAKE_INSTALL_PREFIX=/opt/