Saltstack自动化扩容
一. etcd服务的安装和使用
1.安装etcd应用:
wget https://github.com/coreos/etcd/releases/download/v2.2.5/etcd-v2.2.5-linux-amd64.tar.gz -O etcd-v2.2.5-linux-amd64.tar.gz
tar -zxvf etcd-v2.2.5-linux-amd64.tar.g
cp etcd etcdctl /usr/local/bin/
2.启动etcd服务:
mkdir -p /data/etcd #创建数据存储目录
nohup etcd -name auto_scale --data-dir /data/etcd/ \
--listen-peer-urls 'http://172.16.1.211:2380,http://172.16.1.211:7001' \
--listen-client-urls 'http://172.16.1.211:2379,http://172.16.1.211:4001' \
--advertise-client-urls 'http://172.16.1.211:2379,http://172.16.1.211:4001' &
3.提交key到etcd中:
curl -s http://172.16.1.211:2379/v2/keys/message -XPUT -d value="hello world" | python -m json.tool #结果通过python的json模块转义输出,增加可读性。
4.获取刚才提交的key值:
curl -s http://172.16.1.211:2379/v2/keys/message | python -m json.tool
5.删除刚才提交的key:
curl -s http://172.16.1.211:2379/v2/keys/message -XDELETE | python -m json.tool
6.提交带10秒过期时间的key:
curl -s http://172.16.1.211:2379/v2/keys/ttl_use -XPUT -d value="hello world 1" -d ttl=10 | python -m json.tool
二. 实现Salt自动化让Haproxy扩容
1.配置salt的pillar连接etcd:
yum install python-pip
pip install python-etcd #安装python的etcd包
vim /etc/salt/master
#底部添加
etcd_pillar_config:
etcd.host: 172.16.1.211
etcd.port: 4001 ext_pillar:
- etcd: etcd_pillar_config root=/salt/haproxy/ #root参数是指定etcd里面的目录
2.测试通过salt获取pillar:
curl -s http://172.16.1.211:2379/v2/keys/salt/haproxy/backend_www_wmj_com/web-node1 -XPUT -d value="172.16.1.213:8080" | python -m json.tool salt '*' pillar.item
3.让salt模板自动添加haproxy的backend:
vim /srv/salt/prod/cluster/files/haproxy-outside.cfg #server web-node1 172.16.1.213:8080 check inter 2000 rise 30 fall 15
#使用for循环获取etcd的key值
{% for web,web_ip in pillar.backend_www_wmj_com.iteritems() %} server {{ web }} {{ web_ip }} check inter 2000 rise 30 fall 15 {% endfor %}
4.添加一台haproxy的节点:
curl -s http://172.16.1.211:2379/v2/keys/salt/haproxy/backend_www_wmj_com/web-node3 -XPUT -d value="172.16.1.215:8080" | python -m json.tool
salt '*' state.sls cluster.haproxy-outside env=prod
5.简单的自动化扩容脚本:
#!/bin/bash
create_host(){
echo "create host"
}
deploy_service(){
salt '*' state.sls nginx.install env=prod
}
deploy_code(){
echo "deploy code ok"
}
service_check(){
STATUS=$(curl -s --head http://172.16.1.213:8080/ | grep '200 OK')
if [ -n "$STATUS" ];then
echo "HTTP ok"
else
echo "HTTP not ok"
exit 1
fi
}
etcd_key(){
curl -s http://172.16.1.211:2379/v2/keys/salt/haproxy/backend_www_wmj_com/web-node4 -XPUT -d value="172.16.1.213:8080"
}
sync_state(){
salt '*' state.sls cluster.haproxy-outside env=prod
}
main(){
create_host
deploy_service
deploy_code
service_check
etcd_key
sync_state
}
main
############################################################################################
1
2
3
|
[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、开启服务:
1
|
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 & |
1
2
3
4
5
|
[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
1
|
[root@node1 ~] # curl -s http://192.168.44.134:2379/v2/keys/key1 -XPUT -d value="Hello world" |
2、获取创建的key/value
1
|
[root@node1 ~] # curl -s http://192.168.44.134:2379/v2/keys/salt/haproxy/backend_www/www1 |
3、删除创建的key/value
1
|
[root@node1 ~] # curl -s http://192.168.44.134:2379/v2/keys/key1 -XDELETE |
或者将上面的输出结果以json格式输出:
1
2
3
4
5
6
7
8
9
10
|
[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、首先需要安装依赖包:
1
2
3
4
5
6
7
|
####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
1
|
[root@node1 ~] # /etc/init.d/salt-master restart |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[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后端的节点服务器:
1
|
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
1
2
3
4
5
6
7
|
[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
1
2
3
|
{% 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
1
2
3
4
5
6
7
8
|
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模板,使用变量 |
测试并验证:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[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:
1
2
3
4
5
6
7
8
9
10
11
|
[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状态配置文件:
自动化运维-基于etcd加saltstack的自动化扩容
# tar -xf etcd-v2.2.1-linux-amd64.tar.gz
# cd etcd-v2.2.1-linux-amd64
# cp etcd etcdctl /usr/local/bin/
查看版本
# etcd --version
创建数据目录
# mkdir -p /data/etcd
后台运行进程
# nohup etcd --name auto_scale --data-dir /data/etcd/ --listen-peer-urls 'http://192.168.3.12:2380,http://192.168.3.12:7001' --listen-client-urls 'http://192.168.3.12:2379,http://192.168.3.12:4001' --advertise-client-urls 'http://192.168.3.12:2379,http://192.168.3.12:4001' &
创建key和value
# curl -s http://192.168.3.12:2379/v2/keys/message -XPUT -d value="hello world" | python -m json.tool
结果
{
"action": "set",
"node": {
"createdIndex": 5,
"key": "/message",
"modifiedIndex": 5,
"value": "hello world"
}
}
查看key和value
# curl -s http://192.168.3.12:2379/v2/keys/message | python -m json.tool
结果
{
"action": "get",
"node": {
"createdIndex": 5,
"key": "/message",
"modifiedIndex": 5,
"value": "hello world"
}
}
删除key,可以看到查不到了
# curl -s http://192.168.3.12:2379/v2/keys/message -XDELETE | python -m json.tool
结果
{
"action": "delete",
"node": {
"createdIndex": 5,
"key": "/message",
"modifiedIndex": 6
},
"prevNode": {
"createdIndex": 5,
"key": "/message",
"modifiedIndex": 5,
"value": "hello world"
}
}
查看删除
# curl -s http://192.168.3.12:2379/v2/keys/message | python -m json.tool
结果
{
"cause": "/message",
"errorCode": 100,
"index": 6,
"message": "Key not found"
}
建一个只存在25秒的键值,25秒后发现该键值查不到了
# curl -s http://192.168.3.12:2379/v2/keys/ttl_use -XPUT -d value='hello world 1' -d ttl=25 | python -m json.tool
结果
{
"action": "set",
"node": {
"createdIndex": 9,
"expiration": "2017-04-18T03:04:54.538607442Z",
"key": "/ttl_use",
"modifiedIndex": 9,
"ttl": 25,
"value": "hello world 1"
}
}
查看
# curl -s http://192.168.3.12:2379/v2/keys/ttl_use | python -m json.tool
结果
{
"action": "get",
"node": {
"createdIndex": 9,
"expiration": "2017-04-18T03:04:54.538607442Z",
"key": "/ttl_use",
"modifiedIndex": 9,
"ttl": 24,
"value": "hello world 1"
}
编辑salt,修改etcd相关配置
# vim /etc/salt/master
etcd_pillar_config:
etcd.host: 192.168.3.12
etcd.port: 4001 ext_pillar:
- etcd: etcd_pillar_config root=/salt/haproxy/
重启服务
# /etc/init.d/salt-master restart
测试
curl -s http://192.168.3.12:2379/v2/keys/salt/haproxy/backend_www_chinasoft_com/web-node1 -XPUT -d value="192.168.3.12:8080" | python -m json.tool
结果
{
"action": "set",
"node": {
"createdIndex": 11,
"key": "/salt/haproxy/backend_www_chinasoft_com/web-node1",
"modifiedIndex": 11,
"value": "192.168.3.12:8080"
}
安装etcd
# yum install -y python-pip
# pip search python-etcd
# pip install python-etcd
1)编写haproxy的配置文件
vim /srv/salt/prod/cluster/files/haproxy-outside.cfg
balance roundrobin
{% for web,web_ip in pillar.backend_www_chinasoft_com.iteritems() -%}
server {{ web }} {{ web_ip}} check inter 2000 rise 30 fall 15
{% endfor %}
2)编写sls文件
vim /srv/salt/prod/cluster/haproxy-outside.sls include:
- haproxy.install
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这一行
service.running:
- name: haproxy
- enable: True
- reload: True
- require:
- cmd: haproxy-init
- watch:
- file: haproxy-service
执行以下高级状态,如果报错jinja has no attibute backend_www_chinasoft_com重启一下master即可
# salt '*' state.highstate
此时向haproxy添加backend主机
curl -s http://192.168.3.12:2379/v2/keys/salt/haproxy/backend_www_chinasoft_com/web-node2 -XPUT -d value="192.168.3.12:8080" | python -m json.tool
curl -s http://192.168.3.12:2379/v2/keys/salt/haproxy/backend_www_chinasoft_com/web-node3 -XPUT -d value="192.168.3.12:8080" | python -m json.tool
curl -s http://192.168.3.12:2379/v2/keys/salt/haproxy/backend_www_chinasoft_com/web-node4 -XPUT -d value="192.168.3.12:8080" | python -m json.tool
执行变更
# salt '*' state.highstate
通过访问haproxy的管理界面可以看到成功添加 http://192.168.3.12:8888/haproxy-status
可以看到pillar的选项,如果不能看到需要修改/etc/salt/master (pillar_opts: False)
# salt '*' pillar.items
结果
node2.chinasoft.com:
----------
backend_www_chinasoft_com:
----------
web-node1:
192.168.3.12:8080
web-node2:
192.168.3.12:8080
web-node3:
192.168.3.12:8080
web-node4:
192.168.3.12:8080
zabbix-agent:
----------
Zabbix_Server:
192.168.3.13
mini1:
----------
backend_www_chinasoft_com:
----------
web-node1:
192.168.3.12:8080
web-node2:
192.168.3.12:8080
web-node3:
192.168.3.12:8080
web-node4:
192.168.3.12:8080
zabbix-agent:
----------
Zabbix_Server:
192.168.3.13
编写脚本实现自动添加haproxy后端服务器
# vim auto_add_haproxynode.sh
#!/bin/bash MAIN_ADD_HOST=$1
create_host(){
echo 'create host ok'
} deploy_service(){
ADD_HOST_PORT='8080'
} deploy_code(){
echo 'deploy code ok'
} service_check(){
STATUS=$(curl -s --head http://"$ADD_HOST":"$ADD_HOST_PORT"/ |grep "200 OK")
if [ -n "$STATUS" ];then
echo 'status check ok'
else
echo 'status check not ok'
exit
fi
} etcd_key(){
ADD_HOST=$1
curl http://192.168.3.12:2379/v2/keys/salt/haproxy/backend_www_chinasoft_com/$ADD_HOST -XPUT -d value="192.168.3.19:${ADD_HOST_PORT}"
} sync_state(){
salt '*' state.sls cluster.haproxy-outside env=prod
} main(){
create_host;
deploy_service;
deploy_code;
etcd_key $MAIN_ADD_HOST;
sync_state;
} main $1
执行脚本,可以看到成功添加
# ./auto_add_haproxynode.sh web-node18
Saltstack自动化扩容的更多相关文章
- saltstack自动化运维系列11基于etcd的saltstack的自动化扩容
saltstack自动化运维系列11基于etcd的saltstack的自动化扩容 自动化运维-基于etcd加saltstack的自动化扩容# tar -xf etcd-v2.2.1-linux-amd ...
- 基于saltstack自动化部署高可用kubernetes集群
SaltStack自动化部署HA-Kubernetes 本项目在GitHub上,会不定期更新,大家也可以提交ISSUE,地址为:https://github.com/skymyyang/salt-k8 ...
- 七天学会SALTSTACK自动化运维 (3)
七天学会SALTSTACK自动化运维 (3) 导读 SLS TOP.SLS MINION选择器 SLS文件的编译 总结 参考链接 导读 SLS SLS (aka SaLt State file) 是 ...
- 七天学会SALTSTACK自动化运维 (2)
七天学会SALTSTACK自动化运维 (2) 导读 Grains Pillar 总结 参考链接 导读 上一篇主要介绍了安装和基本的使用方法,但是我认为如果理解了相关概念的话,使用会更加顺手,因为毕竟每 ...
- Saltstack自动化操作记录(2)-配置使用 【转】
之前梳理了Saltstack自动化操作记录(1)-环境部署,下面说说saltstack配置及模块使用: 为了试验效果,再追加一台被控制端minion机器192.168.1.118需要在master控制 ...
- Saltstack自动化操作记录(1)-环境部署【转】
早期运维工作中用过稍微复杂的Puppet,下面介绍下更为简单实用的Saltstack自动化运维的使用. Saltstack知多少Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中 ...
- Saltstack自动化操作记录(2)-配置使用
之前梳理了Saltstack自动化操作记录(1)-环境部署,下面说说saltstack配置及模块使用: 为了试验效果,再追加一台被控制端minion机器192.168.1.118需要在master控制 ...
- Saltstack自动化操作记录(1)-环境部署
早期运维工作中用过稍微复杂的Puppet,下面介绍下更为简单实用的Saltstack自动化运维的使用. Saltstack知多少Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中 ...
- saltstack自动化运维系列⑩SaltStack二次开发初探
saltstack自动化运维系列⑩SaltStack二次开发初探 1.当salt运行在公网或者网络环境较差的条件下,需要配置timeout时间vim /etc/salt/master timeout: ...
随机推荐
- 数据分析刚入门?这几个BI软件你一定得知道!
在当前乃至未来5年的职场中,将取代你的可能不是 AI ,而是比你"更懂"数据分析的同事.毕竟,现在做什么都讲究"用数字说话",很多岗位在招聘JD中均给出了&qu ...
- windev的字符集选择设置及元素命名方法建议
windev支持多语言,且支持整站翻译,同时支持最终用户的多语言选择,可以说多语言功能已经非常的全面和强大. windev原生支持英语.法语和葡萄牙语,在使用如中文等非拉丁字母语言时,需要在多个地方进 ...
- 一张图看懂IaaS, PaaS和SaaS的区别
转至:https://blog.csdn.net/liujg79/article/details/84453736 编译:老夫子 原文:https://www.bmc.com/blogs/saas-v ...
- 《Symfony 5全面开发》教程04、Symfony处理http请求的流程
当我们访问项目的/test路径时,浏览器会向我们的服务器端发送一个请求.我们打开浏览器的开发者工具,打开network选项卡. 在地址栏中敲击回车,浏览器向我们的服务器端发送了一个请求.请求的地址是1 ...
- WPS:字母自动变大写的解决办法
设置中:
- Cache写机制
Cache 写机制分为:Write-through和Write-back Write-through(直写模式) 定义:在数据更新时,同时写入缓存Cache和后端存储(主存): 优点:操作简单: 缺点 ...
- C#控制打印机打印
一.引用BarcodeStandard.dll #region BarcodeStandard.dll /* * * 使用说明 需要通过NuGet进行安装BarcodeLib.dll,必不可少 */ ...
- 微信小程序结合 tp实现秒杀
一:建表 1:用户表 2:订单表 3:收货地址 4:秒杀的商品表: 二: 微信后台方法 1 /** 2 * 秒杀接口 3 */ 4 public function seckill(Request $r ...
- think php 7天免登录
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 微信小程序清除缓冲
1:wxml定义一个清除缓冲的按钮,并绑定触摸事件 <button bindtap="clear">清空缓冲</button> 2:wxjs定义方法: // ...