版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
实验环境:
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