- 编写apcahe发布文件
[devops@server1 ansible]$ mkdir roles
[devops@server1 ansible]$ cd roles
[devops@server1 roles]$ ansible-galaxy init apache
- apache was created successfully

[devops@server1 apache]$ cd tasks/
[devops@server1 tasks]$ ls
main.yml
[devops@server1 tasks]$ \vi main.yml##使用\vi命令对文件进行编辑
[devops@server1 apache]$ cat tasks/main.yml
---
- name: install httpd
yum:
name: httpd
state: present
- name: copy index.html
copy:
content: "{{ ansible_facts['hostname'] }}"
dest: /var/www/html/index.html
- name: configure httpd
template:
src: templates/httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
owner: root
group: root
mode: 644
notify: restart httpd
- name: start httpd and firewalld
service:
name: "{{ item }}"
state: started
loop:
- httpd
- firewalld
- name: configure firewalld
firewalld:
service: http
permanent: yes
immediate: yes
state: enabled
[devops@server1 apache]$ cd handlers/
[devops@server1 handlers]$ \vi main.yml
[devops@server1 apache]$ cat handlers/main.yml
---
- name: restart httpd
service:
name: httpd
state: restarted
复制httpd配置文件到模板
[devops@server1 apache]$ cd templates/
[devops@server1 templates]$ cp …/…/…/templates/httpd.conf.j2 .##我是复制已经存在的,若没有可以先下载然后复制到该目录,不需要作修改
[devops@server1 templates]$ ls
httpd.conf.j2
[devops@server1 templates]$ cd …/vars/
[devops@server1 vars]$ ls
main.yml
[devops@server1 vars]$ \vi main.yml
[devops@server1 apache]$ cat vars/main.yml ##这里我加入了一个变量,若没有加改变量,可以不用引入
---
http_port: 80
- 编写haproxy发布文件
[devops@server1 roles]$ ansible-galaxy init haproxy
haproxy was created successfully
[devops@server1 roles]$ ls
apache haproxy
[devops@server1 roles]$ cd haproxy/
[devops@server1 haproxy]$ ls
defaults handlers README.md templates vars
files meta tasks tests
[devops@server1 haproxy]$ \vi tasks/main.yml
[devops@server1 haproxy]$ cat tasks/main.yml
---
- name: install haproxy
yum:
name: haproxy
state: present
- name: start haproxy
service:
name: haproxy
state: started
- name: configure haproxy
template:
src: haproxy.cfg.j2
dest: /etc/haproxy/haproxy.cfg
notify: restart haproxy
[devops@server1 haproxy]$ \vi handlers/main.yml
[devops@server1 haproxy]$ cat handlers/main.yml
---
- name: restart haproxy
service:
name: haproxy
state: restarted
[devops@server1 haproxy]$ cp …/…/templates/haproxy.cfg.j2 templates/##移动haproxy配置文件至模板
配置文件修改如下

- 编写keepalived发布文件(编写时可以从haproxy的发布文件拷贝后进行修改)
[devops@server1 roles]$ ansible-galaxy init keepalived
- keepalived was created successfully
[devops@server1 roles]$ ls
apache haproxy keepalived
[devops@server1 roles]$ cd keepalived/
[devops@server1 keepalived]$ \vi tasks/main.yml
[devops@server1 keepalived]$ cat tasks/main.yml
---
- name: install keepalived
yum:
name: keepalived
state: present
- name: start keepalived
service:
name: keepalived
state: started
- name: configure keepalived
template:
src: keepalived.conf.j2
dest: /etc/keepalived/keepalived.conf
notify: restart keepalived
[devops@server1 keepalived]$ \vi handlers/main.yml
[devops@server1 keepalived]$ cat handlers/main.yml
---
- name: restart keepalived
service:
name: keepalived
state: restarted
修改配置文件
[devops@server1 keepalived]$ sudo yum install -y keepalived
[devops@server1 ansible]$ cd roles/keepalived/templates/
[devops@server1 templates]$ ls
[devops@server1 templates]$ sudo mv /etc/keepalived/keepalived.conf .
[devops@server1 templates]$ ls
keepalived.conf
[devops@server1 templates]$ pwd
/home/devops/ansible/roles/keepalived/templates
[devops@server1 templates]$ mv keepalived.conf keepalived.conf.j2
[devops@server1 templates]$ ls
keepalived.conf.j2
[devops@server1 templates]$ vim keepalived.conf.j2
配置文件:
[devops@server1 keepalived]$ cat templates/keepalived.conf.j2
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state {{ STATE }}
interface eth0
virtual_router_id {{ VRID }}
priority {{ PRIORITY }}
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.32.100
}
}
- 修改组成员并添加变量
[devops@server1 ansible]$ vim inventory
[devops@server1 ansible]$ cat inventory
[webserver]
server2
server3
[lb]
server1 STATE=MASTER VRID=32 PRIORITY=100
server4 STATE=BACKUP VRID=32 PRIORITY=99
- 编写发布文件
[devops@server1 ansible]$ vi apa+hap.yml
[devops@server1 ansible]$ cat apa+hap.yml
---
- hosts: all
tasks:
- import_role:
name: apache
when: ansible_hostname in groups['webserver']
- import_role:
name: haproxy
when: ansible_hostname in groups['lb']
- import_role:
name: keepalived
when: ansible_hostname in groups['lb']
- 测试
查看vip位置

访问测试:

down掉server1的keepalived服务查看vip

此時vip迁移到server4

测试访问

本文详细介绍如何使用Ansible自动化工具,为服务器集群部署Apache Web服务、HAProxy负载均衡器及Keepalived高可用解决方案。通过编写角色文件、配置模板和任务流程,实现服务安装、启动、配置及重启的自动化操作。
1763

被折叠的 条评论
为什么被折叠?



