设为首页 收藏本站
查看: 2461|回复: 0

[经验分享] 运维工具ansible+cobbler+zabbix

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-8-17 09:21:57 | 显示全部楼层 |阅读模式
运维工作


一.系统

硬件----部署操作系统---多个主机
如何高效的安装操作系统

1.部署在裸机上的操作系统 bare metal
pxe预执行环境:网卡自身有一个rom,可以自己加载来获得IP地址,能够到文件服务器上加载bootloader文件,依赖于网卡和网络预先提供的安装服务

但是pxe只能预引导1中操作系统

二次封装的pxe:cobbler 将多版本的操作系统环境支持 *


【但是都需要支持pxe】

2.虚拟机器 virtual machine *

二.程序

configurtion 自动完成安装程序,到配置文件的都可以完成

puppet(ruby)所有互联网公司都在使用 *

saltstack(python)与puppet一个作用 开发语言不同而已

【两者都很重量级,没有达到几十上百台不能良好发挥,成本也高,门槛也高】

所以,有了ansible,早些年的chef,cfengine等configurtion

三.操作
command and control:批量运行一些命令,统一命令操作工具

fabric(python):轻量级
func
ansible *


以及监控工具*

四.程序发布(电子商城,论坛)
1.人工智能(手动发布)

2.脚本

3.发布程序:公司内部研发的专门的运维程序框架

要求:
1.【给飞行中的飞机(双发)换发动机】
不能影响用户体验
2.系统不能停机

3.不能导致系统故障或系统完全不可用

【程序发布一般不会在访问量很多的白天进行,=并且在系统部署的时候要留有性能空间,即便停止一部分设备,剩余的也可以轻松的处理请求,所以部署的时候要预留30%左右的性能,但是又容易造成性能浪费,所以有了弹性计算】
弹性计算:如果发现用户量很小,一批一批的而关闭主机,用户量大的时候,一批批的开启


灰度模型:

一次只更新一部分主机,一般在凌晨,访问量较小,将一部分的权重该为零,然后停止服务器,添加新应用,重启,改回正常的权重,然后看请求是不是正常进行,正常就依次重启
1.基于主机做灰度
2.基于用户做灰度

发布路径

在调度器上下线一批主机(标记为维护模式--软离线)---关闭服务(后端主机的服务)----部署新版本---启动服务(后端主机服务)----调度器上启动这些主机
版本上线   应用程序发布

问题:
1.但是如果有回话怎么办
一般session都是放在server上的
【http的长连接是不超过10秒的,权重设置为0的等10秒就好了可以下线(冷模式,一定要停掉,反正已经下线了)了,有回话就等回话的最长时间】
2.发了新版本后发现有bug怎么办
回滚

3.如果用户上传文件了怎么办,又不能覆盖
一般nginx可以将用户上传的文件(静态)单独放到一个目录或服务器来,到时候软连接等就好

五.运维工具分类
管理主机需要拥有被管理主机的特殊权限,但是不安全,所以有了两种方式
无agent(agentless): ansible,
ssh,但是管理主机会有被管理主机的管理员用户账号密码,如果管理主机沦陷,后边的都有危险,于是,都创建一个基于sodu命令的用户

agent:puppet,func
每个主机都装一个程序,2者通过一个加密协议来进行通信,该进程由管理员的身份运行,所有命令都基于该程序运行,也就都有了被管理主机的管理员的权限

六.ansible:能够兼具以上四种功能的工具,第二种第三种完整提供【第一种在开发,第四种要自己配置】,轻量化
configuration

command and control


特性:
高度模块化:调用特定模块完成特定任务
基于python语言实现,paramiko pyYAML和jinja三个关键模块
部署简单:agentless
支持自定义模块
支持playbook(剧本,编排) yaml格式配置文件,可自行编写,可以编排:第一步做什么,第二部做什么...*

幂等性:一个命令执行一遍和多遍结果都一样,不回因为多次操作而变化*

快速失败:在一个程序出错,会快速的告诉你那里出错,不用自己找*
【ansible框架图】

playbook(剧本,编排) yaml格式配置文件,可自行编写,可以编排:第一步做什么,第二部做什么...,调用模块进行,做什么操作就写什么

connection plugins:连接插件,最有名的,标准,默认的是ssh

host..:清单,被管理主机清单,那些主机被管理都要列在里边,不在的将不被ansible管理


应用:一台ansible管理 三台被管理(2台c7,1台c6)

【扩展:要是又多了乌班图主机呢】

当你的被管理主机有不同版本的同一系统(c6,c7)或不同系统(centos,ubautu)的时候,你的配置文件要有条件判断,循环


主配置文件 /etc/ansible/ansible.cfg
hosts:主机清单文件*
roles
   /usr/bin/ansible:主程序
ansible-playbook:跑剧本的
ansible-doc:查看配置文件的

主机清单图


hosts:[websrvs]
IP地址【同一主机可以再多个清单中】
      [dbsrvs]

ansible-doc -l:查看所以模块

ansible -h:帮助

ansible <host-pattern> [options]
host-pattern:可以统配
ansible all[所有主机] -m ping   
简单使用格式
ansible  HOST-PATTERN  -m MOD_NAME  -a  MOD_ARGS

-a 指明模块参数
【省略模块的时候会自动调用command模块】
-u sodoname :指明sudo用户

例如:ansible all[所有主机] -m ping



ansible具体模块
查看所以模块
ansible-doc -l
模块文件查找路径,在主配置文件中查找
查看模块使用方法
ansible-doc -s MOD_NAME
例如 ansible-doc -s ping

帮助
ansible[-doc|-playbook] -h

1.command:远程主机上运行名令

ansible  HOST-PATTERN  -m command  -a ‘命令’

不支持管道功能以及一些shell特性

2.shell:远程主机上执行命令,调用一个shell进程,命令是shell子进程执行

ansible  HOST-PATTERN  -m shell  -a  ’命令‘

支持管道等shell特性的命令

3.copy:把文件复制到制定的远程节点位置

ansible  HOST-PATTERN  -m copy  -a  MOD_ARGS
[带=的表示必须要带的参数]
格式:args=
src:那个文件|目录发送到远程主机
dest=:复制到远程主机的什么位置,必须是绝对路径,不存在创建,已存在覆盖,规则同cp
content:自己写要发送什么到远程主机
dest=

mode:指明文件在目标主机上的权限

owner:属主属组指明

4.cron
ansible  HOST-PATTERN  -m cron  -a  MOD_ARGS

name=:指明任务名字,必须写
state:创建还是删除cron任务,创建present,删除absent
minute= */#:没几分钟,基本上规则等于cron的配置文件中的规则,#;每小时的第几中做什么
hour,day,mouth,weekday,reboot

job=:那个时间做什么

5.fetch:从远程主机上拉取文件
ansible  HOST-PATTERN  -m fetch  -a  MOD_ARGS
src= 目标的存放位置,可以使目录或者是文件
dest= 拉取过来的文件存放的位置,只能是目录

通常上是讲从一个节点上fetch,除非是一个目录


6.file:设定文件属性,什么属主属组啊之类的

ansible  HOST-PATTERN  -m file  -a  MOD_ARGS

(1).path=:指明文件路径,比给参数

src:源文件

state:directory

例:ansible all -m file -a "src=/tmp/fstab path=/tmp/fstab.link state=link"

(2).path=file group= owner= mode=
修改文件属性
(3).path= state=directory
创建目录
7. hostname

ansible  HOST-PATTERN  -m hostname  -a  MOD_ARGS

name=:主机不同命,可以用循环或者是变量

8.mysql_db:在远程数据库上添加数据库

9.pip:让远程主机的python环境自动安装python依赖的模块等

10.yum:基于yum管理程序包(要求远程主机支持yum)

ansible  HOST-PATTERN  -m MOD_NAME  -a  MOD_ARGS

name=:包名,可以带版本号
state:present 安装最新版本
   latest

   absent 删除

11.service:管理服务

ansible  HOST-PATTERN  -m MOD_NAME  -a  MOD_ARGS

name=:必给
state:started|stopped restarted
enabled:是不是开机自动启动
runlevel:那几个级别开机启动,默认2345

12.uri:想指明的每个web服务器请求个uri

ansible  HOST-PATTERN  -m MOD_NAME  -a  MOD_ARGS

url=:url完整格式,通常用变量
user,password

13.user:管理 用户|组 账号

ansible  HOST-PATTERN  -m MOD_NAME  -a  MOD_ARGS

name=:
state:present
   latest

   absent

system:是不是系统账号yes|no
uid
group:基本组
groups:附加组
shell
home
move_home:移动家目录
remove:删除用户的时候同时删除用户的家目录

14.group:管理组

ansible  HOST-PATTERN  -m MOD_NAME  -a  MOD_ARGS

name=:必给的,组名
state:
system:
gid:

15.scripts模块:执行脚本的,本地路径上的脚本,自动复制道远程主机上在进行执行

ansible  HOST-PATTERN  -m MOD_NAME  -a “/path/to/script_file"

用法很像shell和command




YAML:数据结构描述格式【key value】清单,散列表,标量

多个key:value在一起叫散列表,就是字典

例如 { name:"user11",group:"group11"}


house:
  family:
    name: Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      age:17
      aa:16
      - Mark
      - Simone
  address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345

上边整体都可以叫做一个字典,因为是多个键值对组成的,address和family也是字典,parents就是列表

列表children中,其中一个值又是一个字典


    一个键多个值,值是列表,列表的值前边要有-

例如 packages:
-httpd
-php
-php-mysql


【可以嵌套】
family:
    name: Doe
    parents:
                 - John
                 - Jane
    children:
                 - Paul
                 - Mark
                 - Simone

          family是一个键,他的值是嵌套的一个键值对,一个列表,而且,本身family就是一个字典

【.yaml|.yml结尾】
playbook 核心元素
Hosts:
Tasks:任务,模块加参数
Vsrisble:变量 [自带|自定义]
Templates:模板,包含了模板语法的文本文件
handlers:处理器,在特定条件下才会被触发的任务,本质上还是Tasks


举例,一个playbook定义了安装程序,提供配置文件,启动服务三个步骤,当配置文件变化的时候,由于幂等性的原因,ansible发现程序安装了,就不会在安装了,发现配置文件变了,会重新传一份新配置文件,发现服务启动了,就不会在启动一遍服务了,所以,这个时候的新的配置文件是不会生效的,因为playbook之定义了启动服务,这个时候就需要handlers来设定,一旦发现配置文件有变化立马重启服务(|重读配置文件)使配置文件生效


Roles:角色,由以上元素组成的特定结构


playbook的基础组件

*1.hosts:运行指定任务的目标主机;可以是一个或多个以:分割的主机,但是要事先在配置文件定义
2.remote_user:在远程主机上执行任务的用户,可以是一个全局用户,也可以单任务指定
3.sudo_user:以sudo的方式运行时,于哪个用户运行,某些场景的可选用户
*4.tasks:任务列表,第一个任务在三台主机运行完,再将第二个运行三台主机,一旦有一个主机运行出问题,会终止,修改好后在运行,不会影响之前运行
             过的主机

模块,模块参数
格式:
1.action:module arguments(仅新版支持)
2.module:arguments(所有版本都支持)
command|shell:命令
其余的都严格遵循key=value

【每一个任务都要有个名字,以便于出错了给你报名字name:taskname】

某任务的状态字运行后为change时,可以通过notify来通知

任务可以通过tags打标签,可在ansible-playbook命令使用标签-t,多个用:或空白隔开


图片示例




ansible-playbook /path/to/file option

-v:详细信息
--list-hosts:只输出主机列表,不执行任何命令
--check:只测试不执行
-t tags :指明那个标签上边的用户
-e VARS:命令行传导参数项,就是想awk -v一样在命令行定义变量
-s:以sudo的方式运行


运行结果图






ok=#:主机上有几个成功执行的任务
changed=#:有几个是通过修改以后完成的
unreachable=#:有几个主机联系不到的
failed=#失败的个数








主机的facts变量:手机远程主机的facts 变量,在每次运行playbook之前都会自动运行

手动:ansible all -m setup -a facts
手动执行就可以看见目标主机的所有变量了

运行playbook的方式
1.测试
ansible-playbook --check file.yml
只测试运行结果,不真正的执行
ansible-playbook --list-hosts
列出运行的主机
2.运行
ansible-playbook /path/to/file


handlers:在特定条件下触发,在关注的资源发生改变的时候触发,或接受到通知时触发
经常在某任务的状态在运行后为changed的时候使用notify的方式通知处理器

使用方法:那配置文件来举例

