• centos7.6下编译安装zabbix4.0.10长期支持版


    一、安装数据库,这里使用的是percona-server5.7.24版本
    配置如下
    
    [root@zabbix4_clone:~]# cat /etc/my.cnf
    # Example MySQL config file for medium systems.
    # 8核 16G
    # This is for a system with little memory (16G) where MySQL plays
    [client]
    #password       = your_password
    port                                                        = 3306
    socket                                                      = /tmp/mysql.sock
    
    # The MySQL server
    [mysqld]
    user                                                        = mysql
    port                                                        = 3306
    bind-address                                                = 0.0.0.0
    socket                                                      = /tmp/mysql.sock
    datadir                                                     = /data/mysql_data
    pid-file                                                    = /data/mysql_data/mysql.pid
    basedir                                                     = /usr/local/mysql
    tmpdir                                                      = /tmp
    
    #此开关默认为NULL,即不允许导入导出。
    #secure-file-priv                                           = /opt/upload
    
    #-------------------------------gobal variables------------------------#
    #默认关闭,涉及到timestamp类型的列自动更新的问题
    explicit_defaults_for_timestamp                 = 1
    ###transaction_write_set_extraction              = XXHASH64  #以便在server收集写集合的同时将其记录到二进制日志。并且是行更改后的唯一标识此标识将用于检测冲突。
    ###loose-group_replication_group_name            = 'ce9be252-2b71-11e6-b8f4-00212889f856' #组的名字可以随便起,但不能用主机的GTID
    ###loose-group_replication_start_on_boot         = off  #为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。
    ###loose-group_replication_bootstrap_group       = off #同上
    ###loose-group_replication_local_address         = '192.168.1.88:33071' #写自己主机所在IP
    ###loose-group_replication_group_seeds           ='192.168.1.88:33071,192.168.1.89:33071,192.168.1.90:33071'
    ###loose-group_replication_single_primary_mode   = off  #关闭单主模式的参数
    ###loose-group_replication_enforce_update_everywhere_checks = on #开启多主模式的参数
    
    skip-external-locking
    skip-name-resolve
    skip-ssl
    
    #memory is 16G
    key_buffer_size                                             = 32M
    table_open_cache                                            = 2048
    table_definition_cache                                      = 1024
    sort_buffer_size                                            = 4M
    net_buffer_length                                           = 32K
    read_buffer_size                                            = 4M
    read_rnd_buffer_size                                        = 16M
    
    open_files_limit                                            = 10000
    thread_cache_size                                           = 400
    query_cache_type                                            = 0
    query_cache_size                                            = 32M
    max_write_lock_count                                        = 300
    wait_timeout                                                = 120
    interactive_timeout                                         = 120
    net_read_timeout                                            = 120
    net_write_timeout                                           = 120
    
    max_connections                                             = 800
    max_user_connections                                        = 750
    max_connect_errors                                          = 10000
    max_allowed_packet                                          = 256M
    back_log                                                    = 2048
    log_timestamps                                              = system
    performance_schema                                          = OFF
    character_set_server                                        = utf8mb4
    
    ##当链接数耗尽后,通过设置别用端口,让root可以登录
    extra_max_connections                                       = 2
    extra_port                                                  = 13306
    
    ###让mysql不区分大小写敏感
    lower_case_table_names                                      = 1
    
    #explicit_defaults_for_timestamp                            = 1
    
    #----------------Myisam--------------------------------#
    myisam_recover_options                                      = DEFAULT
    bulk_insert_buffer_size                                     = 32M
    myisam_sort_buffer_size                                     = 64M
    myisam_max_sort_file_size                                   = 256M
    myisam_repair_threads                                       = 1
    
    #if the query is exec time great than 2 seconds, the query will log to slow log if slowlog is enabled.
    long_query_time                                             = 1
    slow_query_log                                              = On
    slow-query-log-file                                         = /data/mysql_data/slow.log
    show_compatibility_56                                       = on
    
    # Don't listen on a TCP/IP port at all. This can be a security enhancement,
    # if all processes that need to connect to mysqld run on the same host.
    # All interaction with mysqld must be made via Unix sockets or named pipes.
    # Note that using this option without enabling named pipes on Windows
    # (via the "enable-named-pipe" option) will render mysqld useless!
    # 
    #skip-networking
    
    #----------------------------MySQL Log----------------#
    # Replication Master Server (default)
    # binary logging is required for replication
    log-bin                                                     = mysql-bin
    expire_logs_days                                            = 20
    log_error                                                   = error.log
    log_error_verbosity                                         = 1
    log_warnings                                                = 1
    
    # binary logging format - mixed recommended
    binlog_format                                               = row
    relay-log                                                   = mysql-relay-bin
    relay-log-index                                             = relay.index
    # required unique id between 1 and 2^32 - 1
    server-id                                                   = 1
    #sql-mode                                                    = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    #sql-mode                                                    = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    sync_binlog                                                 = 1
    log_slave_updates                                           = 1
    #binlog_checksum                                            = NONE
    
    #------------------------------replicate--------------#
    #排除不需要同步的库表
    #replicate-ignore-db                                        = mysql
    #replicate-ignore-db                                        = sys
    replicate-ignore-db                                         = information_schema
    replicate-ignore-db                                         = performance_schema
    replicate-ignore-db                                         = undolog
    replicate-ignore-db                                         = for_nagios
    replicate-ignore-db                                         = undolog
    
    #replicate_wild_ignore_table                                = mysql.%
    #replicate_wild_ignore_table                                = sys.%
    replicate_wild_ignore_table                                 = information_schema.%
    replicate_wild_ignore_table                                 = performance_schema.%
    replicate_wild_ignore_table                                 = undolog.%
    replicate_wild_ignore_table                                 = for_nagios.%
    replicate_wild_ignore_table                                 = undolog.%
    
    #主主复制需要开启
    #auto_increment_offset= 2
    #auto_increment_increment= 2
    
    #GTID模式复制,需要开启如下
    gtid_mode                                                  = ON
    enforce_gtid_consistency                                   = ON
    
    #并发复制
    slave-parallel-type                                         = LOGICAL_CLOCK
    slave-parallel-workers                                      = 2
    master_info_repository                                      = TABLE
    relay_log_info_repository                                   = TABLE
    relay_log_recovery                                          = ON
    
    #跳过slave进程启动参数
    skip-slave-start
    
    #如果实例为从库,则需要设置为on
    #read_only                                                   = on
    
    #skip-grant-tables
    
    #--------------------------------------------------------innoDB------------#
    innodb_rollback_on_timeout
    # Uncomment the following if you are using InnoDB tables
    innodb_data_home_dir                                        = /data/mysql_data
    innodb_data_file_path                                       = ibdata1:1G;ibdata2:1G:autoextend
    innodb_log_group_home_dir                                   = /data/mysql_data
    innodb_undo_directory                                       = /data/mysql_data/undolog/
    innodb_undo_logs                                            = 128
    innodb_undo_tablespaces                                     = 3
    
    # You can set .._buffer_pool_size up to 50 - 80 %
    #innodb_use_sys_malloc = 0 
    #innodb_page_size = 8192
    innodb_buffer_pool_size                                     = 2G
    innodb_buffer_pool_instances                                = 1
    #innodb_additional_mem_pool_size = 8M
    
    # Set .._log_file_size to 25 % of buffer pool size
    innodb_log_file_size                                        = 256M
    innodb_log_buffer_size                                      = 64M
    innodb_log_files_in_group                                   = 3
    #每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认
    innodb_flush_log_at_trx_commit                              = 1
    innodb_lock_wait_timeout                                    = 120
    #启用独立表空间
    innodb_file_per_table                                       = 1
    
    #CPU是1颗8核的,那么可以设置
    innodb_read_io_threads                                      = 8
    innodb_write_io_threads                                     = 8
    
    #默认是0,则表示没有并发线程数限制,所有请求都会直接请求线程执行,当并发用户线程数量小于64,建议设置innodb_thread_concurrency=0,在大多数情况下,最佳的值是小于并接近虚拟CPU的个数
    innodb_thread_concurrency                                   = 12
    innodb_max_dirty_pages_pct                                  = 75
    innodb_flush_method                                         = O_DIRECT
    
    innodb_purge_threads                                        = 10
    innodb_large_prefix                                         = 1
    
    #参数待测试
    #innodb_io_capacity                                         = 20000
    #innodb_io_capacity_max                                     = 40000
    
    #根据CPU核心数来设定
    thread_pool_size                                            = 8
    #thread_handling = pool-of-threads
    thread_pool_oversubscribe                                   = 24
    
    #thread_handling                             = pool-of-threads
    thread_pool_stall_limit                                     = 100
    thread_pool_max_threads                                     = 30
    
    #解释: 在启动时把热数据加载到内存。
    innodb_buffer_pool_load_at_startup                          = 1
    #解释: 在关闭时把热数据dump到本地磁盘
    innodb_buffer_pool_dump_at_shutdown                         = 1
    
    ##默认是8M, 如果一次insert数据量比较多的话, 可以适当增加
    innodb_autoextend_increment                                 = 32
    
    [mysqldump]
    quick
    max_allowed_packet                                          = 256M
    
    [mysql]
    no-auto-rehash
    # Remove the next comment character if you are not familiar with SQL
    #safe-updates
    
    [myisamchk]
    #key_buffer_size = 20M
    #sort_buffer_size = 20M
    key_buffer_size                                             = 200M
    sort_buffer_size                                            = 200M
    read_buffer                                                 = 2M
    write_buffer                                                = 2M
    
    [mysqld_safe]
    #控制文件打开数的show global status like 'open%file%';比较合适的设置:Open_files / open_files_limit * 100% <= 75%
    open-files-limit                                            = 65535
    log-error                                                   = /data/mysql_data/error.log
    
    [mysqlhotcopy]
    interactive-timeout
    
    # 初始化语句
    
    /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data
    
    2.启动数据库服务
    # /etc/init.d/mysql start
    
    [root@zabbix4_clone:~]# ss -tuanlp|grep 3306
    tcp    LISTEN     0      2048      *:3306                  *:*                   users:(("mysqld",pid=35200,fd=170))
    tcp    LISTEN     0      2048      *:13306                 *:*                   users:(("mysqld",pid=35200,fd=184))
    
    ####启动脚本
    [root@zabbix4_clone:~]# cat /etc/init.d/mysql
    #!/bin/sh
    # Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
    # This file is public domain and comes with NO WARRANTY of any kind
    
    # MySQL (Percona Server) daemon start/stop script.
    
    # Usually this is put in /etc/init.d (at least on machines SYSV R4 based
    # systems) and linked to /etc/rc3.d/S99mysql and /etc/rc0.d/K01mysql.
    # When this is done the mysql server will be started when the machine is
    # started and shut down when the systems goes down.
    
    # Comments to support chkconfig on RedHat Linux
    # chkconfig: 2345 64 36
    # description: A very fast and reliable SQL database engine.
    
    # Comments to support LSB init script conventions
    ### BEGIN INIT INFO
    # Provides: mysql
    # Required-Start: $local_fs $network $remote_fs
    # Should-Start: ypbind nscd ldap ntpd xntpd
    # Required-Stop: $local_fs $network $remote_fs
    # Default-Start:  2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: start and stop MySQL (Percona Server)
    # Description: Percona-Server is a SQL database engine with focus on high performance.
    ### END INIT INFO
     
    # If you install MySQL on some other places than /usr/local/percona-server-5.7.24, then you
    # have to do one of the following things for this script to work:
    #
    # - Run this script from within the MySQL installation directory
    # - Create a /etc/my.cnf file with the following information:
    #   [mysqld]
    #   basedir=<path-to-mysql-installation-directory>
    # - Add the above to any other configuration file (for example ~/.my.ini)
    #   and copy my_print_defaults to /usr/bin
    # - Add the path to the mysql-installation-directory to the basedir variable
    #   below.
    #
    # If you want to affect other MySQL variables, you should make your changes
    # in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.
    
    # If you change base dir, you must also change datadir. These may get
    # overwritten by settings in the MySQL configuration files.
    
    basedir=
    datadir=
    
    # Default value, in seconds, afterwhich the script should timeout waiting
    # for server start. 
    # Value here is overriden by value in my.cnf. 
    # 0 means don't wait at all
    # Negative numbers mean to wait indefinitely
    service_startup_timeout=900
    
    # Lock directory for RedHat / SuSE.
    lockdir='/var/lock/subsys'
    lock_file_path="$lockdir/mysql"
    
    # The following variables are only set for letting mysql.server find things.
    
    # Set some defaults
    mysqld_pid_file_path=
    if test -z "$basedir"
    then
      basedir=/usr/local/percona-server-5.7.24
      bindir=/usr/local/percona-server-5.7.24/bin
      if test -z "$datadir"
      then
        datadir=/data/mysql_data
      fi
      sbindir=/usr/local/percona-server-5.7.24/bin
      libexecdir=/usr/local/percona-server-5.7.24/bin
    else
      bindir="$basedir/bin"
      if test -z "$datadir"
      then
        datadir="$basedir/data"
      fi
      sbindir="$basedir/sbin"
      libexecdir="$basedir/libexec"
    fi
    
    # datadir_set is used to determine if datadir was set (and so should be
    # *not* set inside of the --basedir= handler.)
    datadir_set=
    
    #
    # Use LSB init script functions for printing messages, if possible
    #
    lsb_functions="/lib/lsb/init-functions"
    if test -f $lsb_functions ; then
      . $lsb_functions
    else
      log_success_msg()
      {
        echo " SUCCESS! $@"
      }
      log_failure_msg()
      {
        echo " ERROR! $@"
      }
    fi
    
    PATH="/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin"
    export PATH
    
    mode=$1    # start or stop
    
    [ $# -ge 1 ] && shift
    
    
    other_args="$*"   # uncommon, but needed when called from an RPM upgrade action
               # Expected: "--skip-networking --skip-grant-tables"
               # They are not checked here, intentionally, as it is the resposibility
               # of the "spec" file author to give correct arguments only.
    
    case `echo "testingc"`,`echo -n testing` in
        *c*,-n*) echo_n=   echo_c=     ;;
        *c*,*)   echo_n=-n echo_c=     ;;
        *)       echo_n=   echo_c='c' ;;
    esac
    
    parse_server_arguments() {
      for arg do
        case "$arg" in
          --basedir=*)  basedir=`echo "$arg" | sed -e 's/^[^=]*=//'`
                        bindir="$basedir/bin"
                if test -z "$datadir_set"; then
                  datadir="$basedir/data"
                fi
                sbindir="$basedir/sbin"
                libexecdir="$basedir/libexec"
            ;;
          --datadir=*)  datadir=`echo "$arg" | sed -e 's/^[^=]*=//'`
                datadir_set=1
        ;;
          --pid-file=*) mysqld_pid_file_path=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
          --service-startup-timeout=*) service_startup_timeout=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
        esac
      done
    }
    
    wait_for_pid () {
      verb="$1"           # created | removed
      pid="$2"            # process ID of the program operating on the pid-file
      pid_file_path="$3" # path to the PID file.
    
      i=0
      avoid_race_condition="by checking again"
    
      while test $i -ne $service_startup_timeout ; do
    
        case "$verb" in
          'created')
            # wait for a PID-file to pop into existence.
            test -s "$pid_file_path" && i='' && break
            ;;
          'removed')
            # wait for this PID-file to disappear
            test ! -s "$pid_file_path" && i='' && break
            ;;
          *)
            echo "wait_for_pid () usage: wait_for_pid created|removed pid pid_file_path"
            exit 1
            ;;
        esac
    
        # if server isn't running, then pid-file will never be updated
        if test -n "$pid"; then
          if kill -0 "$pid" 2>/dev/null; then
            :  # the server still runs
          else
            # The server may have exited between the last pid-file check and now.  
            if test -n "$avoid_race_condition"; then
              avoid_race_condition=""
              continue  # Check again.
            fi
    
            # there's nothing that will affect the file.
            log_failure_msg "The server quit without updating PID file ($pid_file_path)."
            return 1  # not waiting any more.
          fi
        fi
    
        echo $echo_n ".$echo_c"
        i=`expr $i + 1`
        sleep 1
    
      done
    
      if test -z "$i" ; then
        log_success_msg
        return 0
      else
        log_failure_msg
        return 1
      fi
    }
    
    # Get arguments from the my.cnf file,
    # the only group, which is read from now on is [mysqld]
    if test -x "$bindir/my_print_defaults";  then
      print_defaults="$bindir/my_print_defaults"
    else
      # Try to find basedir in /etc/my.cnf
      conf=/etc/my.cnf
      print_defaults=
      if test -r $conf
      then
        subpat='^[^=]*basedir[^=]*=(.*)$'
        dirs=`sed -e "/$subpat/!d" -e 's//1/' $conf`
        for d in $dirs
        do
          d=`echo $d | sed -e 's/[     ]//g'`
          if test -x "$d/bin/my_print_defaults"
          then
            print_defaults="$d/bin/my_print_defaults"
            break
          fi
        done
      fi
    
      # Hope it's in the PATH ... but I doubt it
      test -z "$print_defaults" && print_defaults="my_print_defaults"
    fi
    
    #
    # Read defaults file from 'basedir'.   If there is no defaults file there
    # check if it's in the old (depricated) place (datadir) and read it from there
    #
    
    extra_args=""
    if test -r "$basedir/my.cnf"
    then
      extra_args="-e $basedir/my.cnf"
    fi
    
    parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server`
    
    #
    # Set pid file if not given
    #
    if test -z "$mysqld_pid_file_path"
    then
      mysqld_pid_file_path=$datadir/`hostname`.pid
    else
      case "$mysqld_pid_file_path" in
        /* ) ;;
        * )  mysqld_pid_file_path="$datadir/$mysqld_pid_file_path" ;;
      esac
    fi
    
    case "$mode" in
      'start')
        # Start daemon
    
        # Safeguard (relative paths, core dumps..)
        cd $basedir
    
        echo $echo_n "Starting MySQL (Percona Server)"
        if test -x $bindir/mysqld_safe
        then
          # Give extra arguments to mysqld with the my.cnf file. This script
          # may be overwritten at next upgrade.
          $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
          wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
    
          # Make lock for RedHat / SuSE
          if test -w "$lockdir"
          then
            touch "$lock_file_path"
          fi
    
          exit $return_value
        else
          log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"
        fi
        ;;
    
      'stop')
        # Stop daemon. We use a signal here to avoid having to know the
        # root password.
    
        if test -s "$mysqld_pid_file_path"
        then
          # signal mysqld_safe that it needs to stop
          touch "$mysqld_pid_file_path.shutdown"
    
          mysqld_pid=`cat "$mysqld_pid_file_path"`
    
          if (kill -0 $mysqld_pid 2>/dev/null)
          then
            echo $echo_n "Shutting down MySQL (Percona Server)"
            kill $mysqld_pid
            # mysqld should remove the pid file when it exits, so wait for it.
            wait_for_pid removed "$mysqld_pid" "$mysqld_pid_file_path"; return_value=$?
          else
            log_failure_msg "MySQL (Percona Server) server process #$mysqld_pid is not running!"
            rm "$mysqld_pid_file_path"
          fi
    
          # Delete lock for RedHat / SuSE
          if test -f "$lock_file_path"
          then
            rm -f "$lock_file_path"
          fi
          exit $return_value
        else
          log_failure_msg "MySQL (Percona Server) PID file could not be found!"
        fi
        ;;
    
      'restart')
        # Stop the service and regardless of whether it was
        # running or not, start it again.
        if $0 stop  $other_args; then
          $0 start $other_args
        else
          log_failure_msg "Failed to stop running server, so refusing to try to start."
          exit 1
        fi
        ;;
    
      'reload'|'force-reload')
        if test -s "$mysqld_pid_file_path" ; then
          read mysqld_pid <  "$mysqld_pid_file_path"
          kill -HUP $mysqld_pid && log_success_msg "Reloading service MySQL (Percona Server)"
          touch "$mysqld_pid_file_path"
        else
          log_failure_msg "MySQL (Percona Server) PID file could not be found!"
          exit 1
        fi
        ;;
      'status')
        # First, check to see if pid file exists
        if test -s "$mysqld_pid_file_path" ; then 
          read mysqld_pid < "$mysqld_pid_file_path"
          if kill -0 $mysqld_pid 2>/dev/null ; then 
            log_success_msg "MySQL (Percona Server) running ($mysqld_pid)"
            exit 0
          else
            log_failure_msg "MySQL (Percona Server) is not running, but PID file exists"
            exit 1
          fi
        else
          # Try to find appropriate mysqld process
          mysqld_pid=`pidof $libexecdir/mysqld`
    
          # test if multiple pids exist
          pid_count=`echo $mysqld_pid | wc -w`
          if test $pid_count -gt 1 ; then
            log_failure_msg "Multiple MySQL running but PID file could not be found ($mysqld_pid)"
            exit 5
          elif test -z $mysqld_pid ; then 
            if test -f "$lock_file_path" ; then 
              log_failure_msg "MySQL (Percona Server) is not running, but lock file ($lock_file_path) exists"
              exit 2
            fi 
            log_failure_msg "MySQL (Percona Server) is not running"
            exit 3
          else
            log_failure_msg "MySQL (Percona Server) is running but PID file could not be found"
            exit 4
          fi
        fi
        ;;
        *)
          # usage
          basename=`basename "$0"`
          echo "Usage: $basename  {start|stop|restart|reload|force-reload|status}  [ MySQL (Percona Server) options ]"
          exit 1
        ;;
    esac
    
    exit 0
    
    3.创建zabbix库
    mysql> create database zabbix character set utf8 collate utf8_bin;
    
    给zabbix库授权并指定用户
    mysql> grant all privileges on zabbix.* to zabbix@'localhost' identified by 'zabbix';
    
    4.在zabbix server主机上导入zabbix自带的三个表,路径在zabbix4.0.10源码目录database/mysql下后缀为.sql的三个文件
    [root@zabbix4_clone:~]# ll /usr/local/src/zabbix-4.0.10/database/mysql/
    total 7260
    -rw-r--r-- 1 1001 mysql 3957065 Jun 26 04:20 data.sql
    -rw-r--r-- 1 1001 mysql 1978341 Jun 26 04:20 images.sql
    -rw-r--r-- 1 root root    15585 Jun 26 23:24 Makefile
    -rw-r--r-- 1 1001 mysql     392 Jun 26 04:20 Makefile.am
    -rw-r--r-- 1 1001 mysql   15711 Jun 26 04:20 Makefile.in
    -rw-r--r-- 1 1001 mysql  140265 Jun 26 04:20 schema.sql
    
    5.导入sql文件是有先后顺序的,先导schema.sql、images.sql、data.sql.
    [root@ws_zabbix4:/usr/local/src]# cd zabbix-4.0.10/database/mysql/
    [root@ws_zabbix4:/usr/local/src/zabbix-4.0.10/database/mysql]# ls
    data.sql  images.sql  Makefile.am  Makefile.in  schema.sql
    [root@ws_zabbix4:/usr/local/src/zabbix-4.0.10/database/mysql]# mysql -uzabbix -p'zabbix' zabbix < schema.sql
    [root@ws_zabbix4:/usr/local/src/zabbix-4.0.10/database/mysql]# mysql -uzabbix -p'zabbix' zabbix < images.sql
    [root@ws_zabbix4:/usr/local/src/zabbix-4.0.10/database/mysql]# mysql -uzabbix -p'zabbix' zabbix < data.sql 
    
    二、zabbix服务端的编译安装
    
    1.安装编译环境所需要的依赖包组
    #yum install gcc libxml2-devel libevent-devel net-snmp net-snmp-devel  curl  curl-devel php  php-bcmath  php-mbstring php-gettext php-session php-ctype php-xmlreader php-xmlwrer php-xml php-net-socket php-gd php-mysql -y
    
    2.创建zabbix用户useradd zabbix -s /sbin/nologin
    
    3.下载源码包,解压,编译
    
    # wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/4.0.10/zabbix-4.0.10.tar.gz/download
    # tar xf zabbix-4.0.10.tar.gz
    4.编译安装zabbix4.0.10
    
    ./configure --prefix=/usr/local/zabbix4.0.10 --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --enable-java
    
    
    # 编译报错
    ...
    checking for libperfstat 5.2.0.40 fileset... no
    checking for libperfstat 5.3.0.60 fileset... no
    checking for architecture... linux (linux-gnu)
    checking for the linux kernel version... unknown family (3.10.0-957.el7.x86_64)
    checking size of void *... 8
    checking for mysql_config... /usr/local/mysql/bin/mysql_config
    checking for main in -lperconaserverclient... no
    configure: error: Not found perconaserverclient library
    
    # 查找perconaserverclient.so 文件
    # [root@ws_zabbix4:/usr/local/src/zabbix-4.0.10]# locate perconaserverclient
    /usr/local/Percona-Server-5.7.24_解压版/lib/libperconaserverclient.a
    /usr/local/Percona-Server-5.7.24_解压版/lib/libperconaserverclient.so
    /usr/local/Percona-Server-5.7.24_解压版/lib/libperconaserverclient.so.20
    /usr/local/Percona-Server-5.7.24_解压版/lib/libperconaserverclient.so.20.3.11
    /usr/local/Percona-Server-5.7.24_解压版/lib/pkgconfig/perconaserverclient.pc
    /usr/local/bak_percona-server-5.7.24/lib/libperconaserverclient.a
    /usr/local/bak_percona-server-5.7.24/lib/libperconaserverclient.so
    /usr/local/bak_percona-server-5.7.24/lib/libperconaserverclient.so.20
    /usr/local/bak_percona-server-5.7.24/lib/libperconaserverclient.so.20.3.11
    /usr/local/bak_percona-server-5.7.24/lib/pkgconfig/perconaserverclient.pc
    /usr/local/percona-server-5.7.14/lib/libperconaserverclient.a
    /usr/local/percona-server-5.7.14/lib/libperconaserverclient.so
    /usr/local/percona-server-5.7.14/lib/libperconaserverclient.so.20
    /usr/local/percona-server-5.7.14/lib/libperconaserverclient.so.20.3.1
    /usr/local/percona-server-5.7.14/lib/pkgconfig/perconaserverclient.pc
    /usr/local/percona-server-5.7.24/lib/libperconaserverclient.a
    /usr/local/percona-server-5.7.24/lib/libperconaserverclient.so
    /usr/local/percona-server-5.7.24/lib/libperconaserverclient.so.20
    /usr/local/percona-server-5.7.24/lib/libperconaserverclient.so.20.3.11
    /usr/local/percona-server-5.7.24/lib/pkgconfig/perconaserverclient.pc
    
    # 生成软连接,问题解决
    [root@ws_zabbix4:/usr/local/src/zabbix-4.0.10]# ln -s /usr/local/mysql/lib/libperconaserverclient.so /usr/lib64/mysql/libperconaserverclient.so
    [root@ws_zabbix4:/usr/local/src/zabbix-4.0.10]# ln -s /usr/local/mysql/lib/libperconaserverclient.so /usr/lib/libperconaserverclient.so
    
    
    5.执行make && make install
    #make -j 4 && make install 
    
    6.拷贝启动脚本文件到/etc/init.d目录下
    #cp misc/init.d/fedora/core/* /etc/init.d/
    
    7.拷贝过去的脚本需要修改下目录路径,server和agent都需要改
    # cd /usr/local
    # ln -s zabbix4.0.10 zabbix
    #vim /etc/init.d/zabbix_server 
        22         BASEDIR=/usr/local
    改成:
        22         BASEDIR=/usr/local/zabbix
    
    8.创建zabbix的日志存放路径和修改/usr/local/zabbix的所属主为zabbix
    useradd zabbix -s /sbin/nologin
    # mkdir /var/log/zabbix
    # chown -R zabbix.zabbix /var/log/zabbix
    # chown -R zabbix.zabbix /usr/local/zabbix/
    
    9.修改配置文件
    [root@ws_zabbix4:/usr/local/src/zabbix-4.0.10]# egrep -v '^#|^$' /usr/local/zabbix/etc/zabbix_server.conf
    LogFileSize=10   开启日志滚动,单位为MB、达到指定值之后就生成新的日志文件。
    ListenPort=10051
    LogFile=/var/log/zabbix/zabbix_server.log    修改日志存放路径
    DBName=zabbix
    DBUser=zabbix
    DBSocket=/tmp/mysql.sock
    DBPort=3306
    StartPollers=30
    StartTrappers=30
    StartVMwareCollectors=20
    VMwareFrequency=20
    VMwarePerfFrequency=20
    VMwareCacheSize=64M
    VMwareTimeout=30
    ListenIP=0.0.0.0
    HousekeepingFrequency=12
    CacheSize=256M
    Timeout=15
    AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
    ExternalScripts=/usr/local/zabbix/share/zabbix/externalscripts
    LogSlowQueries=3000
    StartProxyPollers=20
    
    10.启动zabbix、并查看端口是否正常监听
    # 通过启动脚本启动,看不到端口
    # /etc/init.d/zabbix_server start
    # 直接使用sbin下的可执行程序启动,定位错误
    [root@ws_zabbix4:/usr/local]# /usr/local/zabbix/sbin/zabbix_server 
    [root@ws_zabbix4:/usr/local]# zabbix_server [40848]: cannot open "/var/log/zabbix/zabbix_server.log": [13] Permission denied
    
    chown -R zabbix.zabbix /var/log/zabbix/
    
    # 再次启动成功
    [root@ws_zabbix4:/usr/local]# netstat -tnlp | grep 10051
    tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      41018/zabbix_server        
    
    安装nginx
    yum install -y nginx
    # 修改php.ini参数
    max_input_time=300
    
    11.创建一个zabbix前端页面存放目录
    # mkdir /data/www/vhosts/zabbix.chinasoft.com
    
    12从zabbix解压包里面把php的所有文件拷贝到/var/www/html/zabbix目录下
    # cp -ar frontends/php/* /data/www/vhosts/zabbix.chinasoft.com
    
    13.通过网页来安装zabbix
    


    默认账号Admin 密码 zabbix

    nginx配置文件

    [root@zabbix4_clone:~]# cat /usr/local/nginx/conf/vhost.d/zabbix.chinasoft.com.conf 
    server
    {
        listen      80;
        server_name  zabbix.chinasoft.com;
        index index.php index.html index.htm;
        root   /data/www/vhosts/zabbix.chinasoft.com/httpdocs;
        access_log /data/www/logs/zabbix/access_zabbix.log  combined;
        error_log  /data/www/logs/zabbix/error_zabbix.log; 
    
        #expires                         
        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires 30d;
        }
    
        location ~ .*.(js|css)?$
        {
            expires      24h;
        }    
    
        location /webstatus {
            stub_status on;
            access_log off;
        }
    
        # location ~* ^/(attachments|images)/.*.(php|php5)$
        # {
        #    deny all;
        # }
    
        location ~ .*.php?$
        {
            fastcgi_pass 127.0.0.1:9000;
            #fastcgi_pass unix:/tmp/php-fcgi.sock;
            #fastcgi_pass php;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    
    }

     客户端启动脚本

    [root@:~]# cat /etc/init.d/zabbix_agentd 
    #!/bin/bash
    #
    # chkconfig: - 90 10
    # description:  Starts and stops Zabbix Agent using chkconfig
    #                Tested on Fedora Core 2 - 5
    #                Should work on all Fedora Core versions
    #
    # @name:    zabbix_agentd
    # @author:    Alexander Hagenah <hagenah@topconcepts.com>
    # @created:    18.04.2006
    #
    # Modified for Zabbix 2.0.0
    # May 2012, Zabbix SIA
    #
    # Source function library.
    . /etc/init.d/functions
    
    # Variables
    # Edit these to match your system settings
    
        # Zabbix-Directory
        BASEDIR=/usr/local/zabbix_agents_3.2.0
    
        # Binary File
        BINARY_NAME=zabbix_agentd
    
        # Full Binary File Call
        FULLPATH=$BASEDIR/sbin/$BINARY_NAME
    
        # PID file
        PIDFILE=/tmp/$BINARY_NAME.pid
    
        # Establish args
        ERROR=0
        STOPPING=0
    
    #
    # No need to edit the things below
    #
    
    # application checking status
    if [ -f $PIDFILE  ] && [ -s $PIDFILE ]
        then
        PID=`cat $PIDFILE`
    
        if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null && [ $BINARY_NAME == `ps -e | grep $PID | awk '{print $4}'` ]
        then
            STATUS="$BINARY_NAME (pid `pidof $APP`) running.."
            RUNNING=1
        else
            rm -f $PIDFILE
            STATUS="$BINARY_NAME (pid file existed ($PID) and now removed) not running.."
            RUNNING=0
        fi
    else
        if [ `ps -e | grep $BINARY_NAME | head -1 | awk '{ print $1 }'` ]
            then
            STATUS="$BINARY_NAME (pid `pidof $APP`, but no pid file) running.."
        else
            STATUS="$BINARY_NAME (no pid file) not running"
        fi
        RUNNING=0
    fi
    
    # functions
    start() {
        if [ $RUNNING -eq 1 ]
            then
            echo "$0 $ARG: $BINARY_NAME (pid $PID) already running"
        else
            action $"Starting $BINARY_NAME: " $FULLPATH
            touch /var/lock/subsys/$BINARY_NAME
        fi
    }
    
    stop() {
        echo -n $"Shutting down $BINARY_NAME: "
        killproc $BINARY_NAME
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$BINARY_NAME
        RUNNING=0
    }
    
    
    # logic
    case "$1" in
        start)
            start
            ;;
        stop)
            stop
            ;;
        status)
            status $BINARY_NAME
            ;;
        restart)
            stop
            sleep 2
            start
            ;;
        help|*)
            echo $"Usage: $0 {start|stop|status|restart|help}"
            cat <<EOF
    
                start        - start $BINARY_NAME
                stop        - stop $BINARY_NAME
                status        - show current status of $BINARY_NAME
                restart        - restart $BINARY_NAME if running by sending a SIGHUP or start if not running
                help        - this screen
    
    EOF
        exit 1
        ;;
    esac
    
    exit 0
  • 相关阅读:
    Unity3D热更新
    js
    xshell安装运行时提示缺少mfc110.dll
    Linux 分区的概念
    js
    Web 安全测试
    php 获取客户端的浏览器信息
    H5 获取地理位置
    JS -判断、监听屏幕横竖屏切换事件
    css 禁用移动端部分特性
  • 原文地址:https://www.cnblogs.com/reblue520/p/11114935.html
Copyright © 2020-2023  润新知