docker服务confd安装配置学习教程

confd

confd通过读取配置(支持etcd,consul,环境变量),通过go的模板,生成最终的配置文件。

安装

安装和etcd一样,非常方便,已经提供了64位的可执行程序,下载下来之后直接放到PATH中(/usr/local/bin)即可(别忘了+x)。

haproxy配置生成

confd配置文件默认在/etc/confd中,可以通过参数-confdir指定。目录中包含两个子目录,分别是:conf.d templates。
confd会先读取conf.d目录中的配置文件(toml格式),然后根据文件指定的模板路径去渲染模板。

基于之前配置的etcd集群,读取/services/web中的目录和key。结构为:

/services/web/$DOMAIN/$HOST/ip
                          |-port

其中DOMAIN表示注册应用的域名,HOST表示注册机器的主机名。

首先创建confd配置文件:

 代码如下 复制代码
[template] 
src = "haproxy.cfg.tmpl" 
dest = "/home/babydragon/haproxy/haproxy.cfg" 
keys = [ 
"/services/web", 

#reload_cmd = "/etc/init.d/haproxy reload"

现在只测试模板生成,所以不关注检查、重启等命令,配置模板名称、目标路径和获取的key即可。

着重看下模板变动部分(前面就是写死的一些haproxy的标准配置,如日志等)

 代码如下 复制代码
frontend webin
bind :80

{{$domains := lsdir "/services/web"}}
{{range $domain := $domains}}
acl is_{{$domain}} hdr(host) -i {{$domain}}
{{end}}

{{range $domain := $domains}}
use_backend {{$domain}}_cluster if is_{{$domain}}
{{end}}

{{range $domain := $domains}}
backend {{$domain}}_cluster
cookie SERVERID insert indirect nocache
{{$domain_dir := printf "/services/web/%s" $domain}}{{range $host := lsdir $domain_dir}}
server {{base $host}} {{$ip_key := printf "/services/web/%s/%s/ip" $domain $host}}{{getv $ip_key}}:{{$port_key := printf "/services/web/%s/%s/port" $domain $host}}{{getv $port_key}} cookie {{base $host}} check
{{end}}
{{end}}

这里主要有两个循环,第一个循环所有的域名,第一个循环每一个域名下的所有主机。
haproxy需要通过设置acl的方式来进行按照域名做负载均衡。因此首先循环域名,为每个域名创建一个acl规则和一个规则的使用。
下面再通过一个循环,创建没个域名对应的后段。

confd模板详细文档可以参考github上的文档。
大致的意思是通过lsdir获取当前目录下的所有子目录。第一层子目录为域名,根据域名即可生成acl规则、规则使用、后端名称等数据。
再重新通过瓶装域名目录,对域名目录执行lsdir,读取目录下的每个主机名,创建后端的server条目(一个域名下的负载均衡后段服务器),
同时获取挂在这个目录下的属性键值对(这里只有ip和port)。

创建完模板和配置之后,先构造一些测试数据:

 代码如下 复制代码
etcdctl mkdir /services/web
etcdctl mkdir /services/web/a.abc.com
etcdctl mkdir /services/web/b.abc.com
etcdctl mkdir /services/web/a.abc.com/server1
etcdctl mkdir /services/web/a.abc.com/server2
etcdctl mkdir /services/web/b.abc.com/server1
etcdctl set /services/web/a.abc.com/server1/ip 10.0.0.1
etcdctl set /services/web/a.abc.com/server1/port 10000
etcdctl set /services/web/a.abc.com/server2/port 10001
etcdctl set /services/web/a.abc.com/server2/ip 10.0.0.1
etcdctl set /services/web/b.abc.com/server1/ip 10.0.0.2
etcdctl set /services/web/b.abc.com/server1/port 12345

这里模拟三个容器,其中两个作为域名a.abc.com运行容器,一个作为b.abc.com容器。

然后执行confd,检查生成的配置文件:

 代码如下 复制代码
confd -confdir ./confd -onetime -backend etcd -node 127.0.0.1:4001

刚才那段模板渲染后为:

 代码如下 复制代码
frontend webin
    bind :80

    acl is_a.abc.com hdr(host) -i a.abc.com

    acl is_b.abc.com hdr(host) -i b.abc.com

    use_backend a.abc.com_cluster if is_a.abc.com

    use_backend b.abc.com_cluster if is_b.abc.com

backend a.abc.com_cluster
    cookie SERVERID insert indirect nocache

    server server1 10.0.0.1:10000 cookie server1 check

    server server2 10.0.0.1:10001 cookie server2 check

backend b.abc.com_cluster
    cookie SERVERID insert indirect nocache

    server server1 10.0.0.2:12345 cookie server1 check

No Comments

 

时间: 2024-08-02 19:14:57

docker服务confd安装配置学习教程的相关文章

Windows系统下XAMPP的安装配置图文教程

  这是关于在windows下XAMPP的安装配置图文教程,XAMPP 是什么?在linux ubuntu系统下安装配置LAMP时提到了XAMPP,XAMPP为我们提供了一种在Linux.Solaris.Windows和Mac OS X系统下简易安装Apache服务器发行版的快捷方法. XAMPP(X-系统,A-Apache,M-Mysql,P-php,P- Phpmyadmin/Perl)这个缩写名称说明了XAMPP安装包所包含的文件:Apache web 服务器, MySQL数据库, PHP

win7系统iis安装配置图文教程

  win7系统iis安装配置图文教程: 一.进入Win7的控制面板,打开程序功能,选择打开或关闭Windows功能 . 二.在安装Windows功能的选项菜单,把interlnet信息服务的所有组件全部勾起来. 三.安装完成后,打开控制面板,进入系统和安全,打开管理工具,点Internet 信息服务(IIS)管理器. 四.打开IIS管理器,进入管理页面,展开右边的个人PC栏,右击网站--添加网站, 在出来的对话框中添加自己的网站名称.物理路径(选择你的网站目录). 记得要设置网站文件夹的安全项

phpmyadmin3安装配置图解教程

在PHP网站开发中,最基本的PHP环境搭建涉及PHP.Apache/IIS.Mysql,对于数据库的管理,除了Mysql数据库自身提供了命令行工具方便开发人员管理数据库外,基于PHP开发的phpmyadmin也是一个非常好用的Mysql数据库管理程序,在xampp等PHP环境配置安装程序中,phpmyadmin也是一个必备的PHP程序.今天和大家分享如何安装.配置phpmyadmin. phpmyadmin安装配置准备工作 首先当然是下载phpmyadmin的安装包,提供两个phpmyadmin

phpmyadmin3 安装配置图解教程_php技巧

在PHP网站开发中,最基本的PHP环境搭建涉及PHP.Apache/IIS.Mysql,对于数据库的管理,除了Mysql数据库自身提供了命令行工具方便开发人员管理数据库外,基于PHP开发的phpmyadmin也是一个非常好用的Mysql数据库管理程序,在xampp等PHP环境配置安装程序中,phpmyadmin也是一个必备的PHP程序.今天和大家分享如何安装.配置phpmyadmin. phpmyadmin安装配置准备工作 首先当然是下载phpmyadmin的安装包,提供两个phpmyadmin

图文详解Ubuntu下安装配置Mysql教程_Mysql

Ubuntu安装Mysq有l三种安装方式,下面就为大家一一讲解,具体内容如下 1. 从网上安装 sudo apt-get install mysql-server.装完已经自动配置好环境变量,可以直接使用mysql的命令. 注:建议将/etc/apt/source.list中的cn改成us,美国的服务器比中国的快很多. 2. 安装离线包,以mysql-5.0.45-linux-i686-icc-glibc23.tar.gz为例. 3. 二进制包安装:安装完成已经自动配置好环境变量,可以直接使用m

IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年_php实例

便于大家转载和离线阅读,本教程的HTML源码.UBB源码.PDF版本.Flash版本提供下载.下载地址:http://code.google.com/p/wpmi/downloads/list 操作系统:Windows.Server.2003.R2,Enterprise.Edition,SP2,x86,CHS,VOL,MSDN本次配置PHP的服务器环境:Windows2003+ IIS6+PHP5+MySQL3+Zend+phpMyAdmin整个配置过程需要是使用拥有管理员权限的系统帐号登录Wi

MySQL安装配置方法教程_Mysql

所有平台的Mysql下载地址为: MySQL 下载. 挑选你需要的 MySQL Community Server 版本及对应的平台. 一.Linux/UNIX上安装MysqlLinux平台上推荐使用RPM包来安装Mysql,MySQL AB提供了以下RPM包的下载地址: MySQL - MySQL服务器.你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器. MySQL-client - MySQL 客户端程序,用于连接并操作Mysql服务器. MySQL-devel - 库和包含文

mysql 8.0 安装配置方法教程_Mysql

一.安装mysql yum源 从官网http://dev.mysql.com/downloads/repo/yum/下载mysql最新的yum源的rpm安装包 wget http://repo.mysql.com//mysql57-community-release-el6-9.noarch.rpm 使用yum安装rpm包 yum install mysql57-community-release-el6-9.noarch.rpm 检测mysql yum源 yum repolist enable

MySql 5.7.17 winx64的安装配置详细教程

一.下载软件 1. 进入MySQL官网,登陆自己的Oracle账号(没有账号的自己注册一个),下载Mysql-5.7.17,下载地址:http://dev.mysql.com/downloads/mysql/ 2.将下载好的文件解压到指定目录,解压在E:\mysql-5.7.17-winx64 二.安装过程 1.首先配置环境变量path,将E:\mysql-5.7.17-winx64\bin配置到自己的path中 环境变量 MySql_HOME===================E:\mysq