ansible实现自动部署haproxy+httpd+keepalived

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44889616/article/details/99635434

实验环境:

server1 keepalived、haproxy
server2 apache
server3 apache
server4 keepalived、haproxy

创建roles,并编辑apache安装文件

galaxy介绍:

Ansible Galaxy 是一个免费共享和下载 Ansible 角色的网站,可以帮助我们更好的定义和学习roles。
ansible-galaxy命令默认与https://galaxy.ansible.com网站API通信,可以查找、下载各种社区开发的
Ansible 角色。 ansible-galaxy在 Ansible 1.4.2 就已经被包含了。

1.创建apache模板(此功能要联网)

[devlops@server1 ansible]$ mkdir roles			##创建roles
[devlops@server1 ansible]$ ls
ansible.cfg  files     inventory       playbook.yml  templates
file.retry   file.yml  playbook.retry  roles
[devlops@server1 ansible]$ vim ansible.cfg 
[devlops@server1 ansible]$ cd roles/
[devlops@server1 roles]$ ls
[devlops@server1 roles]$ ansible-galaxy init apache				##初始化apache
- apache was created successfully
[devlops@server1 roles]$ ls
apache
[devlops@server1 roles]$ cd apache/
[devlops@server1 apache]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  tests  vars
[devlops@server1 apache]$ rm -fr README.md
[devlops@server1 apache]$ rm -fr tests/

2.编辑任务文件

[devlops@server1 apache]$ ls
defaults  files  handlers  meta  tasks  templates  vars
[devlops@server1 apache]$ cd tasks/
[devlops@server1 tasks]$ ls
main.yml
[devlops@server1 tasks]$ \vi main.yml
[devlops@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: 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

3.编辑触发器文件

[devlops@server1 apache]$ cat handlers/main.yml 

---
- name: restart httpd
  service:
    name: httpd
    state: restarted

4.编辑变量文件

[devlops@server1 apache]$ cat vars/main.yml 

---
http_host: "{{ ansible_facts['defaults_ipv4']['adress'] }}"
http_port: 80

5.添加http配置文件到模板中

[devlops@server1 apache]$ cd templates/
[devlops@server1 templates]$ ls
[devlops@server1 templates]$ scp ../../../templates/httpd.conf.j2 .

编写haproxy安装文件

1.添加haproxy模板

[devlops@server1 roles]$ ls
apache
[devlops@server1 roles]$ ansible-galaxy init haproxy
- haproxy was created successfully
[devlops@server1 roles]$ ls
apache  haproxy
[devlops@server1 roles]$ cd haproxy/
[devlops@server1 haproxy]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  tests  vars
[devlops@server1 haproxy]$ rm -fr README.md 
[devlops@server1 haproxy]$ rm -fr tests/
[devlops@server1 haproxy]$ 

2.编辑任务文件

[devlops@server1 haproxy]$ cat tasks/main.yml 
---
- name: install haproxy
  yum:
    name: haproxy
    state: present

- name: configure haproxy
  template:
    src: templates/haproxy.cfg.j2
    dest: /etc/haproxy/haproxy.cfg
  notify: restart haproxy

- name: start haproxy
  service:
    name: haproxy
    state: started

3.编辑触发器文件

[devlops@server1 haproxy]$ cat handlers/main.yml 
---
- name: restart haproxy
  service:
    name: haproxy
    state: restarted

4.添加haproxy配置文件到模板目录中,并修改

[devlops@server1 haproxy]$ cd templates/
[devlops@server1 templates]$ ls
haproxy.cfg.j2
[devlops@server1 haproxy]$ cd templates/
[devlops@server1 templates]$ ls
haproxy.cfg.j2

在这里插入图片描述

[devlops@server1 ansible]$ vim apache.yml 

- hosts: all
  tasks:
    - import_role:
        name: apache
      when: ansible_hostname in groups['webserver']
    - import_role:
        name: haproxy
      when: ansible_hostname in groups['lb']

编写keepalived安装文件

1.创建keepalived模板

[devlops@server1 roles]$ ansible-galaxy init keepalived
- keepalived was created successfully
[devlops@server1 roles]$ ls
apache  haproxy  keepalived
[devlops@server1 roles]$ cd keepalived/
[devlops@server1 keepalived]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  tests  vars
[devlops@server1 keepalived]$ rm -fr README.md 
[devlops@server1 keepalived]$ rm -fr tests/
[devlops@server1 keepalived]$ ls
defaults  files  handlers  meta  tasks  templates  vars

2.编写任务文件

[devlops@server1 keepalived]$ vim tasks/main.yml 

---
- name: install keepalived
  yum:
    name: keepalived
    state: present

- name: configure keepalived
  template:
    src: keepalived.conf.j2
    dest: /etc/keepalived/keepalived.conf
  notify: restart keepalived

- name: start keepalived
  service:
    name: keepalived
    state: started

3.编辑触发器文件

[devlops@server1 keepalived]$ vim handlers/main.yml 
---
- name: restart keepalived
  service:
    name: keepalived
    state: restarted

4.获取keepalived配置文件

[devlops@server1 keepalived]$ cd templates/
[devlops@server1 templates]$ ls
[devlops@server1 templates]$ cp /etc/keepalived/keepalived.conf .
[devlops@server1 templates]$ vim keepalived.conf
[devlops@server1 templates]$ mv keepalived.conf keepalived.conf.j2

文件内容:

[root@server1 templates]# cat 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.16.100
    }
}

5.资源清单

[root@server1 ansible]# cat inventory 
[lb]
server1 STATE=MASTER VRID=31 PRIORITY=100
server4 STATE=BASKUP VRID=31 PRIORITY=50

[test]
server2

[prod]
server3

[webserver:children]
test
prod

主安装文件

[devlops@server1 ansible]$ cat install.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']
      
[devlops@server1 ansible]$ ansible-playbook apache.yml 

在这里插入图片描述
vip在server1上
在这里插入图片描述

测试:

浏览器输入:server1ip(172.25.16.1)
在这里插入图片描述
在这里插入图片描述

关闭server1的keepalived,vip漂移到server4
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44889616/article/details/99635434