云计算自动化运维——Ansible使用角色编写zabbix自动安装部署

前面我们已经学习过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
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述登陆成功后:
在这里插入图片描述

发布了170 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/CapejasmineY/article/details/103221421