在更改配置文件的task(被更改的任务)的下面,加上
notify:handler_name,
然后在这个列表结束后加上
handler:
          -name:handler_name
           动作
    要求就是notify和handler的handler_name必须是一致的



    -hosts:192.168.1.101
     remote_user:root
     tasks:
     -name:install httpd
      yum:name=httpd state=present
     -name:configure
      copy:src=file dest=hosts/path/to/dir

      notify:restart httpd

     -name:start httpd
      service:name=httpd state=started

     handler:

     -name:restart httpd

      service:name=httpd state=restart









直接写在hosts栏的后方

【主要处理正常流程下,没有关系的资源,给他们创建练习来工作】

tags:加个标签,结合-t

ansible-playbook -t TAGS_NAME1,TAGS_NAME2,.... file

只执行有标签的任务,当然,前提是先在指定的任务下边加上
tags:tags_name

然后就可以用了,可以给多个任务打标签,同一个任务也可以有多个标签,两个任务的标签可以一样,-t后边也可有多个标签,用逗号或空白隔开就好


variables:变量 只能以字母开头,使用{{ value }}调用变量 注意空格

1.facts:setup模块提供,可直接调用
2.使用ansible-playbook的命名传递 -e
...-e “var=value”,想awk -v一样,可以定义多个变量,使用多个-e就好

3.通过roles传递变量

4.Host Inventiry
想不通的主机传递不同的变量,可以加上端口号
IP地址1/HOSTNAME1[:port] var=value
IP地址2/HOSTNAME2[:port] var2=value2

向组中主机传递相同变量
在hosts文件中的组后边加上
[组名:vars]
var=value

例如[websrvs:vars]
http_port:8080



5.计算

变量可以进行计算,包括下边的template的时候也做过

直接在花括号中写入变量参与的表达式

例如{{ ansible_processor_vapus-1 }}
Inventiry参数:
定义ansible远程连接目标主机时使用的参数,而不是传递给playbook的变量

要注意区分

ansible_ssh_host
  port
  user
  pass:密码
ansible_sudo_pass:密码


templates:模板
文本文件,内部嵌套脚本,使用模板编程语言编写的脚本
python:嵌入式模板编程语言jinja2

字面量:常见的就是字符串 用"" ''引用;
数字:整数,浮点数;
列表:[item1,item2...]可变;
元组: (item1,item2..)不可变;
字典:{"key1":value1,"key2":value2....};
算术运算:+ ,- ,* ,/ ,//(不要余数只留商), %,**;
比较操作:==,!=,>,>=,<,<=;
逻辑运算:and,or,not
迭代,条件判断


template模块:基于模板方式生成一个文件复制到远程主机
ansible  HOST-PATTERN  -m template  -a  MOD_ARGS
src=:要指明本地的jinja2的模板文件路径.j2结尾
dest=:远程主机上用于运用的路径,通常是绝对路径
owner
group
mode

上边是命令行的template模块使用方法,下面是写入到配置文件.yml中的方法


就是在tasks下边记上
template:src=xxx.jinja2 dest=xxxx
用法和以前的没什么不同,还可以用tags和notify(handler)

写好用ansible-playbook file.yml就好了



playbook的条件测试:

when语句:在task中使用,jinja2的语法格式

when:ansible_distrubtion == "7"

- name: install conf file to centos7
  template: src=files/nginx.conf.c7.j2
    when: ansible_distribution_major_version == "7"
- name: install conf file to centos6
  template: src=files/nginx.conf.c6.j2
  when: ansible_distribution_major_version == "6"




循环:迭代,需要重复执行的任务;

对迭代项的引用,固定变量名为“item”,要在task中使用with_items给定要迭代的元素列表;

列表方法:
字符串
字典

-name:install some package
yum:name={{ item }} state=present
with_items:
-nginx
-memcached
-php-fpm


-name:groups
group:{{ item }} state=present
with_items
- group11
- group12
- group13
-name:add some user
user:name={{ item }} group={{ item }}
with_items
-{ name:"user11",group:"group11"}

-{ name:"user11",group:"group11"}

-{ name:"user11",group:"group11"}



角色(roles)
角色就像一个目录,有个roles的总目录,地下是好多的角色名命名的子目录


/etc/ansible/roles/ 具体位置可以定义.cfg

每个角色以特定的曾级目录结构进行组织
例如 mysql/

files/      存放copy或script模块调用的文件
templates/   存放template模块查找模板的文件
tasks/      必须有的目录,至少包含一个main.yml的文件;其余的.yml都是要借用main.yml加载,要在main.yml中以include包含
handlers/   至少包含一个main.yml的文件,规则同上,handler
vars/      var中也至少有一个main.yml文件,规则同上,存放变量
meta/  至少一个main.yml,规则同上,定义当前角色的特殊设定及依赖关系
default/ 设定默认变量时使用此目录中的main.yml
角色只能用自己目录下的子目录或文件,所以,子目录要有这些模块要用到的文件或子目录


在playbook调用角色

-hosts:websvrs
remote_user:root
roles:
-mysql
-memcached
-nginx

启动起来后,ansible会自动的跑到这几个角色的目录下,将他目录下的子目录中的所有代码跑一边


创建角色:
1.在roles中创建角色同名目录
mkdir -pv nginx
  创建子目录
  mkdir -pv nginx/{...}

2.将需要的文件放进去(main.yml)

编辑main.yml

一些任务,但是任务中要用到同目录下的文件时候,直接写文件名就好,不用写路径,会自己去找的,实例参见配图templates项,好比我现在是在task下编辑main.yml,我想调用files下的文件,并不需要写什么局对路径相对路径,直接写文件名字,他会自己去找

对于一个角色,最重要的是任务,所以先编辑tasks,格式很多都可以省略,比如hosts,这个是让人调用的角色所以不能指定hosts,比如tasks,这个是可以省略的,因为本身就是在task目录下了


但是,要区分主要运行的剧本和这里的main.yml也好自己定义的其他名字的yml也好,都是不同的,playbook要运行的剧本老老实实的写hosts和tasks等




handler也是,在handlers的目录下写main.yml,在要运行的yml中只写notify就好了


在playbook中使用变量,在运行的yml中,remote_user的下边加上

var:value

就可以直接调用了,多个可以使用列表,但是,每次要修改变量还要去到配置文件中去修改配置文件,不过,ansible可以再命令行设置变量,并且优先级还要高于配置文件中的变量

ansible-playbook -e var=value2  file.yml

实际上的var的值是value2


在角色中更贱简单,在ansible的rules下的相关角色的vars目录下编辑main.yml,然后直接在运行的里边使用就好,只要是字典格式就好,不要加-

或者是在角色调用的时候来实现传递变量

