一.saltstack一键部署负载均衡集群
实验环境:
172.25.45.1 haproxy
172.25.45.2 http
172.25.45.3 nginx
1.安装服务
这里为了方便直接在master server1端安装现在server1上安装minion,并加入salt-key
yum install -y salt-minion
cd /etc/salt/
vim minion 16
/etc/init.d/salt-minion start
2.分发密钥
salt-key -L
salt-key -A
salt-key -L
3.编辑网页访问内容server2和server3
在server2中:
vim /var/www/html/index.html
在server3中:
vim /usr/local/nginx/html/index.html
4.在yum源里加入LoadBalancer
5.在base目录下建立haproxy的install.sls,完成后运行
cd /srv/salt/
mkdir haproxy
vim haproxy/install.sls
salt server1 state.sls haproxy.install
[root@server1 haproxy]# cd /etc/haproxy/
[root@server1 haproxy]# ls
haproxy.cfg
[root@server1 haproxy]# mkdir /srv/salt/haproxy/files
[root@server1 haproxy]# cp haproxy.cfg /srv/salt/haproxy/files/
[root@server1 haproxy]# cd /srv/salt/haproxy/
[root@server1 haproxy]# vim install.sls
6.实现负载均衡,更改全局base目录下的haproxy.cfg配置文件
[root@server1 haproxy]# cd files/
[root@server1 files]# ls
haproxy.cfg
[root@server1 files]# vim haproxy.cfg
[root@server1 files]# /etc/init.d/haproxy start
Starting haproxy: [ OK ]
[root@server1 files]# /etc/init.d/haproxy stop
Stopping haproxy: [ OK ]
[root@server1 files]# salt server1 state.sls haproxy.install
7.实现一键推送
vim /srv/salt/top.sls
salt '*' state.highstate
8.测试:(看sevrer2的apache服务和server3的nginx服务是否轮询)
网页访问:172.25.45.1
也可以通过命令测试:
当关掉apache或者nginx服务后,将不再轮询
二·多节点推送
[root@server1 salt]# cd /srv/salt/
[root@server1 salt]# vim top.sls #脚本名字必须是top.sls
[root@server1 salt]# cat top.sls
base:
"server1":
- haproxy.install
'roles:apache':
- match: grain
- apache.install
"roles:nginx":
- match: grain
- nginx.service
[root@server1 salt]# salt '*' state.highstste #会调用top.sls脚本实现多节点推送
在server2中:
vim /etc/salt/minion
vim /etc/salt/grains
/etc/init.d/salt-minion restart
在server3中:
在server1中测试:
salt server3 saltutil.sync_grains
salt '*' grains.item roles
三·导入模块grains和pillar
grains负责采集客户端的一些基本信息;pillar数据是存储在master端的,而在客户端有缓存,通常pillar数据是一些配置信息。
1、grains
grains的信息不是动态的,并不会时时更新,只是在minion启动时收集到
1)在master查看minion的grains的值
salt server2 grains.item ipv4 ##查看server2的ipv4
salt server2 grains.item os ##查看server2系统名称
salt server2 grains.item fqdn ##查看server2主机名称
2)三种方法设置grains
第一种:在minion配置文件里找到grains节点进行添加或编辑,如下图
在server2中:vim /etc/salt/minion
测试:salt server2 grains.item roles
第二种方法:在/etc/salt建立编写grains文件
第三种方法:在master的base目录下建python文件来从minion上取得环境参数
cd /srv/salt/
mkdir _grains
vim _grains/my_grains.py
然后将此自定义grains文件同步到minion上
2、pillar配置
pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息,还可以定义变量
首先需要在master配置文件中修改pillar根目录
vim /etc/salt/master
这个目录没有,需要自己建立,完成后重启服务,并在目录下可以建立目录,编辑pillar数据
[root@server1 salt]# mkdir /srv/pillar
[root@server1 salt]# /etc/init.d/salt-master restart
Stopping salt-master daemon: [ OK ]
Starting salt-master daemon: [ OK ]
[root@server1 salt]# cd /srv/pillar/
[root@server1 pillar]# mkdir web
[root@server1 pillar]# cd web/
[root@server1 web]# vim apache.sls
[root@server1 web]# cat apache.sls
{% if grains['fqdn'] == 'server2' %}
webserver: apache
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
然后在在pillar目录中添加top.sls一键部署
[root@server1 web]# cd ..
[root@server1 pillar]# vim top.sls
[root@server1 pillar]# cat top.sls
base:
'*':
- web.install
[root@server1 pillar]# /etc/init.d/salt-master restart
Stopping salt-master daemon: [ OK ]
Starting salt-master daemon: [ OK ]
在server1中测试:
salt '*' saltutil.refresh_pillar ###刷新minion的pillar数据
salt '*' pillar.items
salt -I 'webserver:nginx' test.ping
salt -S '172.25.41.0/24' test.ping
salt -G 'roles:apache' test.ping
salt -G 'roles:nginx' test.ping
salt -I 'webserver:apache' test.ping
salt -I 'webserver:nginx' test.ping
五·jinja的使用
方法一:
[root@server1 pillar]# cd /srv/salt/apache/
[root@server1 apache]# vim install.sls
[root@server1 apache]# vim files/httpd.conf
[root@server1 apache]# salt server2 state.sls apache.install
方法二:
[root@server1 apache]# cd files/
[root@server1 files]# vim httpd.conf
[root@server1 files]# salt server2 state.sls apache.install
za
在server2查看端口:
vim /etc/httpd/conf/httpd.conf #查看端口
方法三:
[root@server1 files]# cd /srv/salt/apache/
[root@server1 apache]# vim lib.sls
[root@server1 apache]# cat lib.sls
{% set port = 80 %}
[root@server1 apache]# vim files/httpd.conf
1 {% from 'apache/lib.sls' import port with context %}
[root@server1 apache]# salt server2 state.sls apache.install
发现端口又变为80
在server2查看端口: vim /etc/httpd/conf/httpd.conf #查看端口
方法四:
[root@server1 apache]# salt server2 grains.item ipv4
server2:
----------
ipv4:
- 127.0.0.1
- 172.25.45.2
[root@server1 apache]# vim install.sls
[root@server1 apache]# vim /srv/salt/apache/files/httpd.conf
去掉第一行并将端口号行改为:Listen {{ grains['ipv4'][-1] }}:{{ port }}
##截取ipv4的最后一个元素
[root@server1 apache]# salt server2 state.sls apache.install
方法五:
[root@server1 ~]# cd /srv/pillar/web/
[root@server1 web]# vim install.sls
[root@server1 web]# cat install.sls
{% if grains['fqdn'] == 'server2' %}
webserver: apache
bind: 172.25.45.2
port: 80
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
[root@server1 web]# vim /srv/salt/apache/files/httpd.conf
Listen {{ pillar['bind'] }}:{{ pillar['port'] }}
[root@server1 web]# vim /srv/salt/apache/install.sls
bind: {{ pillar['bind'] }}
port: {{ pillar['port'] }}
[root@server1 web]# salt server2 state.sls apache.install
在server2查看端口是否开启: