续我的博文:https://mp.csdn.net/postedit/88882456。即ansible已经安装配置好
一、实验环境(rhel7.3版本)
1、selinux和firewalld状态为disabled
2、各主机信息如下:
主机 | ip |
---|---|
server1(master)—提供haproxy服务 | 172.25.83.1 |
server2(minion)—提供之前推送的httpd服务 | 172.25.83.2 |
server3(minion)—提供之前推送的nginx服务 | 172.25.83.3 |
server4(minion)—提供haproxy服务 | 172.25.83.4 |
3、添加server4为server1的minion
<1>配置server4的yum源
[root@server4 ~]# vim /etc/yum.repos.d/dvd.repo
[dvd]
name=rhel7.3
baseurl=http://172.25.83.83/rhel7.3
gpgcheck=0
enabled=1
[salt]
name=saltstack
baseurl=http://172.25.83.83/2018
gpgcheck=0
<2>下载并配置salt
[root@server4 ~]# yum install salt-minion
[root@server4 ~]# vim /etc/salt/minion
16 master: 172.25.83.1
[root@server4 ~]# systemctl start salt-minion
示图:server4端(minion)启动salt-minion服务之后,会和172.25.83.1:4506建立一个连接
<3>在master端(server1)上查看并添加key。
[root@server1 ~]# salt-key -L
[root@server1 ~]# salt-key -A
<4>检测salt服务:
[root@server1 ~]# salt server4 test.ping #调用test模块的ping方法进行测试
同样的方法添加server1为server1的minion(这里不再演示)
二、SaltStack部署及案例—haproxy
案例一:rpm部署安装haproxy
1.部署脚本
[root@server1 ~]# cd /srv/salt
[root@server1 salt]# ls
_grains httpd nginx top.sls users
[root@server1 salt]# mkdir haproxy
[root@server1 salt]# cd haproxy/
[root@server1 haproxy]# vim install.sls
haproxy-install:
pkg.installed:
- pkgs:
- haproxy
2.执行推送
[root@server1 haproxy]# salt server4 state.sls haproxy.install
3.minion端(server4)查看,安装成功
[root@server4 ~]# rpm -q haproxy
案例二:安装&启动&配置haproxy
1.在haproxy中创建files目录用于存放haproxy配置文件
[root@server1 haproxy]# pwd
/srv/salt/haproxy
[root@server1 haproxy]# ls
install.sls
[root@server1 haproxy]# mkdir files #该目录的名字随意给。因为我这里是用来存放haproxy.cfg文件的,所以这里创建的目录的名字是files
2.minion将配置文件传给master(因为master端没有haproxy的配置文件haproxy.cfg,而server1端在案例一时装过haproxy服务,生成了haproxy.cfg文件)
[root@server4 ~]# scp /etc/haproxy/haproxy.cfg server1:/srv/salt/haproxy/files
3.编辑配置文件haproxy.cfg
[root@server1 files]# vim haproxy.cfg #编辑59行后面的内容如下
59 stats uri /status #新增加的内容
60
61 #---------------------------------------------------------------------
62 # main frontend which proxys to the backends
63 #---------------------------------------------------------------------
64 frontend main *:80 #设置侦听端口为80
65 default_backend app
66 backend app
67 balance roundrobin
68 server app1 172.25.83.2:8888 check #设置后端服务器(因为之前server2上推送过httpd服务,且侦听端口为8888。所以这里写为172.25.83.2:8888)
69 server app2 172.25.83.3:80 check #设置后端服务器(因为之前server3上推送过nginx服务,且侦听端口为80。所以这里写为172.25.83.3:80)
4.部署脚本
[root@server1 haproxy]# pwd
/srv/salt/haproxy
[root@server1 haproxy]# ls
files install.sls
[root@server1 haproxy]# vim install.sls
haproxy-install:
pkg.installed:
- pkgs:
- haproxy
file.managed:
- name: /etc/haproxy/haproxy.cfg
- source: salt://haproxy/files/haproxy.cfg
service.running:
- name: haproxy
- reload: True
- watch:
- file: haproxy-install
5.执行推送
[root@server1 haproxy]# salt server4 state.sls haproxy.install
6.minion端查看,minion(server4)的侦听端口80是否已经打开。并在web界面输入172.25.83.4/status查看状态界面
7.server2端编辑/var/www/html/index.html文件,server3端编辑/usr/local/nginx/html/index.html文件,便于测试
[root@server2 ~]# vim /var/www/html/index.html
<h1>server2</h1>
[root@server3 ~]# vim /usr/local/nginx/html/index.html
<h1>server3</h1>
8.web界面输入172.25.83.4进行haproxy负载均衡的测试:
- 可以看到server2和server3轮循出现,频率是1:1。
刷新一次网页
再次刷新网页
9.停掉server2的httpd服务或server3的nginx服务(我这里演示停掉server2的httpd服务),再次进行测试:
[root@server2 ~]# systemctl stop httpd
- 可以看到只有server3出现,server2不再出现。
再次刷新网页
- 查看server4的状态图,可以看到server2对应的app1显示红色,即已经挂掉
10.重启server2端的httpd服务,再次进行测试:
[root@server2 ~]# systemctl start httpd #或者再次高级推送:salt '*' state.highstate;或者给server2再次推送httpd服务:salt server2 state.sls httpd.service
- 可以看到serve2和server3轮循出现,频率是1:1
刷新一次网页
再次刷新网页
- 查看server4的状态图,可以看到server2对应的app1显示绿色,即已经恢复
至此haproxy的配置也就完成了。
11.编辑之前编写的top.sls文件,高级推送,即给server1推送haproxy服务,server2推送httpd服务,server3推送nginx服务,server4推送haproxy服务。(虽然之前已经给server2,server3,server4推送过,但是也没有关系)
[root@server1 ~]# cd /srv/salt/
[root@server1 salt]# ls
_grains haproxy httpd nginx top.sls users
[root@server1 salt]# vim top.sls
base:
'server1':
- haproxy.install
'server4':
- haproxy.install
'server2':
- httpd.service
'server3':
- nginx.service
[root@server1 salt]# salt '*' state.highstate
- 在server1查看haproxy服务对应的80端口是否已经打开
- 在server2端查看httpd服务对应的8888端口是否已经打开
- 在server3端查看nginx服务对应的80端口是否已经打开
- 在server4端查看haproxy服务对应的80端口是否已经打开
12.web界面输入172.25.83.1进行haproxy负载均衡的测试,并查看状态图:
- 可以看到server2和server3轮循出现,频率是1:1。
刷新一次网页
再次刷新网页
13.停掉server2的httpd服务或server3的nginx服务(我这里演示停掉server3的nginx服务),再次进行测试:
[root@server3 ~]# systemctl stop nginx
- 可以看到只有server2出现,server3不再出现。
再次刷新网页
- 查看server4的状态图,可以看到server3对应的app2显示红色,即已经挂掉
14.重启server3端的nginx服务为,再次进行测试:
[root@server3 ~]# systemctl start nginx #或者再次高级推送:salt '*' state.highstate;或者给server3再次推送nginx服务:salt server3 state.sls nginx.service
- 可以看到serve2和server3轮循出现,频率是1:1
刷新一次网页
再次刷新网页
- 查看server4的状态图,可以看到server2对应的app1显示绿色,即已经恢复
上面的实验做完之后,我们会发现一个问题:如果server1或server4的haproxy服务挂掉了(这里以server1为例),那么访问172.25.83.1和172.25.83.1/status就会报错,那么也就引入了下篇博文的keepalived高可用服务。