Roles:
-{ role:nginx,username:mymy }

把角色那一栏做成字典,第一蓝是角色,后边是变量

还可以在角色调用还可以做条件判断

Roles:
-{ role:nginx,when:xxxxxx == "7" }
只有满足什么条件的时候才会调用角色




实战作业:1.两台主机nginx+keepalived   主从模式,主主更好,制作好ansible角色

2.后端两台主机跑php,lap,

3.再有一台主机跑mysql

注意:写角色要判断操作系统,nginx,mysql的安装包都不同,还有apache也不是很一样

部署一个论坛程序更好

顺便博客作业,把ansible内容写上





ansible如何基于sudo使用,建议把使用sudo的组加到wheel组中


www.ansible.com.cn



cobbler服务依赖于pxe

pxe依赖于dhcp,ftp等服务







DHCP服务:动态主机配置协议

IP/MASK:mask与自己和对方的ip做与运算,计算是不是同一网段

gateway

DNS:第一台是最重要的,第一台不可用(而非解析不了)才用第二台

wins server, ntp server



参数的配置方式:
静态方式指定

动态配置分配:
bootp:boot protocol无盘工作站
无盘工作站:后端有服务器,上边有多个独立空间给子机存储文件,还有一个单独的空间存放模板,基于tcp/ip协议通信,但是往往刚装的时候没有系统怎么配置IP地址呢
有一个基于网卡级别的服务来自动配置,类似于只能网卡,在局域网中广播,让服务来给自己配置IP地址,然后在对文件服务器通信

boot协议:一旦分配出去,就不会在收回,除非重新配置

但是现在的都是有盘计算机,不需要再去服务器读系统,所以直接去拿地址就好


dhcp:有一个地址池,里边有一段连续的IP地址,有自己独立的DNS和网关,计算机关机后自动回收
引入租约(使用时间)的bootp,也可以为实现为特定主机保留某固定的IP地址(MAC地址来识别,从而实现保留固定地址)

rarp:反向arp,将MAC地址解析为ip地址
arp:ip地址解析协议,将ip解析为MAC地址



监听端口:服务端udp67   客户端udp68
客户端监听是因为二者之间是要进行通信的

实现程序:dhcp(重量级)
   dnsmasq(同时提供dns请求转发和dhcp功能)


工作流程    客户端广播发现服务器端(discover阶段)
服务器端offer,提供一个地址(offer阶段)
多个服务器提供offer的时候,用最先到达的那个,应为最先证明他的性能好


客户端收到后,请求使用此地址(request阶段)
发送了request,也就告诉了所有的服务器端我选择了那个,其他的服务器就可以把IP地址返回地址池,而选定的服务器就要把IP地址从地址池删除

服务器端同意(ack阶段)

可以使用,结束通信



报文:广播,广播是不能跨越网关的,只能在局域网中进行,但是可以中继,配置一个路由器做dhcp服务器的中继器

使用路由器监听在udp67端口,路由器将广播中继成到dhcp服务器的单播,然后收到的单播传递到另一个局域网广播

但是想要管理别人的局域网,要想将自己的局域网管理好了







续租:提前续租,续租成功的时候,再延长一个租期,但是如果续租的时候联系不上服务器,可以缓一段时间再去找服务器续租,如果总是联系不上,就准备重新discover计算

50%:第一次续租 75% 87.5%



额外功能:可以区分系统(Windows,非Windows)配置不同的地址池,可以区分是不是虚拟机等



如何配置使用dhcp服务
dhcp:只提供dhcp服务
dnsmasq:还能提供dns服务

dhcp:
dhcpd:服务器
dhcrelay:dhcp中继器

融合在一起,所以服务叫dhcp,但是中继和正常的dhcpd不能一起进行,因为都是监听在67端口的



dhcpd:因为他是要给别人分配地址的,所以自己也要有地址,而且要是静态分配的地址,不能发生变化


配置文件:/etc/dhcp/dhcpd.conf
空的,要cp dhcpd.conf.example到这里覆盖

dhcpd.service dhcpd6.service dhcrelay

dhcpd.leases:租约,每个地址的租约都放在里边,分配出去的地址的信息也都在里边



配置:
参数类配置:配置客户端的
指令类配置:配置自己的工作配置



option domain-name "example.org";
搜索域

option domain-name-servers dns server1, dns server2;dns server3;
dns服务器

default-lease-time 600;
默认租约时长  单位:秒
max-lease-time 7200;
最长租约时长

[时间长好还是时间短好呢,长好,关机就释放,所以长了没关系,但是短了每个一段时间就要广播,增加了服务器压力]

log-facility local7;
日志记录[要去rsyslog配置local7]

subnet 172.16.0.0 netmask 255.255.255.0 {
range 172.16.100.1 172.16.100.99;
分配的地址池
  option routers 172.16.0.1;
  配置网关的,后边指明真正的gw
  filename:指明引导文件名称
next-server:指明引导文件的服务器地址
}
管理的子网地址;不管配置几个地址,首先都要先有一个自己网络的

filename:表示只对网段中的主机查找引导,而且只在刚分配完后的短时间内生效,其他时间不生效

[options有范围限制的,范围越小会越有限生效]


host HOST_ID {
hardware Ethernet MAC地址;
fixed-address IP;
option....
}
固定IP地址,这个ip不能出现在上边的地址池,另外HOS_ID只是个标示,不一定与主机名一致,但是要能标示


其他配置
filename:指明引导文件名称
next-server:指明引导文件的服务器地址

例子:filename "pxelinux 0";
next-server 172.16.0.1;

但是这个是对网卡有特殊要求的,要求网卡有tftp协议,简单文件传输服务


怎么指明使用哪个dhcp服务

先关掉vm的dhcp服务,停止dhcp服务的虚拟机桥接,改成仅主机

再来一台仅主机的虚拟机 dhclient -d 追踪分配地址

再次启动的时候,先默认发送一个续租请求(使用了固定地址后,固定地址优先级比请求高,会使用固定地址)








pxe:提供操作系统的技术,网络引导技术,自动化的方式完成操作系统的安装   intel牵头研发的技术,硬件级别(芯片级别)
必须网卡内置了pxe支持才行,在今天网卡都默认支持,而且虚拟机也支持pxe引导了

我们通常那他进行操作系统安装


CentOS系如何配置实现pxe:
硬件支持
dhcp server:配置ip 掩码 dns gw等;filename,next-server
tftp server:加载bootloader和kernel,initrd
yum repository:ftp,http,nfs提供安装树
kickstart:完成自动化安装



