zabbix的部署
首先进入角色目录创建角色。
[ansible@server10 roles]$ ansible-galaxy init zabbix-server
- Role zabbix-server was created successfully
首先编写任务,本身第一步是安装,但是安装包自带的没有,所以第一步配置yum源。将所有软件包放在一个地方创建一个yum仓库。
[ansible@server10 ~]vim roles/zabbix-server/tasks/main.yml
---
- name: zabbix yum repo
yum_repository:
name: zabbix
description: zabbix-4.4
baseurl: http://192.168.122.1/pub/pag/4.4
gpgcheck: no
任务编写完成,创建一个playbook文件
[ansible@server10 ~]$ cat zabbix.yml
---
- hosts: server11
roles:
- role: zabbix-server ##将源放到节点11上。
边写边推。
[ansible@server10 ~]$ ansible-playbook zabbix.yml
推完之后到相应的节点进行查看
[root@server11 ~]# cat /etc/yum.repos.d/zabbix.repo
[zabbix]
baseurl = http://192.168.122.1/pub/pag/4.4
gpgcheck = 0
name = zabbix-4.4
将yum仓库设置完成后继续编写tasks文件。
- name: install zabbix-server zabbix-agent ##安装server和agent
yum:
name:
- zabbix-server
- zabbix-agent
state: present
- name: create zabbix databases ##创建数据库
mysql_db:
name: zabbix ##数据库的名字
state: present
- name: create zabbix user ##创建用户
mysql_user:
name: zabbix ##用户名
host: localhost
password: "{{dbpasswd}}" ##用户密码,这里设立变量不给明文更安全
priv: 'zabbix.*:ALL' ##将zabbix数据库的权限给出
state: present
因为上面有变量,所以要将变量拿出设置。
[ansible@server10 ~]$ vim /home/ansible/roles/zabbix-server/vars/main.yml
---
dbpasswd: aekhg777
创建完成之后推一下。
[ansible@server10 ~]$ ansible-playbook zabbix.yml
TASK [zabbix-server : create zabbix databases] ************************************************
fatal: [server11]: FAILED! => {"changed": false, "msg": "unable to find /root/.my.cnf. Exception message: (2002, \"Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)\")"}
在创建数据库的时候出错了,说不能连接到数据库,原因是没有启动和安装数据库。所以推远端的时候要一步步来,不然就忘了。
在playbook文件中添加
pre_tasks: ##在其他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 ##添加的文本信息
- name: start mysql-server ##启动数据库
service:
name: mariadb
state: started
设置完成后再次推送远端,
[ansible@server10 ~]$ ansible-playbook zabbix.yml
PLAY RECAP ************************************************************************************
server11 : ok=8 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
这次就完成了推送,没有报错。切换到server11中进行查看。
[root@server11 ~]# mysql -u zabbix -paekhg777
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 119
Server version: 5.5.64-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
| zabbix |
+--------------------+
3 rows in set (0.01 sec)
MariaDB [(none)]> use zabbix;
Database changed
MariaDB [zabbix]> show tables;
Empty set (0.01 sec)
这样的工作完成之后,下一步我没要将数据库进行初始化。数据库的初始化可以自动进行导入。首先我们在server11中找到zabbix数据库的文件。/usr/share/doc/zabbix-server-mysql-4.4.1/create.sql.gz
这个压缩文件。接下来进行初始化。
编辑tasks文件
- name: init zabbix db ##初始化zabbix数据库
mysql_db:
name: zabbix
state: import ##导入
target: /usr/share/doc/zabbix-server-mysql-4.4.1/create.sql.gz ##导入的文件,这个文件在安装好之后自己生成,而且导入的时候支持压缩文件。
导入完成后进行查看。
MariaDB [zabbix]> show tables;
+----------------------------+
| Tables_in_zabbix |
+----------------------------+
| acknowledges |
| actions |
| alerts |
| application_discovery |
| application_prototype |
| application_template |
数据库已经导入完成,但是这个初始化只能导入一次,按理来说不能进行多次导入。当我们再次导入的时候会报错。
TASK [zabbix-server : init zabbix db] *********************************************************
fatal: [server11]: FAILED! => {"changed": false, "msg": "\ngzip: stdout: Broken pipe\n"}
所以我们在tasks中创建数据库的时候添加一个触发器。将初始化数据库的步骤作为触发器。
- name: create zabbix databases
mysql_db:
name: zabbix
state: present
notify: init zabbix db ##调用触发器
数据库初始化完成后还是启动服务。
在tasks中编写
- 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 ##启动两个服务
service:
name: "{{item}}"
state: started
loop:
- zabbix-server
- zabbix-agent
编写完成设置触发器
- name: restart zabbix-server
service:
name: zabbix-server
state: restarted ##更改完配置文件后重启服务
设置模版
cd /home/ansible/roles/zabbix-server/templates/
[ansible@server10 templates]$ sudo scp server11:/etc/zabbix/zabbix_server.conf . ##将配置文件复制过来并改为jinja2后缀
[ansible@server10 templates]$ sudo chown ansible zabbix_server.conf ##更改拥有人,使普通用户可以编辑。
进入模版文件添加DBpasswd中的密码,使可以登陆数据库。
设置完成后推送远端。
全部完成之后我们还缺前端服务。
直接编写playbook文件
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
insertafter: '# php_value'
line: ' php_value date.timezone Asia/Shanghai'
notify: restart httpd
- name: start httpd
service:
name: httpd
state: started
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
- name: restart mysql-server
service:
name: mariadb
state: restarted
编写完成进行推送,之后进入网页进行查看。
用户名和密码分别是admin和zabbix进行登陆。
下来是所有配置
[ansible@server10 ~]$ vim roles/zabbix-server/tasks/main.yml ##任务文件
---
- name: zabbix yum repo
yum_repository:
name: zabbix
description: zabbix-4.4
baseurl: http://192.168.122.1/pub/pag/4.4
gpgcheck: no
- name: install zabbix-server zabbix-agent
yum:
name:
- zabbix-server
- zabbix-agent
state: present
- name: create zabbix databases
mysql_db:
name: zabbix
state: present
notify: init zabbix db
- name: create zabbix user
mysql_user:
name: zabbix
host: localhost
password: "{{dbpasswd}}"
priv: 'zabbix.*:ALL'
state: present
- 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
service:
name: "{{item}}"
state: started
loop:
- zabbix-server
- zabbix-agent
[ansible@server10 ~]$ vim roles/zabbix-server/vars/main.yml ##变量文件
---
dbpasswd: aekhg777
[ansible@server10 ~]$ ll roles/zabbix-server/templates/
-rw-r----- 1 ansible root 17578 3月 10 14:37 zabbix_server.conf.j2 ##模版文件
[ansible@server10 ~]$ vim roles/zabbix-server/handlers/main.yml ##触发器文件
---
- name: init zabbix db
mysql_db:
name: zabbix
state: import
target: /usr/share/doc/zabbix-server-mysql-4.4.1/create.sql.gz
single_transaction: yes
- name: restart zabbix-server
service:
name: zabbix-server
state: restarted
[ansible@server10 ~]$ vim zabbix.yml ##playbook文件
---
- hosts: test
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
- 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
insertafter: '# php_value'
line: 'php_value date.timezone Asia/Shanghai'
notify: restart httpd
- name: start httpd
service:
name: httpd
state: started
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
- name: restart mysql-server
service:
name: mariadb
state: restarted