Ansible自动化运维之playbook及roles实战(zabbix的部署)

文章目录
1.ansible-playbook yml文件部署zabbix
实现步骤
2.ansible-playbook roles角色部署zabbix
实现步骤
角色优化
1.ansible-playbook yml文件部署zabbix
实现步骤
(1)基础配置
[devops@server1 ansible]$ pwd
/home/devops/ansible
[devops@server1 ansible]$ cat hosts
[db]
172.25.3.1

[server]
172.25.3.2


[web]
172.25.3.3

[agent:children]
web
server

[zabbix:children]
db
server
web
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(2)配置文件准备
[devops@server1 ansible]$ cd zabbix/
[devops@server1 zabbix]$ pwd
/home/devops/ansible/zabbix
[devops@server1 zabbix]$ ls
create.sql.gz  my.cnf                  zabbix.conf
deplay.yml     zabbix_agented.conf.j2  zabbix_server.conf

[devops@server1 zabbix]$ vi zabbix_agented.conf.j2
 98 Server=172.25.3.2
139 ServerActive=172.25.3.2

150 Hostname={{ ansible_hostname }}
[devops@server1 zabbix]$ vi zabbix.conf 
 20         php_value date.timezone Asia/Shanghai
[devops@server1 zabbix]$ vi my.cnf 
 10 character_set_server=utf8
[devops@server1 zabbix]$ vi zabbix_server.conf 
124 DBPassword=zabbix


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(3)yml文件编写

[devops@server1 zabbix]$ vim deplay.yml
[devops@server1 zabbix]$ cat deplay.yml


---
- hosts: db        ##数据库服务器
  tasks:
    - name: install mariadb
      yum:
        name: mariadb-server,MySQL-python
        state: present

    - name: config mariadb
      copy: 
        src: my.cnf
        dest: /etc/my.cnf
      notify: restart mariadb

    - name: start mariadb
      service:
        name: mariadb
        state: started

    - name: create database zabbix
      mysql_db:
        login_user: root
        login_password: westos
        name: zabbix
        state: present

    - name: create user
      mysql_user:
        login_user: root
        login_password: westos
        name: zabbix
        password: zabbix
        host: "%"
        priv: "zabbix.*:ALL"
        state: present

    - name: copy create.sql
      copy:
        src: create.sql.gz
        dest: /tmp/create.sql.gz

    - name: import create.sql
      mysql_db:
        login_user: root
        login_password: westos
        name: zabbix
        state: import
        target: /tmp/create.sql.gz
        
- hosts: server      ##zabbix-server服务端
  tasks:
    - name: add zabbix repo
      yum_repository:
        name: zabbix
        description: zabbix 4.0
        baseurl: https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/
        gpgcheck: no

    - name: add update repo
      yum_repository:
        name: update
        description: non-supported
        baseurl: https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/x86_64/
        gpgcheck: no

    - name: install zabbix-server
      yum:
        name: zabbix-server-mysql,zabbix-agent
        state: present

    - name: config zabbix-server
      copy:
        src: zabbix_server.conf
        dest: /etc/zabbix/zabbix_server.conf
        owner: root  ##所有人
        group: zabbix ##所有组
        mode: 640   ##文件权限
      notify: restart zabbix-server
  
    - name: start zabbix-server
      service:
        name: "{{ item }}"
        state: started
      loop:
        - zabbix-server
        - zabbix-agent
  
  handlers:
    - name: restart zabbix-server
      service:
        name: zabbix-server
        state: restarted

   
- hosts: web           ##web前端页面
  tasks:
    - name: add zabbix repo
      yum_repository:
        name: zabbix
        description: zabbix 4.0
        baseurl: https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/
        gpgcheck: no

    - name: add update  repo
      yum_repository:
        name: update
        description: non-supported
        baseurl: https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/x86_64/
        gpgcheck: no

    - name: add centos repo
      yum_repository:
        name: centos
        description: centos 7
        baseurl: https://mirrors.aliyun.com/centos/7/os/x86_64/
        gpgcheck: no

    - name: install zabbix-web
      yum:
        name: zabbix-web-mysql,httpd
        state: present

    - name: config zabbix-web
      copy:
        src:  zabbix.conf
        dest: /etc/httpd/conf.d/zabbix.conf
      notify: restart httpd

    - name: start httpd
      service:
        name: httpd
        state: started
  
  handlers:
    - name: restart httpd
      service:
        name: httpd
        state: restarted


- hosts: agent        ##zabbix-agent代理端
  tasks:
    - name: add zabbix repo
      yum_repository:
        name: zabbix
        description: zabbix 4.0
        baseurl: https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/
        gpgcheck: no

    - name: install zabbix-agent
      yum:
        name: zabbix-agent
        state: present

    - name: config zabbix-agent
      template:
        src: zabbix_agented.conf.j2
        dest: /etc/zabbix/zabbix_agentd.conf
        owner: root
        group: root
        mode: 644
      notify: restart zabbix-agent

    - name: start zabbix-agent
      service:
        name: zabbix-agent
        state: started

  handlers:
    - name: restart zabbix-agent
      service:
        name: zabbix-agent
        state: restarted
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
(4)执行效果