tftp server :类似于ftp但是监听在udp69端口

c/s:tftp-server
tftp

/usr/sbin/in.tftpd
启动的服务文件:瞬时守护进程
/usr/lib/systemd/system/tftp.socket
非守护进程
/usr/lib/systemd/system/tftp.service
根目录
/var/lib/tftpboot
配置文件
/etc/xinetd.d/tftp

centos6:
chkconfig tftp on
service xinetd restart

centos7:
systemctl enable tftp
systemctl start tftp



dhcp server:配置range filename next-server

安装httpd vsftpd syslinux(提供各种引导文件)

测试环境192.168.12.0/24
服务器192.168.12.1/24

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot

挂载光盘 挂载到/var/www/html/centos7

cp vmlinuz initrd.img /var/lib/tftpboot

cp /usr/share/syslinux/{mboot.c32,menu.c32,memdisk,chain.c32} /var/lib/tftpboot

在/var/lib/tftpboot中创建目录

mkdir pxelinux.cfg目录

创建default文件

default menu.c32  那个生成菜单的
prompt # 菜单显示时间
timeout # 超时时间
MENU TITLE xxx 菜单名字
LABEL linux 短格式显示菜单
MENU LABEL install Centos7
KERNEL vmlinux 在哪个加载内核
APPEND initrd(参数名)=initrd.img文件名 install.repo=ftp://192.168.12.1/pub/centos/$re...仓库名
LABEL linux_autoinstall
MENU LABEL install c7 auto
KERNEL vmlinux
APPEND initrd=initrd.img install.repo=ftp://192.168.12.1/pub/centos[/$re...](仓库名) ks=ftp://192.168.12.1/pub/kickstart.cfg[注意文件的权限问题,ks权限没有r的话无读取]

记得先把ks文件放到/var/www/html下,要用http访问

另一个主机设置成从网路引导

dos--boot-network的第一项


boot:linux  调用第一项
这么调用可以再后边添加一些选项,比如加上ks=....就和第二项一样了


[本地就有一个ks文件 anaconda-ks.cfg,手动安装时生成的]
[ks文件语法检查工具ksvalidator]



centos6:前边一样,后边的菜单方式不太一样,可以使用centos6自带的图形工具生成


挂载光盘 挂载到/var/www/html/centos6

复制vmlinuz,initrd.img

复制isolinux下的boot.msg vesamenu.c32 splash.jpg

mkdir -pv /var/lib/tftpboot/pexlinux.cfg/
cp -v isolinux/isolinux.cfg /var/lib/tftpboot/pexlinux.cfg/default

vesa:使用boot调用,采用图形安装

menu default:默认项,只能有一个

ks之类的还是加载append后边

但是install.repo不用指明,系统会自动加载的

ks要放到/var/www/html下边,而且要给上读权限r








cobbler:配置多系统版本安装环境

cloud or VM:image lanch
VM:
第一台是安装出来,后边可以镜像
云OS:
将影像文件下载到节点上,以此为硬盘来安装
Bare Metal:OS Install
只能是安装,但是可以借助工具自动批量安装


基本上第一次都是安装的,或者是下载网上别人分享的镜像文件


基本上所有工具都是基于pxe,cobbler当然也不例外


cobbler:
PXE
Koan

核心概念:cobbler(核心)
cobbler_web(补充组件,增进用户体验,提升管理效率)

distros:定义发行版
profiles:基于distros,配合ks,安装不同的部署环境(主机只使用一个服务,如mysql专机)
systems:即便是同一个profile,也是有不一样的地方,比如ip等,这些就叫system,但是很少进行精细管理
repos:yum仓库,发行版,epel(但是不能拿来安装)
images:镜像文件
management classes:分区管理
file resources:文件管理

常用的只有 distros profile

需要服务:
TFTP
rsync
DHCP
DNS

子命令:
import
sync


cobbler图解





distribution:
KERNEL
initrd
profile:
distribution
ks file
repository
system:
profile,IP,MAC



安装:yum安装或编译,epel源

配置文件:/etc/cobbler
服务:cobblerd.service
(运行cobbler之前要强依赖httpd,所以先开启httpd,还有tftp,rsync)

帮助
cobbler [command] --help

检测cobbler环境是不是完备
cobbler check

解决check问题

编辑cobbler/settings

1.server 127....改掉
2.next_server 172.16.100.7 本机地址
3.default_passwd_crypted:"密码"

chkconfig tftp on

loader不用管可以,syslinux提供的就够

chkconfig rsync on   监听873tcp端口

debmirror c7不用,c6需要

/var/www/cobbler

命令号格式
cobbler command [subcommand] [--arg1=value1] [--arg2=value2]


command: distro   profile   system  import  sync


distro :centos直接挂载光盘就有,会自动放在/var/www/cobbler的ks_mirror下

使用cobbler import导入 --help

cobbler import 也要指明ks文件,是因为他在创建distros的时候会自动创建profile,不需要就删除


cobbler import --name=centos-6-x86_64 --path=/mnt(挂载关盘目录)

会自动放在/var/www/cobbler的ks_mirror下


cobbler distro list:查看列表
         remove:删除



profile: ks文件放在/var/lib/cobbler/kickstarts/下边

cobbler profile add --name="centos6" --distro=Centos-6-x86_64 --kickstart=/var/lib/cobbler/kickstarts

profile list


然后使用cobbler sync 同步一遍,会自动生成default文件






再做一遍就多一个,可以做个c7的




cobbler_web

/etc/cobbler/auth.conf
/modules.conf
[authentication]
module = authn_pam
[authorization]
module = authz_allowall

/users.conf
admin = "管理员名字"
cobbler = "普通用户名字"
记得passwd命令给个密码

/cobbler_web.conf
require all granted









zabbix:监控系统   **绝对不允许不受监控的系统到生产环境**

硬件:硬件自身带传感器

软件:操作系统本身.系统上某进程

业务指标:例如httpd有几个用户,多少请求等

NMS:网络管理系统

监控数据采集通道:

监控系统处于一个数据抓取的工具上,每隔一段时间从被监控的主机中读取数据



snmp协议:简单网络管理协议
ssl/telnet:但是有权限问题,必要的时候还要管理员

ipmi接口:Intel智慧平台管理接口


agent:监控系统在被监控主机安装一个程序,两者可以通过某种协议通信,被监控主机用管理员身份运行该程序就好,需要访问用户控制**
master/agent




sensor:传感器,观察数据指标
工作方式:

1.只对当下数据进行采集,一旦异常立马警报
2.对过去的数据进行观察,检查异常的范围波动频率时间等(要求数据存储)

监控系统基本功能:NMS实现,其采集通道见上,工具见下

1.数据的采样:按固定的周期频率,为了观察;历史数据,还要保存下来,历史数据经过一段时间后可丢弃,只保留趋势数据就好

趋势数据:每一段时间(一天)最大值最小值平均值之类的

2.数据的存储


3.告警(报警):在某一数据一致不正常就像用户报警,邮件短信甚至人工合成声音的电话


脚本:触发脚本自动完成一些功能,是在不行再报警
操作:配合云环境,虚拟化,发现某一虚拟机挂了,kill掉在重建一个配置好加入到环境中

媒介:邮件.短信,微信

4.展示:visual,可视化,随时可以用形象的方式经结果展示给用户



常见开源监控工具:
cacti naglos zabbix ganglia

cacti:本质上不是监控工具,本身不具备监控功能,基于协议构成,能够存储数据并将其数据通过mysql前台展示出来,但是报警功能差

通常和naglos结合使用

zabbix:既能监控又能报警,取代了上两者集合,使用的是mysql的数据系统

ganglia:对多台主机的数据聚合展示,今天有人集合g,z使用,尤其是超级计算机进行计算的


数据存储:
对数据库的写压力太大,千台主机监控指标就到十万指标,cpu的使用率,网卡的,还有多网卡,内存的,是非常大的数据




历史数据:NVPS
趋势数据:


存储系统:
关系型数据库:mysql,性能都不是很好,不是保证事务就不要用

rrd:环装数据库,满了就在覆盖存储一圈,类似一致性哈希算法,在节店上存储,空间,存储槽都是早就创建好了的

*NoSQL:不支持事务,没有复杂的关系.工作空间是内存,因此性能非常好,每隔一段时间同步到硬盘
时间序列存储



SNMP:简单网络管理协议(古老的协议,没涉及复杂的安全功能,所以有别的就不要使用它,能不用就不用)

有agent的,nms/agent组成

每一个通过他监控的各种各样的设备都內建他的agent

snmpd服务

nms:cli,命令行工具  gui,图形工具
agent:service,监控在某个端口,接受请求采集数据返回响应给请求者,说起来想server端..

为避免agent端信息泄露要进行认证
v1版snmpd没有任何安全
v2c(community社区) 类似社区,有令牌通过就可以响应,public社区可以公开出去的社区

v3使用了很强的加密功能,但是网上很少有支持的




操作:
获取操作:get,getnext,bulk(一次获取多个)
管理操作:

陷阱机制,被监控端主动向监控端发送数据,类似dns的通知

MIB,OID


ZABBIX:开源监控系统 2.0稳定成熟的版本

LTS:建议选择的版本,如2.2 3.0 长期支持维护的版本



特性:
数据采集
snmp,ssh/telnet,agent,ipmi,jmx(java management extensions)
自定义采样操作:userprameter
告警
告警升级:执行脚本,在告警(notification)
展示(zabbix_web)
实时绘图:需要看图时候,在数据库中取数据,动态绘制出来
单个graph图片
多个graph组成screen
slide show:多个屏显示,每个多少秒换个屏

map:各设备之间创建一个拓扑图,某设备故障,在拓扑图中将那台机那条线不同色标出来
存储
mysql/pgsql

支持模板:实现快速监控主机添加

网络自动发现:扫描一个网段,将内部的主机自动套上模板添加进来

分布式监控:减少监控,各设备读写压力,有代理主机替你采集指标(每个代理主机采集一部分指标),client只要拿过来就好了

server-----proxy-----agent/ssh/ipmi


丰富的API接口



程序组件:  zabbix_web GUI php研发
   zabbix_database
   zabbix_server  c语言  web page
    icmp/impi/snmp devices
    agent:zabbix_agentd
    JMX
zabbix_proxy      web page
   icmp/impi/snmp devices
   agent



zabbix_server

   agentd

   proxy:代理,可选,不做分布式的时候不需要

   get:命令行工具,手动测试向agent发起数据采集请求

   sender:运行与agent端,手动向server端发送数据

   java_gateway:java网关JMX JVM

   database:和zabbix自身没关系,是mysql被用来做数据存储

   web:基于web接口展示的gui,对zabbix所有操作几乎都是通过gui来进行,所以他也是个管理接口


zabbix逻辑组件:内部完成一次完整的监控操作用到的组件

主机组
主机
监控项:item;
key,事先定义好的能够采集数据的命令或脚本的名称,key后边加一个参数,参数将会传递给命令,通过修改参数,可以达成一个key监控多个项

应用:application,同一类监控项item的集合
触发器:trigger,一个逻辑表达式(或调用了函数的表达式),监控item接受的数据key对应的数据是不是在合理范围内,即阈值,大与阈值时候,从ok转到problem,会在范围内转回ok
一般都是在范围内problem,不在为ok
事件:event,发生一个值得关注的事情,如ok转换,发现一个新主机,可以针对事件来做相关操作,一旦事件发生了就会发生后续一系列操作
会牵连到告警操作
动作:action 对于特定事件事先定义的处理,包含操作(operations)和条件(condition)
条件不同,操作不同
常见:通知,告警

报警升级:escalation,

报警:
媒介:media,发送通知的手段或通道,email,messages等

通知:notification,告警内容
升级:
层层上诉,县长不行市长,市长不行省长
可以定义多个操作,先执行什么远程命令,还不行就升级报告

远程命令:remote command,预定义的命令.在主机处于特定条件下自动执行

模板:template,快速定义被监控主机的各监控项的预设项目集合
通常包含item,trigger,graph,screen

图形:graph,监控项中采集到的历史数据,用图像的方式展示出来就叫graph
支持现状图面积图饼图爆炸图

屏幕:screen,多个graph集合组成


逻辑组件逻辑关系图

maintenance:维护,定义维护期,维护期内遇到任何异常都不要报警

zabbix poller:数据的采集器.轮训工具,采集一次又一次

internal监控:针对于自身,采集了几次数据之类的
























服务端进程
poller:轮训数据
watchdog:监控进程是不是正常,不正常重启
housekeeper:内务管家,管理数据库中的数据,比如清理数据库
alerter:报警工具
escalator:报警升级
httppoller
discover:发现主机,上线下线等
nodewatcher:监控节点
timer:计时器
db_config_syncer
db_data_syncer:完成配置同步和数据同步
pinger:探测主机的

监控级别(最低限度)图

monitored host:被监控主机数

zabbix注意:对于不是关键性指标,监控间隔就可以长一点,重要的就要设置短一点




监控数据库支持  图




监控需要的扩展   图



server端需要扩展  图

jabber那个用不到



zabbix组件:server,agent,database可以分开设置



实际部署:同一台主机上进行,不同主机自己去试


sever,agent,web*,proxy*,get,sender

trousers-0.3.13

mget *3.0.3*

1.mariadb-server安装---配置文件---innodb_file_per_table=ON skip_name_reslove=ON----启动服务

2.创建数据库----授权用户


3.安装服务端 zabbix-server-mysql/get/


4.安装zabbix-web
安装php,httpd,php-mysql,php-gd,php-ldap,php-xml,pgp-mbstring,php-bcmath

5.安装agent
安装zabbix-sender

6.服务端数据库初始化
2.x:三个sql脚本
按官方文档的固定数据导入三个脚本

3.x:一个sql脚本  
create.sql(server-mysql提供)

mysql -u   -h  database_name  < create.sql

7.启动
配置文件:/etc/zabbix/zabbix_server.conf
先备份

配置段:
general parameters:通用参数

listenport:监听端口,默认10051
sourceIP:限定采集数据向外通告自己的ip是什么,不然基于ip的访问控制会拒绝
logtype:=日志类型
logfile=/path/to/file
logsize:设置日志滚动大小,0不滚动
debuglevel:日志级别0-5,默认3,自己测试定义5

DBhost:数据库地址     *
dbname:数据库名称     *
dbuser:               *
dbpasswd:             *
dbsocket:mysql.sock
dbport:与上边的socket有一个就好;mysql 3306





advanced ...:高级参数

高级参数就是定义服务端的那几个进程的参数




loadable:模块
tls....:安全
[mandatory:是不是强制配置]


8.配置web gui
先编辑php的时区 /etc/php.ini date.timezone(所有php程序都遵循)
到/etc/httpd/conf.d下的zabbix.conf里边的data.timezone   Asia/shanghai
然后重启httpd

172.16.7.5/zabbix


安装生成的配置文件/etc/zabbix/web/zabbix.conf

monitoring:监控 *
inventor:
reports:报告
configuration:配置 *
administrator:管理 *

*:将来基本上就对这几个做操作

9.agent端配置
/etc/zabbix/zabbix_agentd.conf
zabbix-agent
备份

general parameters
passive checks relate 被动监控

server:=ip1,ip2(代理服务器)..
允许那些主机过来采集数据
listenport:端口,默认10050

listenip:0.0.0.0监听的地址,所有

startagents:=





下午第一节可




active checks relate 主动向server报告
serveractive:=ip1[:port],iP2...

hostname:=zabbix server
主机名,与服务器端配置添加的主机名完全保持一致,区分大小写

hostmatedata:定义知己元数据,在自动进程上使用
hostmetadataitem:定义那些采集项

refreshactivecheck:刷新频率,默认120秒

buffersend
buffersize:发送缓冲大小


advanced ...
user-defined monitored... 用户自定义参数
loadable 模块
tls.... 安全
[mandatory:是不是强制配置]



10.监控配置
host groups --> host-->application--->item--->trigger--->event(不用配置)---->action(condition,operation)--->通知

graph:
simple:自动生成的
customed:将多个item的图形数据整合在一个图形数据进行展示


11.items

key:
內建
type:
agent:
agent(active)
snmp v1
用户自定义

12.采集到的数据
数值:
整数
浮点数
字符串
字符串
文本
13.存储的值:
as is:不对数据做任何处理
速率:变化速度
简单变化:变化量,这次值减上次值,除时间(秒)可以求出速率

ntpdate 172.16.0.1
14.trigger
逻辑表达式,阈值;通常定义数据的不合理区间
OK:正常状态,较老的版本中叫FALSE
PROBLEM:非正常状态,较老的版本叫TRUE

OK-->PROBLEM:出问题了
PROBLEM-->OK:recovery恢复

通常是拿最近5次的平均值,最大值,最小值与阈值比较
或是最后一个值与阈值比较

