saltstack多节点推送实现haproxy负载均衡集群

一.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查看端口是否开启:

猜你喜欢

转载自blog.csdn.net/qq_42711214/article/details/83796152