2.ansible-playbook roles角色部署zabbix
实现步骤
(1)根据需求创建5个role
ansible-galaxy  init apache ##创建角色
1
[devops@server1 roles]$ pwd
/home/devops/ansible/roles
[devops@server1 roles]$ ls
apache  mariadb  zabbix-agent  zabbix-server-mysql  zabbix-web-mysql

1
2
3
4
5
(2)分别配置5个role
apache

[devops@server1 roles]$ cd apache/
[devops@server1 apache]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  tests  vars
[devops@server1 apache]$ cat ./tasks/main.yml 
---
- name: install httpd
  yum:
    name: httpd
    state: present

- name: start httpd
  service:
    name: httpd
    state: started
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mariadb

[devops@server1 roles]$ cd mariadb/
[devops@server1 mariadb]$ cat tasks/main.yml 
---
- name: install mariadb
  yum:
    name: mariadb-server,MySQL-python
    state: present

- name: config mariadb
  copy:
    src: my.cnf
    dest: /etc/my.cnf
  notify: restart mariadb
     
- name: start mariadb
  service:
    name: mariadb
    state: started

- name: create database zabbix
  mysql_db:
    login_user: root
    login_password: westos
    name: zabbix
    state: present

- name: create user
  mysql_user:
    login_user: root
    login_password: westos
    name: zabbix
    password: zabbix
    host: "%"
    priv: "zabbix.*:ALL"
    state: present

- name: copy create.sql
  copy:
    src: create.sql.gz
    dest: /tmp/create.sql.gz

- name: import create.sql
  mysql_db:
      login_user: root
    login_password: westos
    name: zabbix
    state: import
    target: /tmp/create.sql.gz
[devops@server1 mariadb]$ cat handlers/main.yml 
---
- name: restart mariadb
  service:
    name: maridb
    state: restarted

[devops@server1 mariadb]$ ll files/
total 1292
-rw-r--r-- 1 devops devops 1316758 Nov 24 00:46 create.sql.gz
-rw-r--r-- 1 devops devops     595 Nov 24 00:45 my.cnf
[devops@server1 mariadb]$ 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
zabbix-agent

[devops@server1 roles]$ cd zabbix-agent
[devops@server1 zabbix-agent]$ cat tasks/main.yml 
---
- name: add zabbix repo
  yum_repository:
    name: zabbix
    description: zabbix 4.0
    baseurl: https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/
    gpgcheck: no

- name: install zabbix-agent
  yum:
    name: zabbix-agent
    state: present

- name: config zabbix-agent
  template:
    src: zabbix_agented.conf.j2
    dest: /etc/zabbix/zabbix_agentd.conf
    owner: root
    group: root
    mode: 644
  notify: restart zabbix-agent

- name: start zabbix-agent
  service:
    name: zabbix-agent
    state: started


[devops@server1 zabbix-agent]$ cat handlers/main.yml 
---
- name: restart zabbix-agent
  service:
    name: zabbix-agent
    state: restarted
[devops@server1 zabbix-agent]$ ll files/
total 0
[devops@server1 zabbix-agent]$ ll templates/
total 12
-rw-r--r-- 1 devops devops 10956 Nov 24 01:19 zabbix_agented.conf.j2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
zabbix-server-mysql

[devops@server1 roles]$ cd zabbix-server-mysql
[devops@server1 zabbix-server-mysql]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  tests  vars
[devops@server1 zabbix-server-mysql]$ cat tasks/main.yml 
---
- name: add zabbix repo
  yum_repository:
    name: zabbix
    description: zabbix 4.0
    baseurl: https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/
    gpgcheck: no

- name: add update repo
  yum_repository:
    name: update
    description: non-supported
    baseurl: https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/x86_64/
    gpgcheck: no

- name: install zabbix-server
  yum:
    name: zabbix-server-mysql
    state: present

- name: config zabbix-server
  copy:
    src: zabbix_server.conf
    dest: /etc/zabbix/zabbix_server.conf
    owner: root  ##所有人
    group: zabbix ##所有组
    mode: 640   ##文件权限
  notify: restart zabbix-server
     
- name: start zabbix-server
  service:
    name: "{{ item }}"
    state: started
  loop:
    - zabbix-server
    - zabbix-agent

[devops@server1 zabbix-server-mysql]$ cat handlers/main.yml 
---
- name: restart zabbix-server
  service:
    name: zabbix-server
    state: restarted

[devops@server1 zabbix-server-mysql]$ 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
zabbix-web-mysql

[devops@server1 roles]$ cd zabbix-web-mysql
[devops@server1 zabbix-web-mysql]$ ls
defaults  files  handlers  meta  README.md  tasks  templates  tests  vars
[devops@server1 zabbix-web-mysql]$ cat tasks/main.yml 
---
- name: add zabbix repo
  yum_repository:
    name: zabbix
    description: zabbix 4.0
    baseurl: https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/
    gpgcheck: no