可调用函数:
nodata()没数据
last()最后一次
参数
function(#300)记上#是最近多少次
不加#是最近多长时间
事件的严重级别 图
not classified
information
warning
average
high
disaster

表达式
{hostname:key[parameters].function(arguments)}
<>=#(not equal)
+-*/
&|
trigger之间是可有依赖关系的
被依赖的出现问题,依赖的就不用报告了
一个item上可以定义多个trigger

media媒介
告警信息的传递通道
类型
email:邮件
script:自定义脚本
sms
jabber
ez texting


接受信息的目标为zabbix用户:
需要用户上定义对应各种媒介通道的接受方式
发送内容由zabbix自动生成


action:
action  图
conditions 图
A:不在正常的维护区间
B:转换到problem
多个条件之间具有逻辑关系
operations 图
条件满足时触发的操作

remote_command:命令
notification:通知

点new定义  图

3600s 表示每3600秒定义一步,启动什么服务
step 从第几步到第几步
1-1  2-5  第1步做什么;等级上升;第2-5步做什么;等级上升

send message
media type:传递信息的通道
email
script报警脚本
脚本位置:zabbix_server.conf文件中alertscriptspath定义的路径下
/usr/lib/zabbix/alertscript
zabbix服务器在调用脚本时,会传递三个参数
$1:经由此信道接受信息的目标{ALERT.SENDTO}
$2:主题subject{ALERT.SUBJECT}
$3:body,邮件正文{ALERT.MESSAGE}
信息接收人
user groups:组内的人都能收到
user
remote_command
功能:
在agent所在主机上执行用户指定命令或者脚本
重启
通过ipmi重启服务器
完成任何用户自定义脚本中定义的操作

可执行命令类型
ipmi
ssh
telnet
custom script
global script
前提要求:
1.zabbix用户要有所需要的执行权限
2.允许agent进程执行远程命令,默认是关闭的
enableremotecommands=1
3.sudo注释掉 default requiretty用户不需要控制终端
或default zabbix !requiretty



host groups --> host-->application--->item(key)--->trigger--->event(不用配置)---->action(condition,operation)--->通知

media type
user/user group


action operations:可定义为升级方式
send message
remote_command













如何使用宏,自定义图形,自定义参数,如何使用自定义key,分布式监控




展示接口:
graph:simple自带 custom自定义
screen:整合多个graph
slide show:多个screen以幻灯的方式展示



模板:一系列配置的集合
items
trigger
graph
application
screen等

创建完成后,让主机连接到模板,类似软连接那样子.并且当模板更改的时候,连接改模板的主机也会做出相应的修改

创建模板-----添加模板的各种选项----添加新主机---在添加新主机的时候点template天机模板


注意:
模板可继承,可以再模板的情况上继续添加监控项等



宏:(macros)类似于变量,预设的文本替换模式,文本类型的替换机制,跟变量还是不完全相同的,只是字符串变化,没有变量的浮点数啊之类的

生效级别:
全局:administrator---右侧上方gui哪里下拉箭头找macros

模板:编辑模板---macros
主机:编辑主机---macros

生效顺序:应用范围小的优先级高

类型:
內建宏:{macro_name}
自定义宏:{$macro_name}多个$符

自定义命名要求:大写字母,数字,下划线





网络发现:network discovery     上午第二节课















根据用户实现定义的规则,来扫描一个网段,或者是ping或者是某个服务(80端口有没有被监控?监控了就添加主机到监控中)从而添加主机,并且还能自动套上模板,并且某主机不在线还能自动移除主机

时间间隔很长

功能:加快部署,减轻管理工作,经常发生变化的工作环境中不用手动管理

基于以下信息
ip ranges
service(ftp,http等)
zabbix agent
SNMP

阶段:
discovery
disconvery:发现事件
lost:丢失事件

actions

configuration---discovery

注意:low level(也是发现,但是能区分Windows和linux,并且连接像对应的模板,是一种低级别的发现,一般是调用脚本完成)
低级别是指对操作系统比较近

ip range :扫描的网段 xxxxx-xxxxx
check:检查的项
delay:每多长时间检测一次

configuration----action--右上方改成discovery




自定义key:
item type:和key本身的可用是有关系的,不同类型适用的接口有可能不同,一些key只能用在制定的接口之上
agent
agent(active)
simple
snmpv1
snmpv3
ssh
...


接口类型:agent snmp impi
自定义key值得是在zabbix agent端的配置文件上游用户通过userparameter指令定义的key

UserParameter=<key>,<command>


=mysql.ping,mysql -umkmk -pmy123 -h127.0.0.1

注意:
重启agent生效
注意一定不能重名,并且只能通过agent接口运行

是调用/bin/sh(centos中默认bash)运行

监控自定义key的时候,一定要确保被监控的主机上游这个自定义key


UserParameter=<key
  • >,<command>
    可以接受参数,参数会传递给后边的命令当参数
    *:任意数量参数,$1,$2......$0是命令本身

    UserParameter=memory.usage
  • ,awk '^/$1/{print $$2}' /proc/meminfo

    $1,前边传递的参数 $$2是awk自身的变量



    zabbix_get -s 172.16.7.5 -k memory.usage[MemFree]


    web监控

    首先定义web方案(scenarios)
    一个或多个httpd请求或步骤(step)
    步骤的执行过程将按照预先定义俄顺序进行执行

    通过web监控获得信息
    整个web方案中所有步骤的平均下载速度
    失败的步骤号
    失败的报错信息

    在方案的具体步骤中,可以按需使用以下信息
    该步骤的下载速度
    回应时间
    回应状态码

    zabbix可以检测获取到的html页面是不是包含预设的字符串,还可以实现登录和页面点击

    application---web方案
    configuration---host----web



    创建完会自动生成一些items,可以直接拿来用








    主动监测:

    agent需要的基本配置:
    serveractive=
    hostname=:要与server端添加的而主机名完全一致


    主动被动和主机没有关系.和items有关,要选zabbix agent(active)


    在监控项非常多的时候会减轻服务器的压力


    zabbix proxy :主要是用在分布式监控的

    server---proxy---agent

    使用proxy,用web gui添加就好

    /etc/zabbix/zabbix_proxy.conf

    heartbeat frequency每隔多长时间健康监测一次
    config
    datasender

    agent端把server和serveractive改成proxy的IP地址,然后重启zabbix-agent


    proxy mode
    active主动:自己制动去获取
    passive被动:等待发送过来


    proxy的主机名记得在hosts中表明解析




    Zbbix proxy的配置过程:
    1、配置proxy主机,启动服务;
    (1) 安装程序包
    # yum install zabbix-proxy-mysql zabbix-agent  zabbix-sender  zabbix-get
    (2) 准备数据库
    创建、授权、导入方案
    (3) 修改配置zabbix_proxy.conf
    Server=
    Hostname=,与GUI端添加时候的名字要一直并且保证能解析改名称
    DBHost=
    DBName=
    DBUser=
    DBPassword=
    ServerActive=
    heartbeatfrequency每隔多长时间健康监测一次
    config  拉取的时间间隔
    datasender 发送的时间间隔
    2、在server端的GUI上添加此代理服务器;
    Administration --> proxies

    注意名字要和上边的配置文件中的hostname一致,并且是必须添加主机名
    3、在server端的GUI上添加通过porxy进行监控的主机;
    注意:通过proxy监控的各agent要授权proxy主机有监控权限;
    zabbix performance tuning:性能调优
    nvps:new values per second
    最基本的性能指标
    100w/m, 15000/s
    官方给的最多能承载数据,实际肯定没这么多
    调优:
    Database:历史数据不要保存太长时间;尽量让数据集可缓存到数据库服务器内在中;
    触发器表达式:减少使用min(), max(),avg(),尽量使用last(), nodate();
    数据收集:polling较慢(减少使用SNMP/agent-
    less/agent);尽量使用trapping(agent(active));
    数据类型:文本型数据处理较慢,尽量少收集类型为text或string的数据,多使用类型为Numeric的数据;
    zabbix服务的配置:
    (1)zabbix internal类型的监控来获知zabbix自己的状态;
    (2)服务器组件数量:
    alerter, discoverer, escalator, http poller, housekeeper, icmp pinger, ipmi poller, poller, trapper
    configuration syncer, db watchdog
    StartPollers=100
    StartPingers=10
    StartPollersUnreachable=50
    StartIPMIPollers=10
    StartTrappers=20
    StartDBSyncers=8
    数据库优化:
    分表;
    history_*, trends*, events*
    博客作业:
    zabbix-server, zabbix-proxy, zabbix-agent应用;



  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-259053-1-1.html 上篇帖子: Zabbix agent挂掉后Zabbix Web监控依然能够收到数据 下篇帖子: zabbix nodata 问题解决
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表