saltstack实现自动化扩容
[root@node1 src]# tar xf etcd-v3.2.9-linux-amd64.tar.gz
cd etcd-v3.2.9-linux-amd64
cp etcd etcdctl /usr/local/bin/
然后开启etcd集群:
1、首先创建数据目录:mkdir /data/etcd -p
2、开启服务:
nohup etcd --name auto_scale --data-dir /data/etcd/ --listen-peer-urls http://192.168.44.134:2380,http://192.168.44.134:7001 --listen-client-urls http://192.168.44.134:2379,http://192.168.44.134:4001 --advertise-client-urls http://192.168.44.134:2379,http://192.168.44.134:4001 &
[root@node1 ~]# netstat -tunlp|grep etcd
tcp 0 0 192.168.44.134:2379 0.0.0.0:* LISTEN 52094/etcd
tcp 0 0 192.168.44.134:2380 0.0.0.0:* LISTEN 52094/etcd
tcp 0 0 192.168.44.134:7001 0.0.0.0:* LISTEN 52094/etcd
tcp 0 0 192.168.44.134:4001 0.0.0.0:* LISTEN 52094/etcd
1、创建一个key/value
[root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/key1 -XPUT -d value="Hello world"
2、获取创建的key/value
[root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/salt/haproxy/backend_www/www1
3、删除创建的key/value
[root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/key1 -XDELETE
或者将上面的输出结果以json格式输出:
[root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/salt/haproxy/backend_www/www1|python -m json.tool
{
"action": "get",
"node": {
"createdIndex": 9,
"key": "/salt/haproxy/backend_www/www1",
"modifiedIndex": 9,
"value": "192.168.44.134:8080"
}
}
将etcd配置在saltstack中,结合使用:
1、首先需要安装依赖包:
####config etcd
my_etcd_config:
etcd.host: 192.168.44.134
etcd.port: 4001 ext_pillar:
- etcd: my_etcd_config root=/salt/haproxy
3、重启master
[root@node1 ~]# /etc/init.d/salt-master restart
结尾一直报错:
查找原因发现salt是python2.7安装的,而etcd是python2.6安装的,所以一直调用出错:
于是使用python2.7安装一遍etcd服务:
1、mv /usr/bin/python /usr/bin/python.bak
2、ln -s /usr/bin/python2.7 /usr/bin/python
3、修改/usr/bin/yum第一行为:#!/usr/bin/python2.6
4、wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg --no-check-certificate
5、chmod +x setuptools-0.6c11-py2.7.egg
6、sh setuptools-0.6c11-py2.7.egg
7、wget https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz --no-check-certificate
8、tar xf pip-1.3.1.tar.gz
9、cd pip-1.3.1
10、python setup.py install
11、/usr/bin/pip-2.7 install python-etcd
试着使用python2.7导入模块etcd,报错如下:
解决办法:
https://pypi.python.org/pypi/backports.ssl_match_hostname
tar xf backports.ssl_match_hostname-3.5.0.1.tar.gz
cd backports.ssl_match_hostname-3.5.0.1
python setup.py build
python setup.py install
然后重启salt-master服务,查看设置的pillar:
[root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/salt/haproxy/backend_www/www1 -XDELETE
{"action":"delete","node":{"key":"/salt/haproxy/backend_www/www1","modifiedIndex":12,"createdIndex":11},"prevNode":{"key":"/salt/haproxy/backend_www/www1","value":"192.168.44.134:8080","modifiedIndex":11,"createdIndex":11}}
[root@node1 ~]# salt '*' pillar.items
node2:
----------
backend_www:
----------
zabbix-agent:
----------
Zabbix_Server:
192.168.44.134
zabbix-agent-host:
----------
zabbix_host:
node2
现在通过添加etcd的key来增加haproxy后端的节点服务器:
curl -s http://192.168.44.134:2379/v2/keys/salt/haproxy/backend_www/www1 -XPUT -d value="192.168.44.134:8081"|python -m json.tool
2、查看pillar
[root@node1 ~]# salt '*' pillar.items
node1:
----------
backend_www:
----------
www1:
192.168.44.134:8081
3、修改haproxy配置文件:vim /srv/salt/prod/cluster/files/haproxy-outside.cfg
{% for www,www_ip in pillar.backend_www.iteritems() %}
server {{ www }} {{ www_ip }} check inter 1000
{% endfor %}
4、修改haproxy状态配置文件:vim /srv/salt/prod/cluster/haproxy-outside.sls
haproxy-service:
file.managed:
- name: /etc/haproxy/haproxy.cfg
- source: salt://cluster/files/haproxy-outside.cfg
- user: root
- group: root
- mode: 644
- template: jinja 新增一行,使用jinja模板,使用变量
测试并验证:

[root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/salt/haproxy/backend_www/www2 -XPUT -d value="192.168.44.134:8080"|python -m json.tool
{
"action": "set",
"node": {
"createdIndex": 14,
"key": "/salt/haproxy/backend_www/www2",
"modifiedIndex": 14,
"value": "192.168.44.134:8080"
}
}
[root@node1 ~]# curl -s http://192.168.44.134:2379/v2/keys/salt/haproxy/backend_www/www3 -XPUT -d value="192.168.44.135:8080"|python -m json.tool
{
"action": "set",
"node": {
"createdIndex": 15,
"key": "/salt/haproxy/backend_www/www3",
"modifiedIndex": 15,
"value": "192.168.44.135:8080"
}
}
查看设置的pillar:
[root@node1 ~]# salt '*' pillar.items
node2:
----------
backend_www:
----------
www1:
192.168.44.134:8081
www2:
192.168.44.134:8080
www3:
192.168.44.135:8080
执行salt状态配置文件:

saltstack实现自动化扩容的更多相关文章
- saltstack自动化运维系列11基于etcd的saltstack的自动化扩容
saltstack自动化运维系列11基于etcd的saltstack的自动化扩容 自动化运维-基于etcd加saltstack的自动化扩容# tar -xf etcd-v2.2.1-linux-amd ...
- Saltstack自动化扩容
一. etcd服务的安装和使用 1.安装etcd应用: wget https://github.com/coreos/etcd/releases/download/v2.2.5/etcd-v2.2.5 ...
- saltstack之自动化运维
引入 简介 saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. 早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这 ...
- 学习saltstack (五)
Saltstack介绍 Salt三种运行方式 1.local本地运行2.Master/Minion3.Salt ssh Salt的三大功能 a.远程执行b.配置管理(状态管理)c.云管理:阿里云,aw ...
- Redis Cluster 自动化安装,扩容和缩容
Redis Cluster 自动化安装,扩容和缩容 之前写过一篇基于python的redis集群自动化安装的实现,基于纯命令的集群实现还是相当繁琐的,因此官方提供了redis-trib.rb这个工具虽 ...
- k8s Pod 扩容和缩容
在生产环境下,在面临服务需要扩容的场景时,可以使用Deployment/RC的Scale机制来实现.Kubernetes支持对Pod的手动扩容和自动扩容. 手动扩容缩容 通过执行扩容命令,对某个dep ...
- 基于Saltstack、Artifactory打造传统模式下持续部署平台
一.持续部署 1. 现状 由于没有建立标准的持续部署流程,导致了版本管理混乱,制品管理混乱,上线持续时间长,上线测试覆盖不全面,业务流量上升后故障较多,排查复杂.运维.测试.开发人员每次版本迭代的时候 ...
- 运维知识体系v0.5
http://www.90qj.com/?post=318http://ixdba.blog.51cto.com/2895551/1751377 运维知识体系v0.5-(运维社区-赵班长出品,欢迎 ...
- Docker系列一之基础快速入门企业实战
1.1什么是LXC LXC为Linux Container的简写.Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚 ...
随机推荐
- 【BZOJ2783】[JLOI2012]树 DFS+栈+队列
[BZOJ2783][JLOI2012]树 Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节 ...
- ios 让两个tableView同时处于选中状态
- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { [_l ...
- python裁剪base64编码的图片
简介 今天遇到需要裁剪base64字符串的PNG图片,并返回base64格式字符串的任务,捣鼓半天. 裁剪代码如下: def deal_inspect_img(base64_str): "& ...
- maven打包排除spring-boot内嵌tomcat容器依赖jar
在pom文件中添加打包排除配置信息. <plugin> <artifactId>maven-war-plugin</artifactId> <version& ...
- .net winform 调用类中的webbrowser 报错:当前线程不在单线程单元中,因此无法实例化 ActiveX
遇到这个恶心的问题纠缠得不要不要的,大家遇到了的话希望不要走弯路,经过这个折腾让我有点怀疑人生了.哈哈哈 解决代码如下: //插入一个新线程用于处理验证码 Thread thd = new Threa ...
- PAT 甲级 1026 Table Tennis(模拟)
1026. Table Tennis (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A table ...
- uitextFiled字数输入限制
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementS ...
- python 中几个层次的中文编码.md
转自:[http://swj.me/] 介绍 一直不太喜欢使用命令行,所以去年年底的技术创新中,使用TkInter来开发小工具.结果花费了大量的时间来学习TkInter ui的使用. 最近想整理该工具 ...
- Cassandra go语言client使用
关于什么是cassandra,可以参考: http://blog.csdn.net/zyz511919766/article/details/38683219 http://cassandra.apa ...
- Python中的编码与解码(转)
Python中的字符编码与解码困扰了我很久了,一直没有认真整理过,这次下静下心来整理了一下我对方面知识的理解. 文章中对有些知识没有做深入的探讨,一是我自己也没有去深入的了解,例如各种编码方案的实现方 ...