公司网站建设收费,wordpress大学最新模板下载,厦门专业制作网站,wordpress设置主页不显示整篇文章一、需求我们使用Nginx做七层负载均衡#xff0c;后端是Tomcat。项目采用灰度发布方式#xff0c;每次项目升级#xff0c;都要手动先从Nginx下摘掉一组#xff0c;然后再升级这组#xff0c;当项目快速迭代时#xff0c;手动做这些操作显然会增加部署时间#xff0c;于…一、需求我们使用Nginx做七层负载均衡后端是Tomcat。项目采用灰度发布方式每次项目升级都要手动先从Nginx下摘掉一组然后再升级这组当项目快速迭代时手动做这些操作显然会增加部署时间于是就想通过脚本实现自动化管理Nginx配置文件。当时考虑自己写Shell脚本对Nginx配置文件操作需要用到sed流编辑器sed本身没有条件判断语句并不能灵活判断配置文件中要添加/删除位置因此会增加配置错误风险。在查资料无意间发现confd能自动管理配置文件通过模板渲染生成配置文件避免了配置错误风险觉得挺好就实验了下于是就有了本章博文。二、架构图三、涉及软件etcd分布式KV存储系统一般用于共享配置和服务注册与发现。是CoreOS公司发起的一个开源项目。 ETCD存储格式类似于文件系统以根/开始下面一级级目录最后一个是Key一个key对应一个Value。etcd集群使用Raft协议保证每个节点数据一致由多个节点对外提供服务。这里只用单台。confd管理本地应用配置文件使用etcd或consul存储的数据渲染模板还支持redis、zookeeper等。confd有一个watch功能通过HTTP API定期监测对应的etcd中目录变化获取最新的Value然后渲染模板更新配置文件。四、部署环境说明CentOS7IP 192.168.1.99 # 为了试验服务都安装这台上。4.1 下载软件包4.2 安装Nginx并启动# yum install -y gcc gcc-c make openssl-devel pcre-devel# useradd nginx -s/sbin/nologin# wget http://nginx.org/download/nginx-1.10.3.tar.gz# tar zxvf nginx-1.10.3.tar.gz# cd nginx-1.10.3# ./configure--prefix/usr/local/nginx --usernginx --groupnginx --with-http_ssl_module--with-http_gzip_static_module --with-http_realip_module--with-http_stub_status_module# make make install独立出来虚拟主机# mkdir /usr/local/nginx/conf/vhost# vi /usr/local/nginx/conf/nginx.conf # 在http{}段中末尾添加包含虚拟主机配置文件http {includevhost/*.conf;}# /usr/local/nginx/sbin/nginx # 启动Nginx4.3 安装etcd并启动# tar zxvf etcd-v3.1.4-linux-amd64.tar.gz# mv etcd etcdctl /usr/bin/ # etcd提供封装好的包直接使用即可# nohup etcd--data-dir /var/lib/data.etcd --listen-client-urls http://192.168.1.99:2379--advertise-client-urls http://192.168.1.99:2379 /var/log/etcd.log 4.4 安装confdconfd也是一个封装好的包直接使用即可。# mv confd-0.11.0-linux-amd64 /usr/bin/confdkey规划keyvalue/nginx/www/server_name域名/nginx/www/upstream/server01节点01/nginx/www/upstream/server02节点02/nginx/www/upstream/server03节点03创建配置目录# mkdir -p /etc/confd/{conf.d,templates}conf.d # 资源模板下面文件必须以toml后缀templates # 配置文件模板下面文件必须以tmpl后缀创建资源模板# vi /etc/confd/conf.d/app01.conf.toml[template]src app01.conf.tmpl # 默认在/etc/confd/templates目录下dest /usr/local/nginx/conf/vhost/app01.conf # 要更新的配置文件keys [/nginx, # 监测的key]reload_cmd /usr/local/nginx/sbin/nginx -s reload # 最后执行的命令创建Nginx配置文件模板# vi /etc/confd/templates/app01.conf.tmplupstream www.{{getv /nginx/www/server_name}} {{{range getvs /nginx/www/upstream/*}}server .;end}server {server_name www.{{getv /nginx/www/server_name}};location / {proxy_pass http://www.{{getv /nginx/www/server_name}};proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}博客地址http://lizhenliang.blog.51cto.comQQ群323779636(Shell/Python运维开发群)五、测试使用etcdctl客户端操作etcd常用的几个选项如下USAGE:etcdctl [global options] command [command options] [arguments...]COMMANDS:ls retrieve a directoryget retrieve the value of a keyset set the value of a keyrm remove a key or a directoryGLOBAL OPTIONS:--peers, -C a comma-delimited list of machine addresses in the cluster (default: http://127.0.0.1:2379,http://127.0.0.1:2379)5.1 向etcd添加k/v# etcdctl -C http://192.168.1.99:2379 set domain.comdomain.com# etcdctl -C http://192.168.1.99:2379 set /nginx/www/upstream/server01 192.168.1.10:80192.168.1.10:80# etcdctl -C http://192.168.1.99:2379 set /nginx/www/upstream/server02 192.168.1.11:80192.168.1.11:805.2 启动confd监测etcd中的keys当你启动后confd就会从etcd获取key的值并填充到Nginx配置文件模板并更新到/usr/local/nginx/conf/vhost/app01.conf并nginx reload。5.3 近一步测试向etcd中/nginx/www/upstream/再添加一个节点OK这样就实现了自动管理Nginx配置文件无感知加入后端节点。六、etcd Rest API使用curl -X PUT http://192.168.1.99:2379/v2/keys/test/a_key -d value789 # 增改keycurl -X DELETE http://192.168.1.99:2379/v2/keys/test/a_key # 删除keycurl http://192.168.1.99:2379/v2/keys/test/a_key # 查询key的值curl -X PUT http://192.168.1.99:2379/v2/keys/dir -d dirtrue # 创建目录curl http://192.168.1.99:2379/v2/keys # 查看所有keyscurl -X PUT http://192.168.1.99:2379/v2/keys/ttlvar -d valuettl_value -d ttl10 # 创建过期时间的key单位秒curl http://192.168.1.99:2379/version # 查看etcd版本curl http://192.168.1.99:2379/v2/members # 列出所有集群成员curl http://192.168.1.99:2379/v2/stats/leader # 查看leadercurl http://192.168.1.99:2379/v2/stats/self # 节点自身信息curl http://192.168.1.99:2379/v2/stats/store # 查看集群运行状态七、总结总体来说etcdconfd要比自己写脚本管理Nginx配置文件更方便当然增加一套组件也会增加一点运维成本。当初始化一台Web节点可以增加一步操作去把自己信息注册到etcd从而实现自动加入节点。如果应用在生产环境有些功能需要更加完善些比如向etcd添加数据用Rest API或者用Python封装接口confd写一个后台进程脚本运行等。如果线上已经有redis或者zookeeper的话那么就可以直接作为k/v存储信息而不需要再搭建一套etcd集群由于keys的每次更新confd都会Nginx reload在高并发访问量会有一点影响比较好的解决方案就是写lua去动态加载Nginx参数。但应付中小规模还是可以的由此看来confd不但局限管理Nginx配置文件对于其他应用软件也是可以的比如HaproxyLVS等。confd使用文档资源模板其他参数