前面我们已经学习过zabbix的安装部署步骤,并编写过playbook自动安装脚本,但是playbook将所有部署及服务配置写到了一个文件中,不便于查看于修改。今天,我们来学习zabbix全自动安装之角色编程。
附前篇:编写Playbook实现Zabbix自动安装部署
https://blog.csdn.net/CapejasmineY/article/details/103218902
实验
实验环境:
主机名 | ip | 服务 |
---|---|---|
server1 | 172.25.1.1 | ansible、web |
server2 | 172.25.1.2 | hosts主机、zabbix-server |
server3 | 172.25.1.3 | hosts主机、mariadb |
思路:编写四个角色,分别用来安装配置后端数据库mariadb、前端web界面、zabbix-agent及zabbix-server,然后通过编写zabbix.yml文件,对于不同主机调用不同的角色。
步骤一:使用init命令初始化四个角色的基本结构
cd /home/devops/ansible/roles
ansible-galaxy init mariadb #使用init命令初始化新角色mariadb的基本结构
ansible-galaxy init web
ansible-galaxy init zabbix-server
ansible-galaxy init zabbix-agent
步骤二:编写数据库mariadb角色
(1)编写tasks/main.yml文件,定义任务。
---
# tasks file for mariadb
- 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: '{{ item }}' #调用变量
state: started
enabled: yes
loop: #循环
- mariadb
- firewalld
- name: create database zabbix #创建数据库zabbix
mysql_db:
login_user: root #登陆用户
login_password: westos #登陆密码
name: zabbix #数据库名称
state: present #状态:安装
notify: import create.sql #调用触发器,给数据库zabbix导入表
- 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: config firewalld #配置防火墙
firewalld:
service: mysql #在防火墙上添加服务
permanent: yes
immediate: yes
state: enabled
(2)编写触发器文件handlers/main.yml
---
# handlers file for mariadb
- name: restart mariadb #重启数据库服务,名称与tasks/main.yml文件中调用触发器的名称相同
service:
name: mariadb
state: restarted
- name: import create.sql #导入表
mysql_db:
login_user: root
login_password: westos
name: zabbix
state: import
target: /tmp/create.sql.gz
(3)提前在某一台主机上安装数据库zabbix-server-mysql并进行安全初始化
将配置文件/usr/share/doc/zabbix-server-mysql-4.0.14/create.sql.gz
拷贝到ansible主机(server1)/home/devops/ansible/roles/mariadb/files/
将配置文件/etc/my.cnf
文件拷贝到ansible主机(server1)/home/devops/ansible/roles/mariadb/files/
编辑my.cnf文件,添加utf-8字符集,数据库可以识别中文。
character_set_server=utf8
步骤二:编写zabbix服务端zabbix-server角色
(1)编写tasks/main.yml文件,定义任务。
---
# tasks file for zabbix-server
- name: add zabbix repo #配置阿里云yum仓库,安装最新版本软件
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 #安装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服务端
- zabbix-agent #开启zabbix代理服务
- firewalld
- name: config firewalld #配置i防火墙
firewalld:
port: 10051/tcp #添加zabbix-server与zabbix-agent服务通信端口
permanent: yes
immediate: yes
state: enabled
(2)编写触发器文件handlers/main.yml
---
# handlers file for zabbix-server
- name: restart zabbix-server
service:
name: zabbix-server
state: restarted
(3)在files文件中导入服务要用到的动态文件
提前在某一台主机上安装数据库zabbix-server,将配置文件/etc/zabbix/zabbix_server.conf
拷贝到/home/devops/ansible/roles/zabbix-server/files/,并做如下配置
DBHost=172.25.1.3
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBPort=3306
步骤二:编写zabbix服务端zabbix-agent角色
(1)编写tasks/main.yml文件,定义任务。
---
# tasks file for zabbix-agent
- 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_agentd.conf.j2
dest: /etc/zabbix/zabbix_agentd.conf
owner: root
group: root
mode: 644
notify: restart zabbix-agent
- name: start zabbix-agent
service:
name: "{{ item }}"
state: started
loop:
- zabbix-agent
- firewalld
- name: config firewalld
firewalld:
port: 10050/tcp
permanent: yes
immediate: yes
state: enabled
(2)编写触发器文件handlers/main.yml
---
# handlers file for zabbix-agent
- name: restart zabbix-agent
service:
name: zabbix-agent
state: restarted
(3)提前在某一台主机上安装数据库zabbix-agent,将配制文件zabbix_agentd.conf复制到/home/devops/ansible/roles/zabbix-agent/templates目录下,并修改名称为zabbix_agentd.conf.j2,做如下配置:
Server=172.25.1.2
ServerActive=172.25.1.2
Hostname= {{ ansible_hostname }}
步骤四:编写前端web角色
(1)编写tasks/main.yml文件,定义任务。
---
# tasks file for web
- 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
- name: start httpd
service:
name: "{{ item }}"
state: started
loop:
- httpd
- firewalld
- name: config firewalld
firewalld:
service: http
permanent: yes
immediate: yes
state: enabled
(2)编写触发器文件handlers/main.yml
---
# handlers file for web
- name: restart httpd
service:
name: httpd
state: restarted
(3)在files文件中导入服务要用到的动态文件
提前在某一台主机上安装数据库zabbix-web-mysql,将配置文件/etc/httpd/conf.d/zabbix.conf
拷贝到/home/devops/ansible/roles/zabbix-server/files/,并做如下配置
php_value date.timezone Asia/Shanghai
步骤五:在ansible目录下编写调用角色文件zabbix.yml
---
- hosts: zabbix
roles:
- role: mariadb
- role: zabbix-agent #在server3上安装zabbix-agent
when: ansible_hostname == "server3"
- role: zabbix-server
when: ansible_hostname == "server2"
- role: web
when: ansible_hostname == "server1"
步骤六:运行脚本
cd /home/devops/ansible
ansible-playbook zabbix.yml
步骤七:在web界面搜索web主机server1
http://172.25.1.1/zabbix
登陆成功后: