本次实验环境是在之前编写playbook时配置过的实验环境,在普通用户absible的/home/ansible目录下进行的,已经提前配置好ansible三台hosts主机的免密及用户授权,三台机子均拥有普通用户ansible。具体方法详情见前篇《Ansible(5)——Playbook中loop、when 、block、判断语句的用法、playbook角色创建、导入和包含task等》
附链接:https://blog.csdn.net/dghfttgv/article/details/104817682
目录
一、Ansible Roles简介
- 1、Asible Roles
- 2、什么时角色?
二、实验环境
- 1、编写文件指定角色主目录
- 2、创建角色
- 3、角色的目录结构
三、用roles来简化plabook结构
(一)、用roles远程安装apache 服务的开启等
- 步骤一:创建任务
- 步骤二:触发器的编写
- 步骤三:编写模板
- 步骤四:定义变量
- 步骤五:创建一个yml文件调用roles角色的内容
- 步骤六:测试
(二)、用roles远程安装haproxy
- 步骤一:创建角色
- 步骤二:创建任务
- 步骤三:触发器的编写
- 步骤四:编写模板
- 步骤五:创建一个yml文件调用roles角色的内容
-
步骤六:测试
四、用Roles远程部署Zabbix监控平台
- 步骤一:创建zabbix软件安装的私有仓库、创建角色
- 步骤二:远程安装部署zabbix软件的yum源 、测试
- 步骤三:安装zabbix、开启zabbix服务、数据库的安装等 、测试等
- 步骤四:初始化数据库
- 1、查看:初始化数据库文件的路径
- 2、将初始化数据库的文加路径写入到tasks文件中
- 3、测试
- 步骤五:zabbix服务的配置
- 1、在tasks中添加配置模块
- 2、编辑触发器修改完配置文件之后要进行重启
- 3、主配置文件的主模板
- 4、测试
- 步骤六:安装前端
- 1、在zabbix.yml文件中添加前端安装、配置模块
- 2、编译
- 3、在浏览器上登录zabbix页面
- 步骤七:远程安装agent主机
- 1、初始化角色:
- 2、创建tasks任务
- 3、编辑触发器
- 4、修改zabbix-agent值配置文件
- 5、修改变量文件
- 6、编辑hosts文件
- 7、编译zabbix,yml文件
- 步骤八:测试
一、Ansible Roles简介
- 1、Asible Roles
- 2、什么时角色?
1、Asible Roles
- Ansible Roles 是为了层次化、结构化的组织Playbook
- Roles就是通过分别将变量、文件、任务模块及处理器 处理器放置于单独目录中,并可以便捷地incudle他们。
- roles一般用于基于主机结构服务的场景中,在企业复杂业务场景中应用的频率很高。
- 以特定的层次目录结构进行组织的tasks、variables、handlers、templates、files等;相当函数的调用把各个功能切割成片段来执行。
- role_name: 定义role名字
- files:存放copy或script等模块调用的函数
- tasks:定义各种task,要有main.yml,其他文件include包含调用
- handlers:定义各种handlers,要有main.yml,其他文件include包含调用
- vars: 定义variables,要有main.yml其他文件include包含调用
- templates: 存储由templates模块调用的模板文本
- metaL: 定义当前角色的特殊设定及其依赖关系,要由main.yml文件、
- defaults:要有main.yml的文件,用于设定默认变量
- tests: 用于测试角色
之前学习了playbook,将所有任务、解释器等都定义在一个文件中,内容过于复杂繁琐,不利于后期的维护,因此需要解耦、拆解!
2、什么时角色?
把某个服务特定功能配置定义成模块,当使用时直接调用这个模块,简单明了,在ansible中它有一个特有的名称,即角色。
存放由copy或script模块等调用的文件。Ansible roles是为了层次化、结构化地组织Playbook。根据playbook的功能,如tasks,handlers,templates,files等要实现的工作进行拆分,将各自的功能块放在相应目录中。在roles目录下,分别创建不同的目录,每个目录就是不同的角色,roles目录下是角色的集合。
除此外,每个角色根据其要实现的不同功能,在该角色目录下创建相应的子目录来存放被模块化分解的剧本文件,然后根据各个模块要实现的工作在相应的子目录中编写剧本,
常用的几个角色主目录
cd /etc/ansible/ ##全局的角色目录
/usr/share/ansible/ ##系统角色
/usr/share/ansible/roles/ ##修改linu、时间等 企业8默认自带角色不用自己编写可以直接调用
注:apache.yml文件中如果不指定变量,系统将默认读取roles中定义的变量 ,因此在yml文件中定义的变量比在roles目录下定义的变量的执行级别更高
二、实验环境
- 1、编写文件指定角色主目录
- 2、创建角色
- 3、角色的目录结构
1、编写文件指定角色主目录
[ansible@server1 ~]$ vim .ansible.cfg
vim .ansible.cfg
[defaults]
inventory = ./hosts #(1)资源清单的路径
remote_user = devops #登陆到hosts主机上后用的身份
roles_path = ~/roles #安全的角度-->开放普通用户的身份
[privilege_escalation]
become=True #是否可以sudo
become_method=sudo #采用sudo的身份
become_user=root #sudo后的用户身份
become_ask_pass=False #sudo是否需要验证密码
2、创建角色
[ansible@server1 ~]$ cd roles/ ##进入角色主目录
[ansible@server1 roles]$ ansible-galaxy init haproxy ##创建名为 haproxy角色的角色
- Role haproxy was created successfully
[ansible@server1 roles]$ ansible-galaxy list ##列出已经创建好的角色
# /usr/share/ansible/roles
# /etc/ansible/roles
注:apache.yml文件中如果不指定变量,系统将默认读取roles中定义的变量 ,因此在yml文件中定义的变量比在roles目录下定义的变量的执行级别更高
3、角色的目录结构
3.1、当前目录的角色结构
[ansible@server1 roles]$ tree .
.
├── apache
│ ├── defaults
│ │ └── main.yml
│ ├── files
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml步骤六:测试
│ ├── README.md
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ │ └── httpd.conf.j2
│ ├── tests
│ │ ├── inventory
│ │ └── test.yml
│ └── vars
│ └── main.yml
└── haproxy
├── defaults
│ └── main.yml
├── files[ansible@server1 ~]$ vim /home/ansible/roles/apache/tasks/main.yml
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
三、用roles来简化plabook结构
如何将roles转化成plabook
(一)、用roles远程安装apache
例:用roles对远程主机进行apache服务的部署,并修改httpd.conf主配置文件中的信息
- 步骤一:创建任务
- 步骤二:触发器的编写
- 步骤三:编写模板
- 步骤四:定义变量
- 步骤五:创建一个yml文件调用roles角色的内容
- 步骤六:测试
步骤一:
创建任务:
[ansible@server1 ~]$ vim roles/apache/tasks/main.yml ##roles任务主配置文件
[ansible@server1 ~]$ cd roles/apache/
[ansible@server1 apache]$
[ansible@server1 apache]$ cd tasks/
[ansible@server1 tasks]$
[ansible@server1 tasks]$ vim main.yml ##编辑tasks的主配置文件
---
- name: install {{ web_package }} ##是名称测不需要加双引号
yum:
name: "{{ web_package }}" ##使用变量代替原来名称要加双引号
state: present ##运行的状态
ignore_errors: True ##返回值如果步为0,就会报错.tasks停止
- name: config apache ##修改服务端口号模块
template:
src: httpd.conf.j2 ##将当前目录下的httpd.conf.j2文件中的变量信息复制到/etc/httpd/conf/httpd
dest: /etc/httpd/conf/httpd.conf
mode: 644 ##给定目录的权限为644
notify: restart apache
- name: start apache ##开启服务
service:
name: "{{ web_package }}" ##开启服务的名称
state: started ##要进行操作的动作
enabled: yes ##开启自启的状态
- name: create index.html ##创建httpd服务默认的分布目录
copy:
content: "{{ ansible_facts['hostname'] }}" ##复制此内容到默认的分布目录下
dest: /var/www/html/index.html ##httpd服务的默认发布目录
- name: start firewalld ##开启防火墙规则
service:
name: firewalld ##开启服务的名称
state: started ##动作
enabled: yes ##开启自启动
- name: custom firewalld ##设置防火墙的规则
firewalld:
service: http ##设置规则的名称permanent: yes ##永久允许http 访问防火墙
immediate: yes ##立即生效
state: enabled
步骤二:
触发器的编写
[ansible@server1 ~]$ vim roles/apache/handlers/main.yml ##触发器所在的目录
[ansible@server1 ~]$ cat roles/apache/handlers/main.yml
---
- name: restart apache ##名称
service:
name: "{{ web_package }}" ##启动的变量
state: restarted
步骤三:
编写模板
[ansible@server1 ~]$ cd roles/apache/templates/ ##进入到模板的主目录
[ansible@server1 templates]$ cp ~/httpd.conf.j2 . ##将http主配置文件复制模板到当前的目录下
[ansible@server1 ~]$ cd roles/apache/templates/
[ansible@server1 templates]$ cp ~/httpd.conf.j2 .
[ansible@server1 templates]$ cat httpd.conf.j2...
Listen {{ ansible_facts["eth0"]["ipv4"]["address"] }}:{{ http_port }} ##编辑监听端口的变量
步骤四:
定义变量
[ansible@server1 ~]$ vim roles/apache/vars/main.yml
[ansible@server1 ~]$ cat roles/apache/vars/main.yml
---
web_package: httpd ##变量对应的是tasks文件中的内容
http_port: 80 ##变量对应的是 httpd.conf.j2 文件中的内容
步骤五:
创建一个yml文件调用roles角色的内容
[ansible@server1 ~]$ vim apache.yml
[ansible@server1 ~]$ cat apache.yml
---- hosts: webservers ##部署在webservers组下的所有远端server
roles:
- role: apache ##调用的角色
注:apache.yml文件中如果不指定变量,系统将默认读取roles中定义的变量 ,因此在yml文件中定义的变量比在roles目录下定义的变量的执行的优先级别更高
步骤六:
测试:
[ansible@server1 ~]$ ansible-playbook apache.yml
1.1、编译出现了报错
[ansible@server1 ~]$ ansible-playbook apache.yml
PLAY [webservers] *****************************************************************************************************
ERROR! Attempting to decrypt but no vault secrets found ##测试出现了报错
(报错提示系统中出现重复的变量!!!!)
1.2、解决的方法
因为之前在进行plabook实验中给文件加密造成的(因为在上边的操作过程中我们并没有定义文件加密模块所以系统会默认读取之前所建立的加密文件)
- 将之前的加密文件去掉
[ansible@server1 ~]$ cd host_vars/
server2[ansible@server1 host_vars]$ cd server2/
[ansible@server1 server2]$ ls
vars vault
[ansible@server1 server2]$ rm -fr vault ##将之前的加密文件去除
[ansible@server1 ~]$ ansible-playbook apache.yml ##对apache文件进行编译PLAY [webservers] *****************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************
ok: [server3]
ok: [server2]TASK [apache : install httpd] *****************************************************************************************
ok: [server3]
ok: [server2]TASK [apache : config apache] *****************************************************************************************
changed: [server2]
changed: [server3]TASK [apache : start apache] ******************************************************************************************
ok: [server3]
ok: [server2]TASK [apache : create index.html] *************************************************************************************
ok: [server2]
ok: [server3]TASK [apache : start firewalld] ***************************************************************************************
ok: [server2]
ok: [server3]TASK [apache : custom firewalld] **************************************************************************************
ok: [server3]
ok: [server2]RUNNING HANDLER [apache : restart apache] *****************************************************************************
changed: [server3]
changed: [server2]PLAY RECAP ************************************************************************************************************
server2 : ok=8 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
server3 : ok=8 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
(编译成功!!!!)
1.3、在server2、server3上查看httpd.conf文件中的端口变量的取值
(二)、用roles远程安装haproxy
- 步骤一:创建角色
- 步骤二:创建任务
- 步骤三:触发器的编写
- 步骤四:编写模板
- 步骤五:创建一个yml文件调用roles角色的内容
- 步骤六:测试
步骤一:
创建角色
[ansible@server1 roles]$ ansible-galaxy init --force haproxy ##创建角色名为haproxy
- Role haproxy was created successfully
[ansible@server1 roles]$
步骤二:
创建tasks任务
[ansible@server1 ~]$ vim roles/haproxy/tasks/main.yml
[ansible@server1 ~]$ cat roles/haproxy/tasks/main.yml
---
- name: install haproxy ##安装haproxy软件
yum:
name: haproxy
state: present
- name: config haproxy ##编辑haproxy主配置文件
template:
src: haproxy.cfg.j2 ##将当前目录下的haproxy主配置文件文件中的变量信息复制到
dest: /etc/haproxy/haproxy.cfg
notify: restart haproxy ##触发器的触发信号
- name: start haproxy ##开启haproxy服务
service:
name: haproxy
state: started
步骤三:
触发器的编写
[ansible@server1 ~]$ vim roles/haproxy/handlers/main.yml
- name: restart haproxy
service:
name: haproxy ##触发器的名称
state: reloaded ##重器服务
步骤三:
编写模板
[ansible@server1 ~]$ cd roles/haproxy/templates/ ##进入模板目录下
[ansible@server1 templates]$ cp ~/haproxy.cfg.j2 . ##将haproxy值配置目录复制到当前目录下
haproxy.cfg.j2文件中的内容:
(红字部分表示修改的内容)
[ansible@server1 templates]$ cat haproxy.cfg.j2
#---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
步骤三:
# turn on stats unix socket
stats socket /var/lib/haproxy/stats#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main *:80
default_backend app步骤一:创建角色#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend app
balance roundrobin
{% for host in groups['webservers'] %}
server {{ hostvars[host]['ansible_facts']['hostname'] }} {{ hostvars[host]['ansible_facts']['eth0']['ipv4']['address'] }}:80 check
{% endfor %}
步骤四:
创建一个haproxy.yml文件调用roles角色的内容步骤一:创建角色
[ansible@server1 ~]$ vim haproxy.yml
步骤五:
测试
1.1、编译haproxy.cml文件内容
[ansible@server1 ~]$ ansible-playbook haproxy.yml
步骤一:创建角色
1.2、在server1上
1.2.1、查看haproxy配置目录的配置情况
[ansible@server1 ~]$ vim /etc/haproxy/haproxy.cfg ## 查看haproxy主目录的配置文件信息
1.2.2、访问server1
[ansible@server1 ~]$ curl server1
(实现了负载均衡!!)
四、用Roles远程部署Zabbix监控平台
控制任务的执行顺序
---
- hosts: server2
roles:
- roles: role1
pre_tasks:
- tasks1
tasks:
-tasks2
post_tasks:
- tasks3
handlers:
...
步骤一:
创建zabbix软件安装的私有仓库、创建角色
1、创建zabbix软件安装的私有仓库
1.1、提前将下好的zabbix安装包放到真机的 /var/www/html/pub/zabbix/zabbix-ce/目录下
1.2、创建yum源仓库
在zabbix-ce的上层目录下输入以下命令
[root@foundation6 zabbix]# createrepo zabbix-ce/ 创建yum仓库
查看
(出现这个目录就说明已经创建成功)
2、创建角色
[ansible@server1 roles]$ ansible-galaxy init zabbix-server ##创建角色
- Role zabbix-server was created successfully
[ansible@server1 roles]$
步骤二:
远程安装部署zabbix软件的yum源 、测试
1、查看远程部署yum源文件的命令
[ansible@server1 roles]$ ansible-doc -l | grep yum ##查看远程部署yum源文件的类型
yum Manages packages with the `yum' package manager
yum_repository Add or remove YUM repositories
[ansible@server1 roles]$ ansible-doc yum_repository ##查看远程部署yum文件的相关配置方法
2、编辑tasks任务
[ansible@server1 ~]$ vim roles/zabbix-server/tasks/main.yml
[ansible@server1 ~]$ cat roles/zabbix-server/tasks/main.yml
---
- name: zabbix yum repo
yum_repository: ##添加yum仓库
name: zabbix
description: zabbix-4.4
baseurl: http://172.25.6.250/pub/zabbix/zabbix-ce/ ##私有仓库软件安装的内网地址
gpgcheck: no
2.1、在浏览器上查看yum源的路径是否可以访问
3、测试
3.1、创建zabbix.yml文件调用zabbix-server角色
[ansible@server1 ~]$ vim zabbix.yml
[ansible@server1 ~]$ cat zabbix.yml
---
- hosts: server2 ##远程部署的主机
roles:
- role: zabbix-server ##调用的角色
3.2、编译zabbix.yml文件
[ansible@server1 ~]$ ansible-playbook zabbix.yml
3.3、在远端主机server2上
查看yum源的配置情况
[root@server2 ~]# cd /etc/yum.repos.d/
[root@server2 yum.repos.d]# ls
exam.repo redhat.repo zabbix.repo
[root@server2 yum.repos.d]# cat zabbix.repo
[zabbix]
baseurl = http://172.25.6.250/pub/zabbix/zabbix-ce/
gpgcheck = 0
name = zabbix-4.4
(安装zabbix的yum源文件已经配置好i)
步骤三:
安装zabbix、开启zabbix服务、数据库的安装等 、测试等
1、安装zabbix软件并开启服务
创建任务
[ansible@server1 ~]$ vim roles/zabbix-server/tasks/main.yml
---
- name: zabbix yum repo
yum_repository: ##添加yum仓库的语法
name: zabbix
description: zabbix-4.4
baseurl: http://172.25.6.250/pub/zabbix/zabbix-ce/ ##私有仓库软件安装的内网地址
gpgcheck: no#############################安装zabbix监控软件###########################
- name: install zabbix-server zabbix-agent
yum:
name:
- zabbix-server
- zabbix-agent
state: present#############################创建zabbix数据库#############################
- name: create zabbix database
mysql_db:
name: zabbix
state: present############################创建zabbix登录用户###########################
- name: create zabbix user
mysql_user:
name: zabbix
host: localhost ##数据库的作用的对象
password: "{{ dbpasswd }}" ##数据库的密码
priv: 'zabbix.*:ALL' ##应用授权
state: present
2、在zabbix.yml文件中编辑变量、安装数据库软件、开启数据库 ,
[ansible@server1 ~]$ cat zabbix.yml
---
- hosts: server2
roles:ansible-playbook zabbix.ymlansible-playbook zabbix.yml
- role: zabbix-serverpasswd: westos ##变量的定义
#####################################安装数据库############################
pre_tasks: ##优先执行
- name: install mysql-server
yum:
name: mariadb-server
state: present######################################配置数据库文件#########################
- name: config mysql-server
lineinfile: ##加一行用此语法
path: /etc/my.cnf.d/server.cnf ##将下边的内容写入数据库的配置文件
insertafter: '^\[mysqld\]' ##以[mysqld]开头的下以行输入以下内容
line: character-set-server=utf8 ##编辑my.cnf文件,添加utf-8字符集,数据库可以识别中文。- name: start mysql-server ##开启数据库服务
service:
name: mariadb
state: started
3、测试
3.1、编译zabbix.yml文件
[ansible@server1 ~]$ ansible-playbook zabbix.yml
3.2、在server2远程主机上查看utf8字符是否已经成功的导入文件中
[root@server2 ~]# vim /etc/my.cnf.d/server.cnf
ansible-playbook zabbix.yml
3.3、登录数据库
[root@server2 ~]# mysql -u zabbix -pwestos ##登录数据库
(进入数据库中数据为空因为没有初始化数据库!!)
步骤四:
初始化数据库
1、初始化数据库文件的路径:
[root@server2 ~]# cd /usr/share/doc/zabbix-server-mysql-4.4.1/
[root@server2 zabbix-server-mysql-4.4.1]# ls
AUTHORS ChangeLog COPYING create.sql.gz NEWS README
2、将初始化数据库的文加路径写入到tasks文件中
因为数据库初始化只有依次第二次再初始化是系统会出现报错
所以采用了触发器的方式来进行初始化
2.1、在tasks中添加触发器的触发信号
[ansible@server1 ~]$ vim roles/zabbix-server/tasks/main.yml
---
- name: zabbix yum repo
yum_repository: ##添加yum仓库的语法
name: zabbix
description: zabbix-4.4
baseurl: http://172.25.6.250/pub/zabbix/zabbix-ce/ ##私有仓库软件安装的内网地址
gpgcheck: no- name: install zabbix-server zabbix-agent
yum:
name:
- zabbix-server
- zabbix-agent
state: present- name: create zabbix database
mysql_db:
name: zabbix
state: present
notify: init zabbix db ##如果次模块发生了改变就通知init zabbix db 做相应的变化
2.2、编辑触发器模块
[ansible@server1 ~]$ vim roles/zabbix-server/handlers/main.yml ##进入触发器配置文件中
---
- name: init zbbix db ##初始化数据库
mysql_db:
name: zabbix
state: import
target: /usr/share/doc/zabbix-server-mysql-4.4.1/create.sql.gz ##初始化文件所在的路径 (自动解压)
3、测试
3.1、编译
[ansible@server1 ~]$ ansible-playbook zabbix.yml
(只要数据库重建九进行初始化!!!)
3.2、在server2主机上登录数据库
[root@server2 ~]# mysql -u zabbix -pwestos
[root@server2 ~]# mysql -u zabbix -pwestos ##登录数据库
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 35
Server version: 5.5.56-MariaDB MariaDB ServerCopyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use zabbix ##进入到zabbix用户下
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
MariaDB [zabbix]> show tables; ##查看数据库的内容
4、验证数据库重建立才会初始化
4.1、删除数据库
MariaDB [zabbix]> drop database zabbix; ##删除数据库
Query OK, 149 rows affected (1.70 sec)MariaDB [(none)]> show databases; ##查看数据库的内容
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.00 sec)MariaDB [(none)]>
(zabbix已经被删除!!!)
4.2、编译
(数据库又进行了重建!!!)
4.2.1、查看数据库
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
| zabbix |
+--------------------+
3 rows in set (0.01 sec)MariaDB [(none)]> use zabbix
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
4.3、已经初始化过在次编译文件的时候系统不会再进行初始化
步骤五:
zabbix服务的配置模块的编写、测试
zabbix服务的配置文件的路径 : /etc/zabbix/zabbix_server.conf
1、在tasks中添加配置模块
[ansible@server1 ~]$ vim roles/zabbix-server/tasks/main.yml
[ansible@server1 ~]$ cat roles/zabbix-server/tasks/main.yml
---
- name: zabbix yum repo
yum_repository: ##添加yum仓库的语法
name: zabbix
description: zabbix-4.4
baseurl: http://172.25.6.250/pub/zabbix/zabbix-ce/ ##私有仓库软件安装的内网地址
gpgcheck: no- name: install zabbix-server zabbix-agent
yum:
name:
- zabbix-server
- zabbix-agent
state: present- name: create zabbix database
mysql_db:
name: zabbix
state: present
notify: init zabbix db ##如果次模块发生了改变就通知init zabbix db 做相应的变化- name: create zabbix user
mysql_user:
name: zabbix
host: localhost
password: "{{ dbpasswd }}"
priv: 'zabbix.*:ALL'
state: present################################配置zabbix服务########################
- name: config zabbix-server
template:
src: zabbix_server.conf.j2
dest: /etc/zabbix/zabbix_server.conf
notify: restart zabbix-server ##配置好之后要重启使服务生效- name: start zabbix-server zabbix-agent ##触发器信号、重启服务zabbix-server zabbix-agent
service:
name: "{{ item }}"
state: started
loop:
- zabbix-server
- zabbix-agent
2、编辑触发器修改完配置文件之后要进行重启
[ansible@server1 ~]$ vim roles/zabbix-server/handlers/main.yml
[ansible@server1 ~]$ cat roles/zabbix-server/handlers/main.yml
---- name: restart zabbix-server
service:
name: zabbix-server
state: restarted
3、配置主配置文件的主模板:zabbix_server.conf.j2
[ansible@server1 templates]$ sudo scp server2:/etc/zabbix/zabbix_server.conf . ##第一步:将zabbix主配置文件复制到当前的模板的目录下
zabbix_server.conf 100% 17KB 9.1MB/s 00:00
[ansible@server1 templates]$ ls
zabbix_server.conf
[ansible@server1 templates]$ mv zabbix_server.conf zabbix_server.conf.j2 ##第二步:修改文件的名称
[ansible@server1 templates]$ ls
zabbix_server.conf.j2[ansible@server1 templates]$ sudo chown ansible zabbix_server.conf.j2 ##第三步: 修改文件的权限 (默认是root权限)
[ansible@server1 templates]$ vim zabbix_server.conf.j2 ##第五步修改主配置文件的内容
### Option: DBPassword
# Database password.
# Comment this line if no password is used.
#
# Mandatory: no
# Default:
DBPassword={{ dbpasswd }} ##设置服务登录的密码
4、测试
4.1、编译
[ansible@server1 ~]$ ansible-playbook zabbix.yml
4.2、在server2上输入 ps ax 查看进程
[root@server2 ~]# ps ax
(zabbix已经配置成功 !!!)
4.3、查看/etc/zabbix/zabbix_server.conf文件的信息
(已经配置成功!!)
4.4、查看zabbix-server服务日志
[root@server2 ~]# cat /var/log/zabbix/zabbix_server.log ##查看日志
步骤六:
安装前端
1、在zabbix.yml文件中添加前端安装、配置模块
[ansible@server1 ~]$ cat zabbix.yml
[ansible@server1 ~]$ cat zabbix.yml
---
- hosts: server2
roles:
- role: zabbix-server
pre_tasks:
- name: install mysql-server
yum:
name: mariadb-server
state: present- name: config mysql-server
lineinfile:
path: /etc/my.cnf.d/server.cnf
insertafter: '^\[mysqld\]'
line: character-set-server=utf8
notify: restart mysql-server ##当数据库改变的时候九重启动mysql-server 服务- name: start mysql-server
service:
name: mariadb
state: started
post_tasks: ##安装前端模块
- name: install zabbix front
yum:
name:
- zabbix-web-mysql
- httpd
state: present- name: config zabbix front ##设置前端模块
lineinfile:
path: /etc/httpd/conf.d/zabbix.conf ##zabbix默认的发布目录
insertafter: '^# php_value' ##在配置 文件中插入下边的内容
line: 'php_value date.timezone Asia/Shanghai' ##将时区写入配置文件中
notify: restart httpd ##一旦配置文件发生变化就会触发触发器
- name: start httpd ##开启httpd服务
service:
name: httpd
state: started
handlers: ##触发器模块
- name: restart httpd
service:
name: httpd
state: restarted
- name: restart mysql-server
service:
name: mairadb
state: restarted
安装完前端会自动生成 /etc/httpd/conf.d/zabbix.conf 文件
2、编译:
[ansible@server1 ~]$ ansible-playbook zabbix.yml
3、在浏览器上登录zabbix页面
#http://172.25.6.2/zabbix/setup.php
3.1、初始化zabbix
3.1.1、初始化完成后系统会自动生成 /etc/zabbix/web/zabbix.conf.php 下的初始化文件
如果想要免去初始化的步骤将 /etc/zabbix/web/zabbix.conf.php文件通过模板推送给远程主机即可!!!!
3.2、将语言设置为中文
3.3、自动注册
3.3.1、点击配置——>选择动作——>自动注册——> 创建动作
3.3.2、创建动作
3.3.3、创建动作
3.3.4、添加主机到群组
3 .3.5、与模板相关联
步骤七:
远程安装agent主机
1、初始化角色:
[ansible@server1 ~]$ cd roles/
[ansible@server1 roles]$
[ansible@server1 roles]$ ansible-galaxy init zabbix-agent ##初始化角色
2、创建tasks任务
[ansible@server1 ~]$ vim roles/zabbix-agent/tasks/main.yml
---
- name: zabbix yum repo
yum_repository: ##添加yum仓库的语法
name: zabbix
description: zabbix-4.4
baseurl: http://172.25.6.250/pub/zabbix/zabbix-ce/ ##私有仓库软件安装的内网地址
gpgcheck: no- name: install zabbix-agent ##安装zabbix-agent
yum:
name: zabbix-agent
state: present- name: config zabbix-agent ##配置zabbix-agent主配置文件
template:
src: zabbix_agentd.conf.j2 ##模板
dest: /etc/zabbix/zabbix_agentd.conf
notify: restart zabbix-agent ##触发器信号- name: start zabbix-agent ##开启zabbix-agent服务
service:
name: zabbix-agent
state: started
3、编辑触发器
[ansible@server1 ~]$ vim roles/zabbix-agent/handlers/main.yml
[ansible@server1 ~]$ cat roles/zabbix-agent/handlers/main.yml
---
- name: restart zabbix-agent ##重启
service:
name: zabbix-agent
state: restarted
4、修改zabbix-agent值配置文件
步骤:从server2上复制主配置模板——>授权——>修改主配置文件的内容
[ansible@server1 ~]$ cd /roles/zabbix-agent/templates/zabbix_server.conf.j2
[ansible@server1 templates]$ sudo scp server2:/etc/zabbix/zabbix_agentd.conf . ##复制zabbix_agentd
zabbix_agentd.conf 100% 11KB 9.0MB/s 00:00
[ansible@server1 templates]$ mv zabbix_agentd.conf zabbix_agentd.conf.j2 ##修改模板的名称和文件中的名称一样[ansible@server1 templates]$ ls
zabbix_agentd.conf.j2
[ansible@server1 templates]$ sudo chown ansible zabbix_agentd.conf.j2 ##授权
[ansible@server1 templates]$
[ansible@server1 templates]$ vim zabbix_agentd.conf.j2 ##修改配置文件的内容...
Server={{ zabbix_server }} ##连接主的ip
...ServerActive={{ zabbix_server }} ##主服务的ip
...
Hostname={{ ansible_hostname }} ##本机的名称
...
5、修改变量文件
[ansible@server1 ~]$ vim roles/zabbix-agent/vars/main.yml
[ansible@server1 ~]$ cat roles/zabbix-agent/vars/main.yml
---
zabbix_server: <zabbix_serverip> ##zabbix_server的ip
6、编辑hosts文件
[ansible@server1 ~]$ vim hosts
[zabbix]
server3
查看是否能和server3 ping通
[ansible@server1 ~]$ ping server3
PING server3 (172.25.6.3) 56(84) bytes of data.
64 bytes from server3 (172.25.6.3): icmp_seq=1 ttl=64 time=0.267 ms
64 bytes from server3 (172.25.6.3): icmp_seq=2 ttl=64 time=0.411 ms
^C
--- server3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.267/0.339/0.411/0.072 ms
7、编译zabbix,yml文件
[ansible@server1 ~]$ ansible-playbook zabbix.yml
步骤八
测试
1.1、在server3上查看agent主配置文件
1.1.2、查看日志
[root@server3 ~]# cat /var/log/zabbix/zabbix_agentd.log
(显示已经成功的连接到了servre2 的主机)
1.1.3、在浏览器上查看自动注册结果
(在server3上安装zabbix-agent服务,自动注册时成功的添加server3!!!)
总结:
Ansible Roles 是为了层次化、结构化的组织Playbook,使用roles来对服务进行部署能大大的减少一些繁杂的步骤,而且更能然是到服务部署的过程以及原理 ,在实验的过程中一定要注意防火墙和服务的状态有时候自动部署软件二次开启时需要自己手动开启服务,在角色的部署中zabbix.yml文件中所定义的内容优先级大于roles中定义的各个模块的内容,在执行时会覆盖掉roles各个模块所定义的内容 。