- name: add update  repo
  yum_repository:
    name: update
    description: non-supported
    baseurl: https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/x86_64/
    gpgcheck: no

- name: add centos repo
  yum_repository:
    name: centos
    description: centos 7
    baseurl: https://mirrors.aliyun.com/centos/7/os/x86_64/
    gpgcheck: no

- name: install zabbix-web
  yum:
    name: zabbix-web-mysql
    state: present

- name: config zabbix-web
  copy:
    src:  zabbix.conf
    dest: /etc/httpd/conf.d/zabbix.conf
  notify: restart httpd

[devops@server1 zabbix-web-mysql]$ cat handlers/main.yml 
---
- name: restart httpd
  service:
    name: httpd
    state: restarted
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
(3)yml文件编写
[devops@server1 ansible]$ pwd
/home/devops/ansible
[devops@server1 ansible]$ ls
ansible.cfg  hosts  lin.repo  roles  test_roles.yml  zabbix
[devops@server1 ansible]$ cat test_roles.yml 
---
- hosts: db
  roles:
    - mariadb

- hosts: server
  roles:
    - zabbix-server-mysql
    - zabbix-agent
- hosts: web
  roles:
    - zabbix-web-mysql
    - apache

- hosts: agent
  roles:
     - zabbix-agent
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(4)执行效果


监控页面

添加自动发现规则


自动发现监控主机


角色优化
(1)添加火墙角色
由于每一个hosts对象需要的firewalld策略都不相同,此时再多创建一个角色可能不能满足需求;所以,不如直接在相应角色的tasks下创建firewalld任务,再导入main.yml

db端需要firewalld允许mysql
[devops@server1 tasks]$ ls
firewalld.yml  main.yml
[devops@server1 tasks]$ pwd
/home/devops/ansible/roles/mariadb/tasks
[devops@server1 tasks]$ cat firewalld.yml 
---
- name: start firewalld
  service:
    name: firewalld
    state: started

- name: config firewalld 
  firewalld:
    service: mysql
    permanent: yes
    state: enabled
    immediate: yes
[devops@server1 tasks]$ ls
firewalld.yml  main.yml
[devops@server1 tasks]$ head -n 3 main.yml 
---
- import_tasks: firewalld.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server端需要firewalld允许zabbix-server
[devops@server1 tasks]$ ls
firewalld.yml  main.yml
[devops@server1 tasks]$ pwd
/home/devops/ansible/roles/zabbix-server-mysql/tasks
[devops@server1 tasks]$ cat firewalld.yml 
---
- name: start firewalld
  service:
    name: firewalld
    state: started

- name: config firewalld 
  firewalld:
    port: 10051/tcp
    permanent: yes
    state: enabled
    immediate: yes
[devops@server1 tasks]$ head -n 3 main.yml 
---
- import_tasks: firewalld.yml


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
agent端需要firewalld允许zabbix-agent
[devops@server1 tasks]$ pwd
/home/devops/ansible/roles/zabbix-agent/tasks
[devops@server1 tasks]$ ls
firewalld.yml  main.yml
[devops@server1 tasks]$ cat firewalld.yml 
---
- name: start firewalld
  service:
    name: firewalld
    state: started

- name: config firewalld 
  firewalld:
    port: 10050/tcp
    permanent: yes
    state: enabled
    immediate: yes
[devops@server1 tasks]$ head -n 3 main.yml 
---
- import_tasks: firewalld.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
web端需要firewalld允许http
[devops@server1 tasks]$ ls
firewalld.yml  main.yml
[devops@server1 tasks]$ pwd
/home/devops/ansible/roles/apache/tasks
[devops@server1 tasks]$ cat firewalld.yml 
---
- name: start firewalld
  service:
    name: firewalld
    state: started

- name: config firewalld 
  firewalld:
    service: http
    permanent: yes
    state: enabled
    immediate: yes

[devops@server1 tasks]$ head -n 3 main.yml 
---
- import_tasks: firewalld.yml 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(2)添加tags
为每一个hosts对象添加一个tags,当我们测试时,可以将各个hosts对象模块化分割开来,一块一块测试,十分方便

[devops@server1 ansible]$ pwd
/home/devops/ansible
[devops@server1 ansible]$ cat test_roles.yml 
---
- hosts: db
  roles:
    - role: mariadb
      tags: db

- hosts: server
  roles:
    - role: zabbix-server-mysql
    - role: zabbix-agent
      tags: server

- hosts: web
  roles:
    - role: zabbix-web-mysql
    - role: apache
      tags: web

- hosts: agent
  roles:
    - role: zabbix-agent
      tags: agent 
[devops@server1 ansible]$ 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

(3)变量优化
将配置文件可替换的参数替换为变量,再将变量统一写在vars目录下或者直接写在主yml文件中声明,将变量统一管理,提高通用性。

server端


agent端

————————————————
版权声明:本文为CSDN博主「lllyr(ฅ>ω<*ฅ)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/llllyr/article/details/103220991

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值