千家信息网

技术论坛搭建项目

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,目录第二阶段项目技术文档 10修订版: 101、 技术论坛搭建项目 102、 项目拓扑 113、 项目需求 114、 项目主机规划 125、 Ansible自动化部署服务2.0 135.1、 安装an
千家信息网最后更新 2024年11月11日技术论坛搭建项目

目录
第二阶段项目技术文档 10
修订版: 10
1、 技术论坛搭建项目 10
2、 项目拓扑 11
3、 项目需求 11
4、 项目主机规划 12
5、 Ansible自动化部署服务2.0 13
5.1、 安装ansible 13
5.2、 配置免密登录 13
5.3、 创建任务目录 14
5.4、 批量部署apache 14
5.4.1、 将本服务器上安装好的apache打包 14
5.4.2、 构建apache任务 14
5.4.3、 辅助安装脚本 14
5.5、 批量部署_Nginx 15
5.5.4、 将本服务器上安装好的nginx打包 15
5.5.5、 构建httpd任务 15
5.6、 批量部署PHP 16
5.7、 批量部署MySQL 18
5.8、 批量部署logstash 19
5.9、 批量部署zabbix-agent 19
5.10、 剧本site.yml 20
5.11、 部署discuz 20
5.11.6、 创建mysql测试账号,用于discuz 20
5.11.7、 上传包到root目录 20
5.11.8、 创建脚本 21
5.11.9、 创建discuz安装脚本,建议直接在服务器上执行 21
5.11.10、 创建调用脚本 21
5.11.11、 运行脚本 21
6、 部署MHA 22
6.1、 实验环境 22
6.1.1、 主机配置。 22
6.1.2、 配置主机名映射。 22
6.1.3、 配置免密认证(所有节点) 22
6.1.4、 上传软件包。 22
6.1.5、 Yum安装软件依赖包 23
6.1.6、 各个node节点安装软件依赖和软件包 24
6.2、 安装MHA Manager 24
6.2.7、 安装MHA Manger依赖的perl模块 24
6.2.8、 安装MHA Manager软件包: 24
6.3、 搭建主从复制环境 25
6.3.9、 在mha-master配置主数据库服务器 25
6.3.10、 在mha-slave1配置从服务: 25
6.3.11、 在mah-slave2配置从服务: 27
6.3.12、 两台slave服务器设置read_only 28
6.3.13、 设置relay log的清除方式(在每个slave节点上) 28
6.4、 配置MHA 28
6.4.14、 创建MHA的工作目录,并且创建相关配置文件 28
6.4.15、 编写脚本/usr/bin/master_ip_failover,要会perl脚本语言 29
6.4.16、 设置VIP地址(master) 31
6.4.17、 检查SSH配置 31
6.4.18、 检查整个集群复制环境状况 31
6.4.19、 开启MHA Manager监控 32
6.4.20、 查看MHA Manager监控是否正常 32
6.4.21、 查看启动状态 32
6.4.22、 打开新窗口观察日志 32
7、 ceph集群 33
7.1、 环境准备: 33
7.1.1、 前三台服务器添加一块20G的硬盘 33
7.1.2、 关闭selinux,关闭防火墙:(所有节点) 34
7.1.3、 配置hosts文件:(所有节点) 34
7.1.4、 配置ssh免密登录(管理节点) 34
7.1.5、 上传软件包并解压 34
7.1.6、 yum源配置: 35
7.1.7、 复制ceph软件包和相关文件到cong12,cong13: 35
7.1.8、 在ceph0,ceph2,ceph3上部署ceph,安装依赖工具: 35
7.2、 Ceph0的部署: 35
7.2.9、 创建monitor服务: 35
7.2.10、 修改副本数: 36
7.2.11、 安装ceph monitor: 36
7.2.12、 收集节点的keyring文件: 37
7.2.13、 部署osd服务: 37
7.2.14、 部署mds服务 40
7.2.15、 查看集群状态 40
7.3、 创建ceph文件系统 40
7.3.16、 创建之前查看文件系统 40
7.3.17、 创建存储池 40
7.3.18、 创建文件系统 41
7.3.19、 查看ceph文件系统 41
7.3.20、 查看mds节点状态 41
7.4、 内核驱动挂载Ceph文件系统 41
7.4.21、 创建挂载点 41
7.4.22、 使用密钥挂载 41
7.4.23、 使用密钥文件挂载 42
7.5、 RBD的使用 42
7.5.24、 检测liunx内核是否支持RBD 42
7.5.25、 创建rbd存储池 42
7.5.26、 创建指定大小的块设备 42
7.5.27、 查看test1信息 42
7.5.28、 映射进内核 43
7.5.29、 挂载使用 43
8、 Nginx+apache动静分离 44
8.1、 部署nginx 44
8.1.1、 上传所需软件包并解压到指定目录,需要用到rz命令安装一下。(nginx1) 44
8.1.2、 隐藏版本号 44
8.1.3、 安装nginx依赖包 45
8.1.4、 预编译 45
8.1.5、 编译安装 45
8.1.6、 启动查看nginx端口 45
8.1.7、 查看版本号,进行网页测试 45
8.1.8、 修改 nginx运行账号 46
8.1.9、 生成nginx启动脚本 47
8.1.10、 配置服务开机自启动 47
8.2、 部署apache(两台都需要) 48
8.2.11、 上传所需软件包并解压到指定目录 48
8.2.12、 隐藏版本信息 48
8.2.13、 安装apache依赖包 48
8.2.14、 如果有就删除之前的httpd 49
8.2.15、 预编译&编译安装 49
8.2.16、 修改主配置文件,加快apache重启速度 49
8.2.17、 设置apache启动脚本 49
8.2.18、 设置脚本开机自启动 49
8.2.19、 启动服务,设置软连接 50
8.2.20、 插卡版本号,进行访问网页测试 50
8.2.21、 再次修改配置文件(隐藏版本号) 50
8.2.22、 修改apache运行账号 51
8.3、 在apache上搭建php 52
8.3.23、 上传libmcrypt,php软件包并解压到指定目录下 52
8.3.24、 进入到libmcrypt解压目录下,编译及安装 52
8.3.25、 PHP预编译 53
8.3.26、 编译及安装 53
8.3.27、 生成配置文件 53
8.3.28、 添加apache支持php模块 53
8.3.29、 创建php测试页面,mysql连接页面 53
8.3.30、 重启httpd服务,网页测试 54
8.4、 Apache2和apache1配置相同 55
8.5、 配置nginx负载均衡 55
8.5.31、 修改nginx主配置文件 55
8.5.32、 重启nginx服务器,,在apache编辑测试文件,访问网页测试 55
8.6、 配置nginx动静分离 56
8.6.33、 修改nginx配置文件 56
8.6.34、 测试动静分离 57
8.7、 搭建discuz论坛(在apache) 58
8.7.35、 上传discuz软件包,并解压到指定目录下 58
8.7.36、 拷贝论坛到网站根目录下 58
8.7.37、 修改php.ini文件 58
8.7.38、 重启httpd,打开网页安装discuz 58
8.7.39、 把apache上的/usr/local/bbs/和/ust/local/httpd/htdos/bbs传到nginx上 60
8.8、 Apache2和apache1配置相同 61
8.9、 Nginx优化 61
8.9.40、 设置nginx运行进程个数 61
8.9.41、 Nginx运行cpu亲和力4核4线程配置 61
8.9.42、 设置nginx最大打开文件数 62
8.9.43、 http主体优化 62
8.9.44、 修改网站域名 63
8.9.45、 Fastcgi调优 63
8.9.46、 Gzip调优 64
8.9.47、 日志切割优化 65
8.9.48、 目录文件访问控制 67
8.9.49、 对目录进行访问限制 68
8.9.50、 防盗链 68
9、 LVS+Keepalived负载群集 69
9.1、 LVS环境安装配置(lvs1/lvs2) 69
9.1.1、 安装ipvsadm工具 69
9.2、 Keepalived环境安装配置 69
9.2.2、 安装keepalived 69
9.2.3、 Keepalived配置 69
9.2.4、 查看VIP 72
9.2.5、 测试keepalived故障转移 73
9.2.6、 Real server(web 服务器)绑定 VIP 74
9.2.7、 测试使用VIP访问网页 75
10、 elk+kafka引入消息队列 76
10.2、 上传软件包 76
10.3、 安装JDK 77
10.4、 安装elasticsearch 77
10.4.2、 创建用户 77
10.4.3、 修改系统参数 77
10.4.4、 启动elasticsearch 78
10.4.5、 测试 78
10.5、 安装ElasticSearch-head(可略) 79
10.6、 安装Logstash 80
10.7、 安装kibana 82
10.7.6、 解压安装包 82
10.7.7、 编译配置文件 82
10.7.8、 启动服务 83
10.7.9、 测试 83
10.8、 在被收集端安装Filebeat,实现与Logstash对接 86
10.8.10、 上传软件包 86
10.8.11、 解压软件包 87
10.8.12、 安装jdk 87
10.8.13、 安装logstash 87
10.8.14、 编译配置文件 88
10.8.15、 配置Logstash上的配置文件 89
10.8.16、 开启filebeat进程 90
10.8.17、 验证 90
10.9、 引入消息队列ELK+kafka 92
10.9.18、 安装nginx 92
10.9.19、 nginx上安装logstash(安装zookeeper+kafka) 93
10.9.20、 安装kafka 94
10.10、 上传软件包 95
10.11、 -安装jdk 96
10.12、 解压软件包 97
10.13、 生成配置文件 97
10.14、 在kafka(被收集日志端)配置Logstash 98
10.14.21、 解压软件包 98
10.14.22、 生成配置文件 99
10.14.23、 测试 99
11、 Zabbix 101
11.2、 建立时间同步环境,在zabbix-server上搭建时间同步服务器 101
11.2.2、 安装NTP(关闭防火墙/selinux) 101
11.2.3、 配置NTP 101
11.2.4、 重启服务并设置为开机启动 102
11.2.5、 在其他服务器上进行时间同步(关闭防火墙/selinux) 102
11.3、 创建zabbix数据库和授权用户: 102
11.3.6、 授权 102
11.3.7、 导入数据库文件: 103
11.4、 安装Zabbix-Server服务器 103
11.4.8、 在zabbix-server上编译安装zabbix: 103
11.4.9、 编辑配置文件并启动: 104
11.4.10、 查看监听端口' 104
11.4.11、 设置启动脚本 105
11.4.12、 做软连接 105
11.4.13、 设置自启动 105
11.5、 安装Zabbix-Web服务器(编译安装nginx) 105
11.5.14、 Nginx安装及优化 105
11.5.15、 php安装 110
11.5.16、 配置zabbix的web页面 117
11.5.17、 查看当前系统时区 117
11.5.18、 修改配置文件,以支持zabbix 117
11.5.19、 安装zabbix 118
11.5.20、 如果想重新指定数据库和nginx的地址,可以在配置文件中指定 121
11.6、 Zabbix用户管理 122
11.6.21、 修改密码 122
11.6.22、 创建用户 124
11.6.23、 点击添加可以加入到相应的群组 125
11.6.24、 上传simkai.ttf包,解决Zabbix中文乱码 上传simkai.ttf包 125
11.7、 安装Zabbix-Agent端 126
11.7.25、 在mha-slave1主机上安装: 126
11.7.26、 编辑配置文件: 127
11.7.27、 设置为系统服务,添加软连接 128
11.7.28、 设置自启动 128
11.8、 添加群组和主机 128
11.8.29、 创建群组 128
11.8.30、 添加主机 129
11.8.31、 添加模板 130
11.8.32、 查看图形 132
11.9、 监控指定端口 132
11.9.33、 Zabbix 监控指定端口(比如mysql端口) 132
11.9.34、 创建一个模板 132
11.9.35、 创建监控项 134
11.9.36、 触发器设置 136
11.9.37、 将模板应用到主机 138
11.9.38、 查看最新数据 138
11.9.39、 也可以查看图形 139
11.9.40、 测试监控 139
11.10、 发送邮件报警 141
11.10.41、 注册邮箱 141
11.10.42、 安装mailx软件 142
11.10.43、 编辑配置文件 142
11.10.44、 发送测试邮件 142
11.10.45、 查看测试邮件 142
11.10.46、 配置发送邮件脚本 143
11.10.47、 Web页面上配报警置 144
11.10.48、 测试 154
11.11、 动态添加php模块 157
11.11.49、 添加bcmath模块 157
11.11.50、 添加gd模块 157
11.11.51、 添加gettext模块 158
12、 DNS部署 159
12.1、 主DNS部署 159
12.1.1、 实验环境 159
12.1.2、 安装所需软件包 159
12.1.3、 编辑DNS的主配置文件 159
12.1.4、 编辑区域配置 159
12.1.5、 配置主区域正向数据文件 160
12.1.6、 编辑反向区域解析文件 160
12.1.7、 检查配置文件 160
12.1.8、 启动named 161
12.1.9、 验证正反DNS解析 161
12.2、 从DNS部署 161
12.2.10、 安装所需软件包 161
12.2.11、 编写主配置文件 161
12.2.12、 编写区域文件 162
12.2.13、 启动服务 162
12.2.14、 修改想要访问的DNS 162
12.2.15、 查看slaves文件夹是否同步区域文件 163
12.2.16、 验证 163

1、技术论坛搭建项目
项目简介
公司现阶段需要搭建一个技术论坛对外网提供服务,网站设计要求达到高可用,高负载,并且添加监控,备份。
项目拓扑

项目需求
1、使用LVS+ keeplive实现负载均衡
2、使用nginx/hapoxy实现反向代理
3、使用nginx和apache实现动静分离
4、使用MHA搭建mysql集群
5、使用ceph集群作分布式存储
6、搭建discuz论坛
7、搭建DNS解析网站域名
8、搭建ELK+kafka/redis集群收集网站日志
9、使用zabbix监控各个服务器硬件指标及服务端口
10、备份mysql数据库到ceph集群
11、使用ansble批量部署nginx、apache、php、zabbix-agent、logstash , nginx和apache,php,mysql

项目主机规划
主机名 IP 角色 安装软件 所属集群
Ansible 192.168.43.71 ansible ansible NULL
Mha-manager 192.168.43.10 manager mha mha
Mha-master 192.168.43.11
VIP:192.168.43.110 Master Mysql Mha
Mha-slave1 192.168.43.12 Slave1 Mysql Mha
Mha-slave2 192.168.43.13 Salve2 Mysql mha
Ceph0 192.168.43.41 Admin/Osd/mgr ceph ceph
Ceph2 192.168.43.42 Osd,mds ceph ceph
Ceph3 192.168.43.43 Osd,mds ceph ceph
Ceph4 192.168.43.44 client ceph ceph
Nginx1 192.168.43.31 Nginx Nginx,discuz Wed
Nginx2 192.168.43.32 Nginx Nginx,disvuz Wed
Apache1 192.168.43.33 Apache Apache,php,discuz Wed
Apache2 192.168.43.34 Apache Apache,php,discuz Wed
LVS DIP:192.168.43.60
VIP:192.168.43.100 MASTER ipvsadm、keepalived LVS
LVS DIP:192.168.43.61
VIP:192.168.43.100 BACKUP ipvsadm、keepalived LVS
Elk 192.168.43.80 elk Elasticsearch、jdk、node、elasticsearch-head-master、kibana、logstash Elk
filebeat 192.168.43.81 Filebeat Filebeat、kibana、jdk elk
Logstash 192.168.43.82 logstash Logstash、jdk elk
Zabbix-server 192.168.43.20 Zabbix-server zabbix-3.2.6.tar.gz Zabbix
dns1 192.168.43.50 主DNS Bind DNS
dns2 192.168.43.51 备DNS Bind DNS

Ansible自动化部署服务2.0
安装ansible
[root@ansible ~]# vim /etc/yum.repos.d/renzeizuofu.repo
[ansib]
name=ansible
baseurl=file:///root/ansible
enabled=1
gpgcheck=0
[root@ansible ~]# ls
ansible.tar.gz
[root@ansible ~]# tar -zxf ansible.tar.gz
[root@ansible ~]# yum -y install ansible
配置免密登录
[root@ansible ~]# ssh-keygen
[root@ansible ~]# ssh-copy-id 192.168.10.1
[root@ansible ~]# ssh-copy-id 192.168.10.2
[root@ansible ~]# ssh-copy-id 192.168.10.3
[root@ansible ~]# ssh-copy-id 192.168.10.4
[root@ansible ~]# ssh-copy-id 192.168.10.5

创建任务目录
[root@ansible ~]# mkdir -p /etc/ansible/GspTest/{nginx,apache,php,zabbix-agent,logstash}/{tasks,files,templates,vars,meta,default,handlers}
批量部署apache
将本服务器上安装好的apache打包
[root@ansible ~]# cd /etc/ansible/GspTest/apache/
[root@ansible apache]# ls files/
apache.sh apache.tar.gz

构建apache任务
[root@ansible apache]# vim tasks/main.yml

  • name: input apache
    copy: src=apache.tar.gz dest=/root/ force=yes owner=root mode=0755
  • name: input shell
    copy: src=apache.sh dest=/root/ force=yes owner=root mode=0755
  • name: execute shell
    shell: /bin/bash /root/apache.sh
  • name: delete
    shell: rm -rf /root/apache.tar.gz /root/apache.sh
    辅助安装脚本
    [root@ansible apache]# vim files/apache.sh
    #!/bin/bash
    ApacheDir=/usr/local/httpd
    ApacheDir=/usr/local/httpd
    yum -y remove httpd &> /dev/null
    D=find $(echo $PATH | awk -F ':' '{print $1,$2,$3,$4}') -name httpd | wc -l
    if [ $D -eq 0 ] ;then
    cd /root && tar -zxf apache.tar.gz -C /usr/local/ &&
    sed -i '1a#chkconfig: 2345 11 88' $ApacheDir/bin/apachectl && rm -rf /etc/init.d/httpd &&
    cp --force $ApacheDir/bin/apachectl /etc/init.d/httpd &&
    chkconfig --add httpd && chkconfig httpd on && rm -rf /root/apache.tar.gz /root/apache.sh && ln -s /usr/local/httpd/bin/
    /usr/bin/ &> /dev/null
    else
    for i in {0..20}; do echo "You has a apache,please remove" >> /dev/pts/$i; done
    fi
    批量部署_Nginx
    将本服务器上安装好的nginx打包
    [root@ansible ~]# cd /etc/ansible/GspTest/nginx/
    [root@ansible GspTest]# ls nginx/files/
    nginx.sh nginx.tar.gz
    构建httpd任务
    [root@ansible nginx]# vim tasks/main.yml
  • name: input nginx
    copy: src=nginx.tar.gz dest=/root force=yes
  • name: input shell
    copy: src=nginx.sh dest=/root force=yes
  • name: install nginx
    shell: /bin/bash /root/nginx.sh
  • name: start nginx
    service: name=nginx state=started
  • name: delete
    shell: rm -rf /root/nginx.tar.gz /root/nginx.sh
    辅助安装脚本
    [root@ansible nginx]# vim files/nginx.sh
    #!/bin/bash
    NginxDir=/usr/local/nginx
    D=find $(echo $PATH | awk -F ':' '{print $1,$2,$3,$4}') -name nginx | wc -l
    if [ $D -eq 0 ] ;then
    cd /root && tar -zxf nginx.tar.gz -C /usr/local/ && rm -rf nginx.tar.gz
    cat > /etc/init.d/nginx <#!/bin/bash

    chkconfig: - 99 2

    description: Nginx Service Control Script

    PROG="/usr/local/nginx/sbin/nginx"
    PIDF="/usr/local/nginx/logs/nginx.pid"
    case "\$1" in
    start)
    \$PROG
    ;;
    stop)
    kill -3 \$(cat \$PIDF)
    ;;
    restart)
    \$0 stop &> /dev/null
    if [ \$? -ne 0 ] ; then continue ; fi
    \$0 start
    ;;
    reload)
    kill -1 \$(cat \$PIDF)
    ;;
    *)
    echo "Userage: \$0 { start | stop | restart | reload }"
    exit 1
    esac
    exit 0
    EOF
    chmod +x /etc/init.d/nginx && chkconfig --add nginx && chkconfig nginx on
    else
    for i in {0..20}; do echo "You has a nginx,please remove" >> /dev/pts/$i; done
    fi
    批量部署PHP
    [root@ansible ~]# cd /etc/ansible/GspTest/php
    [root@ansible php]# ls files/
    libmcrypt-2.5.7.tar.gz php-5.6.36.tar.gz php.sh
    [root@ansible php]# vim tasks/main.yml

  • name: copy tar
    copy: src=php-5.6.36.tar.gz dest=/root/
  • name: copy tar
    copy: src=libmcrypt-2.5.7.tar.gz dest=/root/
  • name: copy php.sh
    copy: src=php.sh dest=/tmp
  • name: bash php.sh
    shell: /bin/bash /tmp/php.sh
    [root@ansible php]# vim files/php.sh
    #!/bin/bash
    cd /root
    libmcryp=$(ls libmcrypt-.tar.gz)
    php=$(ls php-
    .tar.gz)
    apache="/usr/local/httpd"
    A=$(ls $libmcryp | wc -l)
    if [ $A -gt 0 ];then
    tar zxf $libmcryp -C /usr/local/src
    D=$(ls -l /usr/local/src/ | grep ^d | grep libmcryp | awk '{print $9}')
    cd /usr/local/src/$D
    ./configure --prefix=/usr/local/libmcrypt && make && make install && cd /root
    else
    for i in {0..20}; do echo "libmcryp软件包不存在!" >> /dev/pts/$i; done
    fi

B=$(ls $php | wc -l)
if [ $B -gt 0 ]; then
tar zxf $php -C /usr/local/src/
E=$(ls -l /usr/local/src/ |grep ^d | grep php | awk '{print $9}')
cd /usr/local/src/$E
./configure --prefix=/usr/local/$E --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/usr/local/php5.6/etc/ --with-bz2 --enable-maintainer-zts --with-apxs2=/usr/local/httpd/bin/apxs &&
for i in {0..20}; do echo "PHP,Configure OK,now makefile" >> /dev/pts/$i; done
make &&
make install &&
for i in {0..20}; do echo "PHP install complete !!!" >> /dev/pts/$i; done
rm -rf /usr/local/$E/etc/php.ini && cp php.ini-production /usr/local/$E/etc/php.ini
else
for i in {0..20}; do echo "PHP软件包不存在!" >> /dev/pts/$i; done
fi

if [ $? -eq 0 ];then
cd $apache
YourIP=$(ifconfig | sed -n 2p | awk -F ' ' '{print $2}')
sed -i '/DirectoryIndex index.html/s/index.html/index.html index.php/g' conf/httpd.conf
sed -i '/\/a\AddType application/x-httpd-php .php .phtml' conf/httpd.conf
sed -i "/ServerName www.example.com/a\ServerName $YourIP:80" conf/httpd.conf
echo "phpinfo();
?>" > /usr/local/httpd/htdocs/index.php
systemctl restart httpd
fi
批量部署MySQL
[root@ansible ~]# cd /etc/ansible/GspTest/mysql/
[root@ansible mysql]# ls files/
mysql.sh mysql.tar.gz
[root@ansible mysql]# vim tasks/main.yml

  • name: input mysql
    copy: src=mysql.tar.gz dest=/root force=yes owner=root mode=0755
  • name: input shell script
    copy: src=mysql.sh dest=/root force=yes owner=root mode=0755
  • name: install mysql
    shell: /bin/bash /root/mysql.sh
  • name: start mysql
    service: name=mysqld state=started
  • name: delete
    shell: rm -rf /root/mysql.tar.gz /root/mysql.sh
    辅助安装脚本
    [root@ansible mysql]# vim files/mysql.sh
    #!/bin/bash
    basedir=/usr/local/mysql
    datadir=/data/mysql/data
    log=/data/mysql/log
    yum -y remove boost mariadb &> /dev/null
    if [ rpm -qa mariadb* boost* | wc -l -eq 0 ] ;then
    cd /root && tar -zxf mysql.tar.gz -C /usr/local/ && touch /etc/my.cnf && mkdir -p $basedir /data/mysql/{data,log} && useradd -M -s /sbin/nologin mysql &> /dev/null && chown -Rf mysql:mysql $basedir /data/mysql /etc/my.cnf && cat > /etc/my.cnf << EOF
    [mysqld]
    basedir=/usr/local/mysql
    datadir=/data/mysql/data
    port=3306
    socket=/usr/local/mysql/mysql.sock
    symbolic-links=0
    character-set-server=utf8
    log-error=/data/mysql/log/mysqld.log
    pid-file=/usr/local/mysql/mysqld.pid
    EOF
    rm -rf /etc/init.d/mysqld &&
    cp $basedir/support-files/mysql.server /etc/init.d/mysqld &&
    chmod +x /etc/init.d/mysqld && ln -s /usr/local/mysql/bin/* /usr/bin/ &> /dev/null && chkconfig --add mysqld && chkconfig mysqld on
    fi
    if [ $? -eq 0 ] ;then
    /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=$basedir --datadir=$datadir && echo $?
    fi
    批量部署logstash
    [root@ansible ~]# cd /etc/ansible/GspTest/logstash/
    [root@ansible logstash]# ls files/
    logstash-6.4.2.tar.gz
    [root@ansible logstash]# vim tasks/main.yml
  • name: logstash
    copy: src=logstash-6.4.2.tar.gz dest=/root force=yes owner=root mode=755
  • name: install logstash
    shell: tar -zxf /root/logstash-6.4.2.tar.gz -C /usr/local/
  • name: delete
    shell: rm -rf /root/logstash-6.4.2.tar.g
    批量部署zabbix-agent
    [root@ansible zabbix-agent]# ls files/
    zabbix-4.2.4.tar.gz zabbix_agentd
    [root@ansible zabbix-agent]# vim tasks/main.yml
  • name: input zabbix-agent
    copy: src=zabbix-4.2.4.tar.gz dest=/root force=yes
  • name: install zabbix-agent
    shell: tar -zxf /root/zabbix-4.2.4.tar.gz -C /usr/local
  • name: starting up
    copy: src=zabbix_agentd dest=/etc/init.d/
  • name: delete
    shell: rm -rf /root/zabbix.sh /root/zabbix-4.2.4.tar.gz

剧本site.yml
[root@ansible ~]# cd /etc/ansible/GspTest/
[root@ansible GspTest]# vim site.yml

  • hosts: services # 这里的名字是主机清单hosts中的名字
    remote_user: root
    roles:
    #- apache
    #- nginx
    #- php
    #- mysql
    #- zabbix_agent
    #- logstash
    根据需求,更改hosts主机清单,调整site.yml的服务项即可。井号'#'为不安装,去井号为安装

部署discuz
创建mysql测试账号,用于discuz
[root@mha-master ~]# mysql -uroot -p123456 -p 192.168.43.110
mysql> grant all on . to test@'%' identified by '123456';
mysql> flush privileges;
上传包到root目录
[root@ansible ~]# ls
Discuz_7.2_FULL_SC_UTF8.zip

创建脚本
创建discuz安装脚本,建议直接在服务器上执行
[root@ansible ~]# vim /etc/ansible/discuz.sh
#!/bin/bash
#PHP的配置文件的目录
phpconf=find / -name php.ini
#网站目录
wz='/usr/local/nginx/html'
#解压discuz
unzip Discuz_7.2_FULL_SC_UTF8.zip -d /usr/local/bbs
cd /usr/local/bbs
#拷贝文件到网站目录
cp -r upload/ $wz/bbs
#设置php支持
sed -i 's/short_open_tag \= Off/short_open_tag \= On/' $phpconf
#赋予论坛目录写权限
chmod -R 777 $wz/bbs/
#重启php
/etc/init.d/php-fpm restart
创建调用脚本
[root@ansible ~]# vim andiscuz.sh
#!/bin/bash
#需要安装的discuz软件包名
Discuz='Discuz_7.2_FULL_SC_UTF8.zip'
#拷贝软件包到指定服务器
ansible -i /etc/ansible/hosts web -m copy -a "src=/root/$Discuz dest=/root"
#运行discuz安装脚本
ansible -i /etc/ansible/hosts web -m script -a "/etc/ansible/discuz.sh"
运行脚本
[root@ansible ~]# sh andiscuz.sh

部署MHA
实验环境
主机配置。

配置主机名映射。
[root@mha-manager ~]# vim /etc/hosts
192.168.43.10 mha-manager
192.168.43.11 mha-master
192.168.43.12 mha-slave1
192.168.43.13 mha-slave2
配置免密认证(所有节点)
[root@mha-manager ~]# ssh-keygen -t rsa
[root@mha-manager ~]# ssh-copy-id 192.168.43.10
[root@mha-manager ~]# ssh-copy-id 192.168.43.11
[root@mha-manager ~]# ssh-copy-id 192.168.43.12
[root@mha-manager ~]# ssh-copy-id 192.168.43.13
上传软件包。
[root@mha-manager ~]# ls
mha4mysql-manager-0.57-0.el7.noarch.rpm
mha4mysql-node-0.57-0.el7.noarch.rpm
mhapath.tar.gz
Yum安装软件依赖包
安装软件依赖包
[root@mha-manager ~]# vim /etc/yum.repos.d/mhapath.repo
[mha]
name=mhapath
baseurl=file:///root/mhapath
enabled=1
gpgchack=0
[root@mha-manager ~]# tar -zxvf mhapath.tar.gz
配置本地yum
[root@mha-manager ~]# vim /etc/yum.repos.d/centos7.repo
[centos7]
name=centos7
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@mha-manager ~]# ls /etc/yum.repos.d/
centos7.repo mhapath.repo
[root@mha-manager ~]# tar -zxvf mhapath.tar.gz
[root@mha-manager ~]# mount /dev/sr0 /mnt
拷贝软件包和yum配置文件到其他节点
[root@mha-manager ~]# scp -r /etc/yum.repos.d/ 192.168.43.11:/etc/yum.repos.d/
[root@mha-manager ~]# scp -r /etc/yum.repos.d/
192.168.43.12:/etc/yum.repos.d/
[root@mha-manager ~]# scp -r /etc/yum.repos.d/ 192.168.43.13:/etc/yum.repos.d/
[root@mha-manager ~]# scp -r /root/mha4mysql-node-0.57-0.el7.noarch.rpm 192.168.43.11:/root
[root@mha-manager ~]# scp -r /root/mha4mysql-node-0.57-0.el7.noarch.rpm 192.168.43.12:/root
[root@mha-manager ~]# scp -r /root/mha4mysql-node-0.57-0.el7.noarch.rpm 192.168.43.13:/root
[root@mha-manager ~]# scp -r mhapath 192.168.43.11:/root
[root@mha-manager ~]# scp -r mhapath 192.168.43.12:/root
[root@mha-manager ~]# scp -r mhapath 192.168.43.13:/root
各个node节点安装软件依赖和软件包
[root@mha-manager ~]# yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log- Dispatch perl-Parallel-ForkManager --skip-broken -nogpgcheck
[root@mha-manager ~]# rpm -ivh mha4mysql-node-0.57-0.el7.noarch.rpm
[root@mha-slave2 ~]# cd /usr/bin
[root@mha-slave2 bin]# ll app
filter purge save
-rwxr-xr-x 1 root root 16381 5月 31 2015 apply_diff_relay_logs
-rwxr-xr-x. 1 root root 46256 6月 10 2014 filterdiff
-rwxr-xr-x 1 root root 4807 5月 31 2015 filter_mysqlbinlog
-rwxr-xr-x 1 root root 8261 5月 31 2015 purge_relay_logs
-rwxr-xr-x 1 root root 7525 5月 31 2015 save_binary_logs
安装MHA Manager
安装MHA Manger依赖的perl模块
[root@mha-manager ~]# yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN -y --nogpgcheck
安装MHA Manager软件包:
[root@mha-manager ~]# rpm -ivh mha4mysql-manager-0.57-0.el7.noarch.rpm
安装完成后会在/usr/bin目录下面生成以下脚本文件:
搭建主从复制环境
在mha-master配置主数据库服务器
配置my.cnf:
[root@mha-master ~]# vim /etc/my.cnf
log-bin=mysql-bin-master #启用二进制日志
server-id=1 #本机数据库ID 标示
binlog-ignore-db=mysql #不可以被从服务器复制的库
[root@mha-master ~]# systemctl restart mysqld
创建需要同步的数据库:
[root@mha-master ~]# mysql -uroot -p123456
[root@ mha-master ~]# mysql -uroot -p123456
mysql> create database HA;
mysql> use HA;
mysql> create table test(id int,name varchar(20));
授权
repl用户用来主从同步,root用户给MHA使用
mysql> grant replication slave on
. to repl@'192.168.43.%' identified by '123456';
mysql> grant all privileges on
. to 'root'@'192.168.43.%' identified by '123456';
mysql> flush privileges; #刷新权限
在mha-slave1配置从服务:
配置my.cnf:
[root@mha-slave1 ~]# vim /etc/my.cnf
log-bin=mysql-slave1 #启用二进制日志
server-id=2 #本机数据库ID 标示
binlog-ignore-db=mysql #不可以被从服务器复制的库
[root@mha-slave1 ~]# systemctl restart mysqld
授权
[root@mha-slave1 ~]# mysql -uroot -p123456
mysql> grant replication slave on
. to 'repl'@'192.168.43.%' identified by '123456';
mysql> grant all privileges on
.* to 'root'@'192.168.43.%' identified by '123456';
mysql> flush privileges; #刷新权限
建立主从关系
mysql> stop slave;
mysql> change master to master_host='192.168.43.11',master_user='repl',master_password='123456';
mysql> start slave;
mysql> show slave status\G
s

在mah-slave2配置从服务:
配置my.cnf:
[root@mha-slave2 ~]# vim /etc/my.cnf
log-bin=mysql-slave1 #启用二进制日志
server-id=3 #本机数据库ID 标示
binlog-do-db=HA #可以被从服务器复制的库。二进制需要同步的数据库名
log_slave_updates=1 #只有开启log_slave_updates,从库binlog才会记录主库同步的操作日志
[root@mha-slave2 ~]# systemctl restart mysqld
[root@ mha-slave2~]# mysql -uroot -p123456
mysql> grant replication slave on . to 'repl'@'192.168.43.%' identified by '123456';
mysql> grant all privileges on . to 'root'@'192.168.43.%' identified by '123456';
mysql> flush privileges; #刷新权限
建立主从关系
mysql> stop slave;
mysql> change master to master_host='192.168.43.11',master_user='repl',master_password='123456';
mysql> start slave;
mysql> show slave status\G

两台slave服务器设置read_only
从库对外提供读服务,只所以没有写进配置文件,是因为slave随时会提升为master
[root@mha-slave1 ~]# mysql -uroot -p123456 -e 'set global read_only=1
[root@mha-slave2 ~]# mysql -uroot -p123456 -e 'set global read_only=1
设置relay log的清除方式(在每个slave节点上)
[root@mha-slave1 ~]# mysql -uroot -p123456 -e 'set global relay_log_purge=0'
[root@mha-slave2 ~]# mysql -uroot -p123456 -e 'set global relay_log_purge=0'
配置MHA
创建MHA的工作目录,并且创建相关配置文件
[root@mha-manager ~]# mkdir -p /etc/masterha
[root@mha-manager ~]# mkdir -p /var/log/masterha/app1
[root@mha-manager ~]# vim /etc/masterha/app1.cnf
[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
master_binlog_dir=/usr/local/mysql/data #自己mysql的data目录,三个主从的data目录要一致
password=123456
remote_workdir=/tmp
repl_password=123456
repl_user=repl
[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
master_binlog_dir=/data/mysql/data
password=123456
remote_workdir=/tmp
repl_password=123456
repl_user=repl
ssh_user=root
user=root
master_ip_failover_script=/usr/bin/master_ip_failover #开启脚本

[server1]
hostname=192.168.43.11
port=3306

[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.43.12
port=3306

[server3]
hostname=192.168.43.13
port=3306
编写脚本/usr/bin/master_ip_failover,要会perl脚本语言
[root@mha-manager ~]# vim /usr/bin/master_ip_failover
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';

use Getopt::Long;

my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);

my $vip = '192.168.43.110/24';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";

GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,
);

exit &main();

sub main {

print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";if ( $command eq "stop" || $command eq "stopssh" ) {    my $exit_code = 1;    eval {        print "Disabling the VIP on old master: $orig_master_host \n";        &stop_vip();        $exit_code = 0;    };    if ($@) {        warn "Got Error: $@\n";        exit $exit_code;    }    exit $exit_code;}elsif ( $command eq "start" ) {    my $exit_code = 10;    eval {        print "Enabling the VIP - $vip on the new master - $new_master_host \n";        &start_vip();        $exit_code = 0;    };    if ($@) {        warn $@;        exit $exit_code;    }    exit $exit_code;}elsif ( $command eq "status" ) {    print "Checking the Status of the script.. OK \n";    #`ssh $ssh_user\@cluster1 \" $ssh_start_vip \"`;    exit 0;}else {    &usage();    exit 1;}

}
[root@mha-manager ~]# chmod +x /usr/bin/master_ip_failover

设置VIP地址(master)
[root@mha-master ~]# ifconfig ens33:1 192.168.43.110 netmask 255.255.255.0 up
检查SSH配置
[root@mha-manager ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf

检查整个集群复制环境状况
[root@ mha-manager ~]# rm -rf /var/log/masterha/app1/app1.master_status.health

[root@mha-manager ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf


需要做软连接:ln-s /usr/local/mysql/bin/* /usr/local/bin

开启MHA Manager监控
[root@ mha-manager ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf \
--remove_dead_master_conf --ignore_last_failover < /dev/null > \
/var/log/masterha/app1/manager.log 2>&1 &
[1] 22627
查看MHA Manager监控是否正常
[root@mha-manager ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:23108) is running(0:PING_OK), master:192.168.43.11
查看启动状态
[root@mha-manager ~]# tail -n20 /var/log/masterha/app1/manager.log

打开新窗口观察日志
[root@mha-manager ~]# tail -f /var/log/masterha/app1/manager.log
ceph集群
环境准备:

前三台服务器添加一块20G的硬盘
关闭selinux,关闭防火墙:(所有节点)
systemctl stop firewalld #关闭防火墙
setenforce 0 #关闭防护
配置hosts文件:(所有节点)
vim /etc/hosts
192.168.43.40 ceph0
192.168.43.41 ceph2
192.168.43.43 ceph3
192.168.43.44 ceph4

配置ssh免密登录(管理节点)
ssh-keygen #一直回车,不设密
ssh-copy-id ceph0
ssh-copy-id ceph2
ssh-copy-id ceph3
ssh-copy-id ceph4

上传软件包并解压
[root@ceph0 ~]# tar -zxvf ceph-12.2.12.tar.gz

yum源配置:
[root@ceph0 ~]# mount /dev/cdrom /mnt #挂载光盘
[root@ceph0 ~]# vim /etc/yum.repos.d/a.repo
[a]
name=a
baseurl=file:///mnt/
gpgcheck=0
enable=1

[root@ceph0 ~]# vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=file:///root/ceph
enabled=1
gpgcheck=0
复制ceph软件包和相关文件到cong12,cong13:
[root@ceph0 ~]# scp -r ceph ceph2:/root
[root@ceph0 ~]# scp -r ceph ceph3:/root
[root@ceph0 ~]# scp -r /etc/yum.repos.d/ceph.repo ceph2:/etc/yum.repos.d/
[root@ceph0 ~]# scp -r /etc/yum.repos.d/ceph.repo ceph3:/etc/yum.repos.d/
在ceph0,ceph2,ceph3上部署ceph,安装依赖工具:
[root@ceph0 ~]# yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs
Ceph0的部署:
创建monitor服务:
同时在ceph2,ceph3上部署mon,实现高可用
[root@ceph0 ~]# cd /etc/ceph/
[root@ceph0 ceph]# ceph-deploy new ceph0

修改副本数:
[root@ceph0 ceph]# cd /etc/ceph/
[root@ceph0 ceph]# vim ceph.conf
[global]
fsid = 73d389f3-b720-453f-a50b-fde0f69a0eb3
mon_initial_members = ceph0
mon_host = 192.168.43.40
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2 #添加到末行
安装ceph monitor:
[root@ceph0 ceph]# ceph-deploy mon create ceph0
收集节点的keyring文件:
[root@ceph0 ceph]# ceph-deploy gatherkeys ceph0
[root@ceph0 ceph]# ls

[root@ceph0 ceph]# cat ceph.client.admin.keyring
[client.admin]
key = AQCrAENd5+FbNxAAtWNYcU0KNMMN/xahK7uu8A==
部署osd服务:
使用ceph自动分区:
[root@ceph0 ceph]# ceph-deploy disk zap ceph0 /dev/sdb
[root@ceph0 ceph]# ceph-deploy disk zap ceph2 /dev/sdb
[root@ceph0 ceph]# ceph-deploy disk zap ceph3 /dev/sdb
添加osd节点:
[root@ceph0 ceph]# ceph-deploy osd create ceph0 --data /dev/sdb
[root@ceph0 ceph]# ceph-deploy osd create ceph2 --data /dev/sdb
[root@ceph0 ceph]# ceph-deploy osd create ceph3 --data /dev/sdb

查看状态:
[root@ceph0 ceph]# ceph-deploy osd list ceph0 ceph2 ceph3

部署mgr管理服务
[root@ceph0 ceph]# ceph-deploy mgr create ceph0

统一集群配置
[root@ceph0 ceph]# ceph-deploy admin ceph0 ceph2 ceph3 ceph4

如果ceph4报错在ceph4里加入[root@ceph4 ~]# mkdir /etc/ceph
各个节点修改ceph.client.admin.keyring权限
[root@ceph0 ceph]# chmod +r /etc/ceph/ceph.client.admin.keyring
[root@ceph2 ~]# chmod +r /etc/ceph/ceph.client.admin.keyring
[root@ceph3 ~]# chmod +r /etc/ceph/ceph.client.admin.keyring
[root@ceph4 ~]# chmod +r /etc/ceph/ceph.client.admin.keyring
部署mds服务
安装mds
[root@ceph0 ceph]# ceph-deploy mds create ceph2 ceph3
查看mds服务
[root@ceph0 ceph]# ceph mds stat
, 2 up:standby
查看集群状态
[root@ceph0 ceph]# ceph -s

创建ceph文件系统
创建之前查看文件系统
[root@ceph0 ceph]# ceph fs ls
No filesystems enabled
创建存储池
[root@ceph0 ceph]# ceph osd pool create cephfs_data 128
pool 'cephfs_data' created
[root@ceph0 ceph]# ceph osd pool create cephfs_metadata 128
pool 'cephfs_metadata' created
创建文件系统
[root@ceph0 ceph]# ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1
查看ceph文件系统
[root@ceph0 ceph]# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
查看mds节点状态
[root@ceph0 ~]# ceph mds stat
cephfs-1/1/1 up {0=ceph3=up:active}, 1 up:standby
内核驱动挂载Ceph文件系统
创建挂载点
[root@ceph4 ~]# mkdir /media/aa
[root@ceph0 ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQAzN0NdWGpaJxAAyulOHB/+r2OH55yEm2w1NA==
使用密钥挂载
[root@ceph4 ~]# mount -t ceph 192.168.43.41:/ /media/aa -o name=admin,secret=AQAzN0NdWGpaJxAAyulOHB/+r2OH55yEm2w1NA==
[root@ceph0 ~]# df -h
使用密钥文件挂载
拷贝ceph软件包和yum配置文件到cong14
[root@ceph0 ~]# scp -r ceph ceph4:/root
[root@ceph0 ~]# scp -r ceph ceph4:/rootscp /etc/yum.repos.d/ceph-package.repo ceph4:/etc/yum.repos.d/
安装ceph-common-12.2.12
[root@ceph4 ~]# yum install -y ceph-common-12.2.12
创建密钥文件
[root@ceph5~]# vim /etc/ceph/admin.secret
key = AQAzN0NdWGpaJxAAyulOHB/+r2OH55yEm2w1NA==
RBD的使用
检测liunx内核是否支持RBD
[root@ceph0 ~]# modprobe rbd
创建rbd存储池
[root@ceph0 ~]# ceph osd pool create rbd 64
pool 'rbd' created
创建指定大小的块设备
[root@ceph0 ~]# rbd create --size 102400 rbd/test1
查看test1信息
[root@ceph0 ~]# rbd info test1

映射进内核
[root@ceph0 ~]# rbd feature disable test1 object-map fast-diff deep-flatten exclusive-lock
[root@ceph0 ~]# rbd map test1
/dev/rbd0
[root@ceph0 ~]# ls /dev/rbd0
/dev/rbd0
挂载使用
[root@ceph0 ~]# mkdir /media/cephrbd
格式化分区
[root@ceph0 ~]# mkfs.xfs /dev/rbd0
挂载
[root@ceph0 ~]# mount /dev/rbd0 /media/cephrbd/

Nginx+apache动静分离
部署nginx
上传所需软件包并解压到指定目录,需要用到rz命令安装一下。(nginx1)
[root@nginx1 ~]# yum -y install lrzsz
[root@nginx1 ~]# rz
[root@nginx1 ~]# ls

[root@nginx1 ~]# tar -zxf nginx-1.10.3.tar.gz -C /usr/local/src/

隐藏版本号
[root@nginx1 ~]# cd /usr/local/src/nginx-1.10.3/ //进入到解压目录
[root@nginx1 nginx-1.10.3]# vim src/core/nginx.h //修改标红处
[root@nginx1 nginx-1.10.3]# vim src/http/ngx_http_header_filter_module.c //修改标红处,防止回显

安装nginx依赖包
[root@nginx1 nginx-1.10.3]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-deve
预编译
[root@nginx1 nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre
编译安装
[root@nginx1 nginx-1.10.3]# make && make install
启动查看nginx端口
[root@nginx1 ~]# /usr/local/nginx/sbin/nginx
[root@nginx1 ~]# netstat -antup | grep 80
查看版本号,进行网页测试
[root@nginx1 ~]# curl -I 192.168.43.31

修改 nginx运行账号
[root@nginx1 ~]# ps -ef | grep nginx

[root@nginx1 ~]# useradd -M -s /sbin/nologin nginx //创建nginx账号
[root@nginx1 ~]# vim /usr/local/nginx/conf/nginx.conf //修改标红处

[root@nginx1 ~]# ln -s /usr/local/nginx/sbin/* /usr/local/bin/ //设置软连接
[root@nginx1 ~]# nginx -s reload //重载nginx
[root@nginx1 ~]# ps -aux | grep nginx //查看nginx运行账号

生成nginx启动脚本
[root@nginx1 ~]# vim /etc/init.d/nginx
#!/bin/bash

chkconfig: - 99 2

description: Nginx Service Control Script

PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -3 $(cat $PIDF)
;;
restart)
$0 stop &> /dev/null
if [ $? -ne 0 ] ; then continue ; fi
$0 start
;;
reload)
kill -1 $(cat $PIDF)
;;
)
echo "Userage: $0 { start | stop | restart | reload }"
exit 1
esac
exit 0
[root@nginx1 ~]# chmod +x /etc/init.d/nginx //给脚本可执行权限
配置服务开机自启动
[root@nginx1 ~]# chkconfig --add nginx //把脚本添加为系统服务
[root@nginx1 ~]# chkconfig nginx on //把nginx添加为开机自启
[root@nginx1 ~]# chkconfig --list nginx //查看开机启动项
部署apache(两台都需要)
上传所需软件包并解压到指定目录
[root@apache1 ~]# rz
[root@apache1 ~]# ls

[root@apache1 ~]# tar -zxf httpd-2.4.38.tar.gz -C /usr/local/src/
隐藏版本信息
[root@apache1 ~]# cd /usr/local/src/httpd-2.4.38/ //进入到解压目录
[root@apache1 httpd-2.4.38]# vim include/ap_release.h //修改标红处

安装apache依赖包
[root@apache1 httpd-2.4.38]# yum -y install gcc gcc-c++ apr apr-devel cyrus-sasl-devel expat-devel libdb-devel openldap-devel apr-util-devel apr-util pcre-devel pcre openssl

如果有就删除之前的httpd
[root@apache1 httpd-2.4.38]# yum -y remove httpd
预编译&编译安装
[root@apache1 httpd-2.4.38]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-ssl --enable-mpms-shared=all
[root@apache1 httpd-2.4.38]# make && make install
修改主配置文件,加快apache重启速度
[root@apache1 httpd-2.4.38]# vim /usr/local/httpd/conf/httpd.conf //修改标红处

设置apache启动脚本
[root@apache1 httpd-2.4.38]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
拷贝脚本到init.d/httpd下
[root@apache1 httpd-2.4.38]# vim /etc/init.d/httpd //在第一行下添加以下内容
#chkconfig: 2345 11 88
#despriction: Web Site
[root@apache1 httpd-2.4.38]# ll /etc/init.d/httpd //查看脚本权限,如果没有权限添加可执行权限

设置脚本开机自启动
[root@apache1 httpd-2.4.38]# chkconfig --add httpd
[root@apache1 httpd-2.4.38]# chkconfig --list httpd //查看开机启动项
启动服务,设置软连接
[root@apache1 httpd-2.4.38]# systemctl start httpd
[root@apache1 httpd-2.4.38]# ln -s /usr/local/httpd/bin/* /usr/local/bin/
插卡版本号,进行访问网页测试
[root@apache1 httpd-2.4.38]# curl -I 192.168.43.33


修改apache运行账号
[root@apache1 ~]# ps -axu | grep httpd

创建apache用户
[root@apache1 ~]# useradd -M -s /sbin/nologin apache
编辑配置文件,修改默认用户
[root@apache1 ~]# vim /usr/local/httpd/conf/httpd.conf //修改以下内容

重启httpd服务,查看运行账号
[root@apache1 ~]# systemctl restart httpd
[root@apache1 ~]# ps -axu | grep httpd
在apache上搭建php
上传libmcrypt,php软件包并解压到指定目录下
[root@apache1 ~]# rz
[root@apache1 ~]# ls

安装php依赖包
[root@apache1 ~]# yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf freetype gd libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel re2c libmcrypt-devel freetype-devel libjpeg-devel bzip2-devel
[root@apache1 ~]# tar -zxf php-5.6.36.tar.gz -C /usr/local/src/
[root@apache1 ~]# tar -zxf libmcrypt-2.5.7.tar.gz
进入到libmcrypt解压目录下,编译及安装
[root@apache1 ~]# cd libmcrypt-2.5.7/
[root@apache1 libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install
PHP预编译
[root@apache1 libmcrypt-2.5.7]# cd /usr/local/src/php-5.6.36/
[root@apache1 php-5.6.36]# ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/usr/local/php5.6/etc/ --with-bz2 --enable-maintainer-zts --with-apxs2=/usr/local/httpd/bin/apxs
编译及安装
[root@apache1 php-5.6.36]# make
[root@apache1 php-5.6.36]# make install
生成配置文件
[root@apache1 php-5.6.36]# cp php.ini-production /usr/local/php5.6/etc/php.ini
添加apache支持php模块
[root@apache1 ~]# vim /usr/local/httpd/conf/httpd.conf

AddType application/x-httpd-php .php .phtml
创建php测试页面,mysql连接页面
[root@apache1 ~]# vim /usr/local/httpd/htdocs/index.php
phpinfo();
?>
[root@apache1 ~]# vim /usr/local/httpd/htdocs/test.php
$link=mysql_connect('192.168.43.110','root','123456');
if ($link)echo "connection success......";
mysql_close();
?>
重启httpd服务,网页测试
[root@apache1 ~]# systemctl restart httpd
http://192.168.43.33/

Apache2和apache1配置相同
配置nginx负载均衡
修改nginx主配置文件
[root@nginx1 ~]# vim /usr/local/nginx/conf/nginx.conf //修改以下内容
注:在gzip on上面添加以下内容
upstream apache {
server 192.168.43.33 weight=1;
server 192.168.43.34 weight=1;
}
注:把47,48行注释在下面添加两行
proxy_pass http://apache;
proxy_redirect default;
重启nginx服务器,,在apache编辑测试文件,访问网页测试
[root@apache1 ~]# vim /usr/local/httpd/htdocs/index.php
php1
[root@nginx1 ~]# nginx -s reload
http://192.168.43.31/

配置nginx动静分离
修改nginx配置文件
[root@nginx1 ~]# vim /usr/local/nginx/conf/nginx.conf
添加以.php结尾的网页交给apache处理的模块
location ~ .(php)$ {
proxy_pass http://apache;
}

添加静态缓存模块
location ~ .*.(css|jss|ico|png|jpg|eot|svg|ttf|woff|htm|html|gif|jp eg|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
root html ;
expires 30d;
}

[root@nginx1 ~]# nginx -s reload
测试动静分离
在nginx服务器的网页目录下上传图片
[root@nginx1 ~]# cd /usr/local/nginx/html/

把nginx上的图片删掉在apache服务器的网页目录下上传
[root@apache1 ~]# cd /usr/local/httpd/htdocs/

搭建discuz论坛(在apache)
上传discuz软件包,并解压到指定目录下
[root@apache1 ~]# rz

[root@apache1 ~]# unzip Discuz_7.2_FULL_SC_UTF8.zip -d /usr/local/bbs
拷贝论坛到网站根目录下
[root@apache1 ~]# cd /usr/local/bbs/ //进入到解压目录
[root@apache1 bbs]# cp -r upload/ /usr/local/httpd/htdocs/bbs
修改php.ini文件
[root@apache1 bbs]# cd /usr/local/php5.6/etc/
[root@apache1 etc]# vim php.ini //编辑配置文件

给网页目录下的bbs777权限
[root@apache1 ~]# chmod -R 777 /usr/local/httpd/htdocs/bbs/
重启httpd,打开网页安装discuz
[root@apache1 etc]# systemctl restart httpd
http://192.168.43.33/bbs/install/index.php


把apache上的/usr/local/bbs/和/ust/local/httpd/htdos/bbs传到nginx上
[root@apache1 ~]# scp -r /usr/local/bbs/ 192.168.43.31:/usr/local/
[root@apache1 ~]# scp -r /usr/local/httpd/htdocs/bbs/ 192.168.43.31:/usr/local/nginx/html
Apache2和apache1配置相同
Nginx优化
设置nginx运行进程个数
查看cup个数
[root@nginx1 ~]# top 按数字1可以查看到cup数量
在nginx配置文件修改cpu个数

[root@nginx1 ~]# nginx -s reload //重载nginx
查看nginx运行个数
[root@nginx1 ~]# ps -aux | grep nginx

Nginx运行cpu亲和力4核4线程配置
[root@nginx1 ~]# vim /usr/local/nginx/conf/nginx.conf

设置nginx最大打开文件数
[root@nginx1 ~]# vim /usr/local/nginx/conf/nginx.conf //添加以下内容
rker_rlimit_nofile 102400;

修改系统最大打开文件数
临时修改:
[root@nginx1 ~]# ulimit -n 102400
[root@nginx1 ~]# ulimit -n
http主体优化
开启高效传输模式
[root@nginx1 ~]# vim /usr/local/nginx/conf/nginx.conf //修改配置文件

连接超时时间
[root@nginx1 ~]# vim /usr/local/nginx/conf/nginx.conf //添加以下内容
tcp_nodelay on;
client_header_timeout 15;
client_body_timeout 15;
send_timeout 15;
Fastcgi调优
[root@nginx1 ~]# vim /usr/local/nginx/conf/nginx.conf //在httpd标签中添加以下内容
36 fastcgi_connect_timeout 300;
37 fastcgi_send_timeout 300;
38 fastcgi_read_timeout 300;
39 fastcgi_buffer_size 64k;
40 fastcgi_buffers 4 64k;
41 fastcgi_busy_buffers_size 128k;
42 fastcgi_temp_file_write_size 128k;
43 #fastcgi_temp_path /data/ngx_fcgi_tmp;
44 fastcgi_cache_path /data/ngx_fcgi_cache levels=2:2
45 keys_zone=ngx_fcgi_cache:512m
46 inactive=1d max_size=40g;
在server location标签添加以下内容
77 location ~ ..(php|php5)?$
78 {
79 fastcgi_pass 127.0.0.1:9000;
80 fastcgi_index index.php;
81 include fastcgi.conf;
82 fastcgi_cache ngx_fcgi_cache;
83 fastcgi_cache_valid 200 302 1h;
84 fastcgi_cache_valid 301 1d;
85 fastcgi_cache_valid any 1m;
86 fastcgi_cache_min_uses 1;
87 fastcgi_cache_use_stale error timeout invalid_header http_500;
88 fastcgi_cache_key http://$host$request_uri;
89 }
检测配置文件,重启
[root@nginx1 ~]# mkdir /data
[root@nginx1 ~]# nginx -t
重启nginx服务
[root@nginx1 ~]# systemctl restart nginx
Gzip调优
启用gzip
[root@nginx1 ~]# vim /usr/local/nginx/conf/nginx.conf
gzip on; 开启这一项
gzip_min_length 1k;
gzip_buffers 4 32k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types text/css text/xml application/javascript;
gzip_vary on;
拷贝测试文件
[root@nginx1 ~]# cp /etc/passwd /usr/local/nginx/html/passwd.html
测试

日志切割优化
创建日志切割脚本
[root@nginx1 ~]# cd /usr/local/nginx/logs/
[root@nginx1 logs]# vim cut_nginx
log.sh
#!/bin/bash
date=$(date +%F -d -1day)
cd /usr/local/nginx/logs
if [ ! -d cut ] ; then
mkdir cut
fi
mv access.log cut/access$(date +%F -d -1day).log
mv error.log cut/error_$(date +%F -d -1day).log
/usr/local/nginx/sbin/nginx -s reload
tar -jcvf cut/$date.tar.bz2 cut/
rm -rf cut/access && rm -rf cut/error
find -type f -mtime +10 | xargs rm -rf
给脚本添加可执行权限
[root@nginx1 logs]# chmod +x cut_nginx_log.sh
添加计划任务
[root@nginx1 logs]# cat >>/var/spool/cron/root<

00 00 /bin/sh /usr/local/nginx/logs/cut_nginx_log.sh >/dev/null 2>&1
eof
执行脚本,查看结果
[root@nginx1 logs]# sh cut_nginx_log.sh
[root@nginx1 logs]# ls /usr/local/nginx/logs/cut

去掉不需要的日志统计
[root@nginx1 ~]# vim /usr/local/nginx/conf/nginx.conf //添加以下内容
location ~ .
.(js|jpg|jpeg|JPG|JPEG|css|bmp|gif|GIF)$ {
access_log off;
}
日志格式优化
[root@nginx1 ~]# vim /usr/local/nginx/conf/nginx.conf //去掉注释

LVS+Keepalived负载群集
LVS环境安装配置(lvs1/lvs2)
安装ipvsadm工具
[root@lvs1 ~]# yum -y install ipvsadm
[root@lvs2 ~]# yum -y install ipvsadm
Keepalived环境安装配置
安装keepalived
[root@lvs1 ~]# yum -y install keepalived
[root@lvs2 ~]# yum -y install keepalived

Keepalived配置
LVS1配置
[root@lvs1 ~]# cd /etc/keepalived/ #进入keepalived安装目录
[root@lvs1 keepalived]# cp keepalived.conf keepalived.conf.bak #备分keepalived主配置文件
[root@lvs1 keepalived]# vim keepalived.conf #修改LVS1配置文件
! Configuration File for keepalived

global_defs {
router_id LVS_01
}

vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.43.100
}
}

virtual_server 192.168.43.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP

real_server 192.168.43.31 80 {    weight 1    TCP_CHECK {        connect_port 80        connect_timeout 3        nb_get_retry 3        delay_before_retry 3    }}real_server 192.168.43.32 80 {    weight 1    TCP_CHECK {        connect_port 80        connect_timeout 3        nb_get_retry 3        delay_before_retry 3    }}

}
LVS2配置
[root@lvs2 ~]# cd /etc/keepalived/ #进入keepalived安装目录
[root@lvs2 keepalived]# cp keepalived.conf keepalived.conf.bak #备份keepalived主配置文件
[root@lvs2 keepalived]# vim keepalived.conf #修改主配置文件
! Configuration File for keepalived

global_defs {
router_id LVS_02
}

vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.43.100
}
}

virtual_server 192.168.43.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP

real_server 192.168.43.31 80 {    weight 1    TCP_CHECK {        connect_port 80        connect_timeout 3        nb_get_retry 3        delay_before_retry 3    }}real_server 192.168.43.32 80 {    weight 1    TCP_CHECK {        connect_port 80        connect_timeout 3        nb_get_retry 3        delay_before_retry 3    }}

}

启动keepalived
[root@lvs1 ~]# systemctl start keepalived
[root@lvs2 ~]# systemctl start keepalived
查看VIP
[root@lvs1 ~]# ip addr

[root@lvs2 ~]# ip addr

测试keepalived故障转移
[root@lvs1 ~]# systemctl stop keepalived #关闭主keepalived
[root@lvs1 ~]# ip addr #查看IP

Real server(web 服务器)绑定 VIP
在两台nginx服务器上做相同的配置
在回环口绑定vip地址
[root@nginx1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.43.100
NETMASK=255.255.255.255
ONBOOT=yes
[root@nginx1 ~]# systemctl restart network
[root@nginx1 ~]# ifconfig

添加VIP本地路由,下一跳为自己
[root@nginx1 ~]# route add -host 192.168.43.100 dev lo:0
[root@nginx1 ~]# vim /etc/rc.local #添加开机自动执行

调整ARP响应
[root@nginx1 ~]# vim /etc/sysctl.conf #修改内核文件
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@nginx1 ~]# sysctl -p #重载内核文件

测试使用VIP访问网页
http://192.168.43.100/

192.168.43.100

elk+kafka引入消息队列

上传软件包
[root@elk ~]# rz

[root@elk ~]# lselasticsearch-6.4.2.tar.gz
elasticsearch-head-master.zip jdk-8u171-linux-x64.tar.gz kibana-6.4.2-linux-x86_64.tar.gz logstash-6.4.2.zip node-v4.9.1-linux-x64.tar.gz
安装JDK
[root@elk ~]# tar zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
[root@elk ~]# vim /etc/profile //配置环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_171
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@elk ~]# source /etc/profile
[root@elk ~]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
安装elasticsearch
[root@elk ~]# tar -zxf elasticsearch-6.4.2.tar.gz -C /usr/local/
1、由于Elasticsearch不能用root启用,创建一个授权用户
2、Elasticsearch需要对系统文件的最大打开书为65536
3、Elasticsearch要求最大线程数不低于2048
4、Elasticsearch要求虚拟内存数不少于262144
创建用户
[root@elk ~]# useradd elk
[root@elk ~]# chown -Rf elk:elk /usr/local/elasticsearch-6.4.2
修改系统参数
[root@elk ~]# vim /etc/security/limits.conf
在文件末尾添加:
#修改最大打开文件数

  • hard nofile 65536
  • soft nofile 65536

    修改最大进程数

  • soft nproc 4096
  • hard nproc 4096
    [root@elk ~]# vim /etc/sysctl.conf
    文件末尾添加:
    vm.max_map_count=655360
    [root@elk ~]# sysctl -p //生成系统配置文件

启动elasticsearch
[root@elk ~]# su elk
[elk@elk root]$ cd /usr/local/elasticsearch-6.4.2/
[elk@elk elasticsearch-6.4.2]$ vim config/elasticsearch.yml
确保下列参数被正确设置:
cluster.name: gsp # ES集群的名字
node.name: node-1 # 该节点名
path.data: /usr/local/elasticsearch-6.4.2/data # 存放日志数据目录
path.logs: /usr/local/elasticsearch-6.4.2/log # elasticsearch自己的日志目录,以上两个目录一定要让工作用户有写入权限
network.host: 0.0.0.0 # 支持远程访问
http.port: 9200 # restful api访问接口
http.cors.enabled: true #允许ES head跨域访问,添加
http.cors.allow-origin: "*" #允许ES head跨域访问,添加
[elk@elk elasticsearch-6.4.2]$ vim config/jvm.options
修:
-Xms1g
-Xmx1g
改为:
-Xms256m
-Xmx256m
[elk@elk elasticsearch-6.4.2]$ mkdir -p data logs/ ////因为当前是工作用户,所以创建的文件夹就有写权限
[elk@elk elasticsearch-6.4.2]$ ./bin/elasticsearch &
[elk@elk elasticsearch-6.4.2]$ jps -m
1556 Elasticsearch
1594 Jps -m
测试
[elk@elk elasticsearch-6.4.2]$ curl 192.168.43.80:9200

安装ElasticSearch-head(可略)
作为elasticsearch的web控制台,若要做elasticsearch群集时极其有用
[root@elk ~]# tar -zxf node-v4.9.1-linux-x64.tar.gz -C /usr/local/
[root@elk ~]# vim /etc/profile //添加环境变量
export NODE_HOME=/usr/local/node-v4.9.1-linux-x64
PATH=$NODE_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
export NODE_PATH=$NODE_HOME/lib/node_modules
export PATH
[root@elk ~]# unzip elasticsearch-head-master.zip
[root@elk ~]# cd elasticsearch-head-master
联网并输入:
[root@elk elasticsearch-head-master]# npm config set registry https://registry.npm.taobao.org
[root@elk elasticsearch-head-master]# npm install
[root@elk elasticsearch-head-master]# vim Gruntfile.js
如果只是本机访问,下面的配置修改不是必须的。如果要其他机器访问,则需要修改,一般来说,只要是服务器应用,都是通过远程访问的

安装Logstash
[root@elk ~]# unzip logstash-6.4.2.zip -d /usr/local/
[root@elk ~]# cd /usr/local/logstash-6.4.2/config
生成配置文件:
[root@elk config]# cp logstash-sample.conf logstash.conf
[root@elk config]# vim logstash.conf
input {
file {
path => "/var/log/messages" # 收集来源,即日志位置
start_position => "beginning" # 从哪里开始监控,beginning表示从logstash进程开始时监控(常用beginning)
}
}

filter { # 日志过滤规则
if [path] =~ "access" {
mutate { replace => { "type" => "apache_access" } }
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] # 格式化日志时间,否则可能会出现日志时间不对
}
}

output {
elasticsearch {
hosts => ["192.168.43.80:9200"] //IP地址是elasticsearch地址
index =>"logstash-var-massages-%{+YYYY.MM.dd}" # 索引名称,在kibana上会搜索此索引名来显示收集的日志
}
stdout { codec => rubydebug } # 输出到当前终端
}
*取消所有注释
官方参考文档页:https://www.elastic.co/guide/en/logstash/current/index.html
[root@elk config]# cd .. //返回上一级目录
[root@elk logstash-6.4.2]# nohup ./bin/logstash -f ./config/logstash.conf & //#在后台启动,并将输出的信息导入nohup.out中
[root@elk logstash-6.4.2]# tail -F nohup.out

安装kibana
解压安装包
[root@elk ~]# tar -zxf kibana-6.4.2-linux-x86_64.tar.gz -C /usr/local/
编译配置文件
[root@elk ~]# cd /usr/local/kibana-6.4.2-linux-x86_64/config
[root@elk config]# vim kibana.yml
修改:
server.port: 5601 #自己的监听端口
server.host: "192.168.43.80" # 自己的IP地址
elasticsearch.url: "http://192.168.43.30:9200" # 这里为elasticsearch的IP地址及其端口
启动服务
[root@elk~]#/usr/local/kibana-6.4.2-linux-x86_64/bin/kibana &
测试
192.168.43.80:5601

在这里可以看到我们在logstash上配置文件的索引名,Kibana使用的是通配符规则校验索引名:

这里结合官方文档,根据实际需求自定义编辑即可:

点击左侧的Discover,可以看到我们收集的日志


这通常是由于默认的查询时间范围太短的原因,可以通过右上角的TimeRange来设置查询的时间范围。

到这里,ELK的环境搭建与基本配置就完成了。
更多的配置与优化参见官方文档https://www.elastic.co/guide/index.html
在被收集端安装Filebeat,实现与Logstash对接
这里收集nginx日志,ELK+Kafka参照下文
上传软件包
[root@filebeat ~]# rz
解压软件包
[root@filebeat ~]# tar -zxf filebeat-6.4.2-linux-x86_64.tar.gz -C /usr/local/
安装jdk
[root@filebeat ~]# tar zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
[root@filebeat ~]# vim /etc/profile //配置环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_171
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@filebeat ~]# source /etc/profile
[root@filebeat ~]# java -version

安装logstash
[root@filebeat ~]# unzip logstash-6.4.2.zip -d /usr/local/
[root@filebeat ~]# cd /usr/local/logstash-6.4.2/config
生成配置文件:
[root@filebeat config]# cp logstash-sample.conf logstash.conf
[root@filebeat config]# vim logstash.conf
input {
file {
path => "/var/log/messages" # 收集来源,即日志位置
start_position => "beginning" # 从哪里开始监控,beginning表示从logstash进程开始时监控(常用beginning)
}
}

filter { # 日志过滤规则
if [path] =~ "access" {
mutate { replace => { "type" => "apache_access" } }
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] # 格式化日志时间,否则可能会出现日志时间不对
}
}

output {
elasticsearch {
hosts => ["192.168.43.80:9200"]
index =>"filebeat-var-massages-%{+YYYY.MM.dd}" # 索引名称,在kibana上会搜索此索引名来显示收集的日志
}
stdout { codec => rubydebug } # 输出到当前终端
}
*取消所有注释
官方参考文档页:https://www.elastic.co/guide/en/logstash/current/index.html
[root@filebeat config]# cd .. //返回上一级目录
[root@filebeat logstash-6.4.2]# nohup ./bin/logstash -f ./config/logstash.conf & //#在后台启动,并将输出的信息导入nohup.out中
[root@filebeat logstash-6.4.2]# tail -F nohup.out
编译配置文件
[root@filebeat ~]# cd /usr/local/filebeat-6.4.2-linux-x86_64/
[root@filebeat filebeat-6.4.2-linux-x86_64]# vim filebeat.yml
修改如下内容:

  • type: log
    enabled: true # 默认为开启
    paths:
  • "/usr/local/nginx/logs/*.log"

    官方建议一个服务应用到一个日志收集流中

    scan_frequency: 60

  • type: log # 对于不同的日志内容类型,需要重新再定义一个日志流
    Paths:
  • /var/log/messages
    scan_frequency: 60
    output.logstash: # 在配置文件查找"output.logstash",因为filebeat已经定义了input和output配置范围,否则可能会报错
    hosts: ["192.168.43.80:5044"] # logstash的IP地址及其端口号
    配置Logstash上的配置文件
    [root@filebeat ~]# cd /usr/local/logstash-6.4.2/
    [root@filebeat logstash-6.4.2]# vim config/nginxconf.conf
    input {
    beats {
    port => 5044
    }
    }

output {
elasticsearch {
hosts => ["http://192.168.43.80:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"}
}
[root@filebeat logstash-6.4.2]# jps -m //杀死原来进程
22257 Logstash -f ./config/logstash.conf
22332 Jps -m
[root@filebeat logstash-6.4.2]# kill -9 22257
[root@filebeat logstash-6.4.2]# nohup ./bin/logstash -f ./config/nginxlog.conf &
[root@filebeat logstash-6.4.2]# tail -F nohup.out
开启filebeat进程
[root@filebeat logstash-6.4.2]# ./filebeat -e -c filebeat.yml &
验证





能够看到收集过来的日志即可成功!!!
引入消息队列ELK+kafka
安装nginx
上传软件包
[root@logstash ~]# ls

[root@logstash ~]# tar -zxvf nginx-1.10.3.tar.gz -C /usr/local/src/
[root@logstash ~]# cd /usr/local/src/nginx-1.10.3/
安装nginx依赖包
[root@logstash nginx-1.10.3]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
预编译
[root@logstash nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre
编译安装
[root@logstash nginx-1.10.3]# make -j 4 && make install
启动nginx
[root@logstash nginx-1.10.3]# /usr/local/nginx/sbin/nginx
查看端口号
[root@logstash nginx-1.10.3]# netstat -antup | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 24471/nginx: master
nginx上安装logstash(安装zookeeper+kafka)
安装zookeeper
[root@logstash ~]# ls
kafka_2.12-2.2.0.tgz apache-zookeeper-3.5.5-bin.tar.gz
解压安装包
[root@logstash ~]#tar -zxf apache-zookeeper-3.5.5-bin.tar.gz -C /usr/local/
-创建快照日志存放目录
[root@logstash ~]# mkdir -p /data/zk/data
-创建事务日志存放目录
[root@logstash ~]# mkdir -p /data/zk/datalog
-生成配置文件
[root@logstash ~]# cd /usr/local/apache-zookeeper-3.5.5-bin/conf/
[root@logstash conf]# ls
configuration.xsl log4j.properties zoo_sample.cfg
[root@filebeat conf]# cp zoo_sample.cfg zoo.cfg
-修改主配置文件zoo.cfg
[root@logstash conf]# vim zoo.cfg
dataDir=/data/zk/data #修改这一行为我们创建的目录
dataLogDir=/data/zk/datalog #添加这一行
-添加path环境变量
[root@logstash ~]# vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/apache-zookeeper-3.5.5-bin
export PATH=$ZOOKEEPER_HOME/bin:$PATH
[root@logstash ~]# source /etc/profile
启动zookeeper
[root@logstash ~]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
验证
[root@logstash ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
添加开机启动
[root@logstash ~]# echo "zkServer.sh start" >> /etc/rc.local
[root@logstash ~]# chmod +x /etc/rc.local
安装kafka
-解压安装包
[root@filebeat ~]# tar -zxvf kafka_2.12-2.2.0.tgz -C /usr/local/
[root@filebeat ~]# cd /usr/local/kafka_2.12-2.2.0/
[root@filebeat kafka_2.12-2.2.0]# ls
bin config libs LICENSE NOTICE site-docs
-修改主配置文件
[root@filebeat ~]# vim /usr/local/kafka_2.12-2.2.0/config/server.properties

broker的全局唯一编号,不能重复

broker.id=0

监听

listeners=PLAINTEXT://:9092 #开启此项

日志目录

log.dirs=/data/kafka/log #修改日志目录

配置zookeeper的连接(如果不是本机,需要该为ip或主机名)

zookeeper.connect=localhost:2181
-创建日志目录
[root@filebeat ~]# mkdir -p /data/kafka/log
-添加path环境变量
[root@filebeat ~]# vim /etc/profile
export KAFKA_HOME=/usr/local/kafka_2.12-2.2.0
export PATH=$KAFKA_HOME/bin:$PATH
[root@filebeat ~]# source /etc/profile
-启动kafka
[root@filebeat ~]# kafka-server-start.sh $KAFKA_HOME/config/server.properties

-后台启动kafka
[root@filebeat ~]# kafka-server-start.sh -daemon /usr/local/kafka_2.12-2.2.0/config/server.properties
[root@logstash ~]# ls

安装jdk
[root@logstash ~]#tar zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
[root@logstash ~]# vim /etc/profile //配置环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_171
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@logstash ~]# source /etc/profile
[root@logstash ~]# java -version
解压软件包
[root@logstash ~]# unzip logstash-6.4.2.zip -d /usr/local/
生成配置文件
[root@logstash ~]# cd /usr/local/logstash-6.4.2/config
[root@logstash config]# cp logstash-sample.conf logstash.conf
[root@logstash config]# cd ..
[root@logstash logstash-6.4.2]# vim config/logstash.conf
input {
file {
path => "/usr/local/nginx/logs/access.log" # nginx的log日志存放目录
start_position => "beginning" # 从logstash进程开启时录入日志
}
}

output {
kafka {
bootstrap_servers => "192.168.43.81:9092" # 将日志输出到kafka上
topic_id => ["test"] # 我们在kafka上创建的主题名字
}
}
[root@logstash logstash-6.4.2]#nohup ./bin/logstash -f ./config/logstash.conf &
[root@logstash logstash-6.4.2]# tail -F nohup.out

[root@filebeat logstash-6.4.2]# nohup ./bin/logstash -f ./config/logstash.conf &
[root@filebeat logstash-6.4.2]# tail -F nohup.out
[root@filebeat logstash-6.4.2]# jps -m
23509 Logstash -f ./config/logstash.conf
[root@filebeat ~]# cd /usr/local/bin
[root@filebeat ~]# kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning //启动消费者
访问nginx

在kafka(被收集日志端)配置Logstash
解压软件包
[root@filebeat ~]# tar -zxf kibana-6.4.2-linux-x86_64.tar.gz -C /usr/local/
生成配置文件
[root@filebeat ~]# cd /usr/local/logstash-6.4.2/config
[root@filebeat config]# vim logstash_for_kafka.conf
input {
kafka {
bootstrap_servers => "192.168.43.81:9092,192.168.43.81:9093,192.168.43.81:9094" # kafka集群的IP及其端口,多个用逗号隔开
topics => ["test"] # 我们在kafka创建的主题名称
id => "GspTest" # 为这个日志流插入一个唯一ID,有助于监控日志
decorate_events => true # 在输出消息的时候会输出自身的信息包括:消费消息的大小, topic 来源以及 consumer 的 group 信息
consumer_threads => 5 # 设置此项实现读取日志时负载均衡。一个partition对应一个消费者消费(一个线程),在kafka中一个进程对应一个线程,所以使用"ps -aux | grep kafka | wc -l"查看并设置此项,如果此设置比kafka的线程还多,会将多余的线程置于闲置状态(说白了就是给多了也没啥事)
}
}

output {
elasticsearch {
hosts => ["192.168.43.80:9200"]
index => "logstash-kafka-%{+YYYY.MM.dd}"
}
}
[root@filebeatconfig]# cd ..
[root@filebeat logstash-6.4.2]# nohup ./bin/logstash -f ./config/logstash_for_kafka.conf &
[root@filebeat logstash-6.4.2]# tail -F nohup.out
[root@filebeat logstash-6.4.2]# jps -m
24032 Logstash -f ./config/logstash_for_kafka.conf
24445 Jps -m
测试
多次访问nginx,然后访问kibana,192.168.43.80:5601



Zabbix

IP地址 主机名 角色
192.168.43.20 Zabbix-server Zabbix-server
192.168.43.21 Zabbix-web Zabbix-web
建立时间同步环境,在zabbix-server上搭建时间同步服务器
安装NTP(关闭防火墙/selinux)
[root@zabbix-server ~]#yum -y install ntp
配置NTP
[root@zabbix-server~]#vim /etc/ntp.conf
server 127.127.1.0 #本地时间供给源
fudge 127.127.1.0 stratum 8 #设置时区为+08区
重启服务并设置为开机启动
[root@zabbix-server ~]#systemctl start ntpd
[root@zabbix-server ~]#systemctl enable ntpd
在其他服务器上进行时间同步(关闭防火墙/selinux)
[root@mha-master ~]#yum -y install ntpdate
[root@zabbix-server ~]#ntpdate 192.168.43.20 //地址写你自己的时间服务器

创建zabbix数据库和授权用户:
授权
[root@zabbix-server ~]# scp zabbix-3.2.6.tar.gz 192.168.43.110:/root
[root@zabbix-server ~]# ssh 192.168.43.110
[root@mha-master ~]# mysql -uroot -p123456
------------------------------------>
CREATE DATABASE zabbix;
GRANT ALL ON zabbix. TO 'zabbix'@'192.168.43.%' IDENTIFIED BY '123456';
GRANT ALL ON zabbix.
TO 'zabbix'@'localhost' IDENTIFIED BY '123456';
GRANT ALL ON zabbix.* TO 'zabbix'@'mha-master' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
 导入数据库文件:
下载地址
[root@mha-master ~]# wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.2.6/zabbix-3.2.6.tar.gz/download
也可以下载后上传
导入数据库
[root@mha-master ~]# tar xf zabbix-3.2.6.tar.gz -C /usr/local/src/
[root@mha-master ~]# cd /usr/local/src/zabbix-3.2.6/database/mysql/
[root@mha-master mysql~]# mysql -uzabbix -p123456 zabbix < schema.sql
[root@mha-master mysql~]#mysql -uzabbix -p123456 zabbix < images.sql
[root@mha-master mysql~]#mysql -uzabbix -p123456 zabbix < data.sql
#导入顺序不能错

安装Zabbix-Server服务器
  在zabbix-server上编译安装zabbix:
安装依赖包
[root@zabbix-server ~]#yum -y install mysql-devel libxml2-devel net-snmp-devel libcurl-devel gcc
[root@zabbix-server ~]#tar xf zabbix-3.2.6.tar.gz -C /usr/local/src/
[root@zabbix-server ~]#cd /usr/local/src/zabbix-3.2.6/
创建用户:
[root@zabbix-server zabbix-3.2.6~]#useradd -s /sbin/nologin zabbix
创建目录:
[root@zabbix-server zabbix-3.2.6~]#mkdir -p /data/zabbix/logs
给予权限:
[root@zabbix-server zabbix-3.2.6~]#chown -R zabbix:zabbix /data/zabbix/logs/
预编译
[root@zabbix-server zabbix-3.2.6~]#./configure --prefix=/usr/local/zabbix --enable-server --with-mysql --with-net-snmp --with-libcurl --with-libxml2
安装
[root@zabbix-server zabbix-3.2.6~]# make install
编辑配置文件并启动:
[root@zabbix-server ~]# cd /usr/local/zabbix/etc/
[root@zabbix-server etc~]#cp zabbix_server.conf zabbix_server.conf.bak
[root@zabbix-server etc~]#vim /usr/local/zabbix/etc/zabbix_server.conf
LogFile=/data/zabbix/logs/zabbix_server.log
DBHost=192.168.43.110 #数据库的地址,取消注释
DBName=zabbix #数据库的名
DBUser=zabbix #数据库的用户
DBPassword=123456 #数据库用户的密码(添加,或者取消注释)
ListenIP=127.0.0.1,192.168.43.20启动服务端
[root@zabbix-server etc~]#/usr/local/zabbix/sbin/zabbix_server
查看监听端口'
[root@zabbix-server ~]# netstat -anput |grep zabbix_server

设置启动脚本
[root@zabbix-server etc]# cd /usr/local/src/zabbix-3.2.6/
[root@zabbix-server etc]# cp misc/init.d/tru64/zabbix_server /etc/init.d/
[root@zabbix-server etc]# chmod +x /etc/init.d/zabbix_server
做软连接
[root@zabbix-server etc]# ln -s /usr/local/zabbix/sbin/ /usr/local/sbin/
[root@zabbix-server etc]# ln -s /usr/local/zabbix/bin/
/usr/local/bin/
设置自启动
[root@zabbix-server etc]# vim /etc/rc.d/init.d/zabbix_server
#在第二行添加如下内容
#chkconfig: 2345 10 90
#description: zabbix server
注:
此例中, 在chkconfig后面的数字345表示是默认运行的级别. 在这个例子中, 此服务将会在级别3 , 4, 5启动.
数字10代表启动的优先级别. 数字越低,优先级越高. 数字90代表关闭的优先级别. 数字越低,优先级越高.
保存后退出,并执行
[root@zabbix-server etc]#chkconfig --add zabbix_server
[root@zabbix-server etc]#chkconfig zabbix_server on
[root@zabbix-server etc]#service zabbix_server restart
安装Zabbix-Web服务器(编译安装nginx)
在Zabbix-Web主机上安装nginx和php:
Nginx安装及优化
上传软件包并解压
[root@zabbix-web~]# ls
anaconda-ks.cfg nginx-1.10.3.tar.gz
[root@zabbix-web~]# tar -zxvf nginx-1.10.3.tar.gz -C /usr/local/src/
更改源码隐藏软件名称和版本号
[root@zabbix-web~]# cd /usr/local/src/nginx-1.10.3/
[root@zabbix-webnginx-1.10.3]# vim src/core/nginx.h #修改标红部分
13 #define NGINX_VERSION "8.8.8" #修改版本号
14 #define NGINX_VER "web/" NGINX_VERSION #修改服务器名称
[root@zabbix-webnginx-1.10.3]# vim src/http/ngx_http_header_filter_module.c
49 static char ngx_http_server_string[] = "Server: web" CRLF; #修改标红部分
#修改HTTP头信息中的connection字段,防止回显具体版本号
拓展:通用http头域
通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control(缓存控制)、 Connection(连接)、Date(日期)、Pragma(短语)、Transfer-Encoding(传输编码)、Upgrade(升级)、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。那么也就是说有部分设备,或者是软件,能获取到connection,部分不能,要隐藏就要彻底!

[root@zabbix-webnginx-1.10.3]# vim src/http/ngx_http_special_response.c
#这个文件定义了http错误码的返回,有时候我们页面程序出现错误,Nginx会代我们返回相应的错误代码,回显的时候,会带上nginx和版本号,我们把他隐藏起来.(防止网页出错时显示版本号)
22 "


" NGINX_VER "
" CRLF #老版本这里需要修改为web,现在这里不需要修改,因为它调用了NGINX_VER变量
安装nginx依赖包
[root@zabbix-webnginx-1.10.3]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
预编译
[root@zabbix-webnginx-1.10.3]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre
--with-http_dav_module #启用支持(增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法)
默认关闭,需要编译开启
--with-http_stub_status_module #启用支持(获取Nginx上次启动以来的工作状态)
--with-http_addition_module #启用支持(作为一个输出过滤器,支持不完全缓冲,分部分相应请求)
--with-http_sub_module #启用支持(允许一些其他文本替换Nginx相应中的一些文本)
--with-http_flv_module #启用支持(提供支持flv视频文件支持)
--with-http_mp4_module #启用支持(提供支持mp4视频文件支持,提供伪流媒体服务端支持)
--with-pcre #需要注意,这里指的是源码,用#./configure --help |grep pcre查看帮助,如果源码编译pcre,需要通过--with-pcre=编译安装pcre路径
编译安装
[root@zabbix-webnginx-1.10.3]# make -j 4 && make install
启动nginx
[root@zabbix-web~]# /usr/local/nginx/sbin/nginx
查看端口号
[root@zabbix-web~]# netstat -antup | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0: LISTEN 7423/nginx: master
测试
[root@zabbix-web~]# curl -I 192.168.43.21
HTTP/1.1 200 OK
Server: web/8.8.8
Date: Wed, 03 Jul 2019 08:34:09 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Wed, 03 Jul 2019 08:31:22 GMT
Connection: keep-alive
ETag: "5d1c67da-264"
Accept-Ranges: bytes
网站测试
http://192.168.43.21/

查看nginx当前运行账号
[root@zabbix-web~]# ps -aux | grep nginx #默认是nobody用户

创建nginx账号
[root@zabbix-web~]# useradd -M -s /sbin/nologin nginx
修改nginx运行账号
[root@zabbix-web~]# vim /usr/local/nginx/conf/nginx.conf
改:
#user nobody;
为:
user nginx;
添加path变量
[root@zabbix-web~]# ln -s /usr/local/nginx/sbin/
/usr/local/bin/
重载nginx
[root@zabbix-web~]# nginx -s reload
查看运行账号
[root@zabbix-web~]# ps -aux | grep nginx

在这里我们还可以看到在查看的时候,work进程是nginx用户了,但是master进程还是root
其中,master是监控进程,也叫主进程,work是工作进程.
所以我们可以master监控进程使用root,可以是降级使用普通用户,如果都是用普用户,那么编译安装的时候,是用普通用户执行,sudo方式操作!可以直接理解为master是管理员,work进程才是为用户提供服务的!
生成服务启动脚本
[root@zabbix-web~]# vim /etc/init.d/nginx
#!/bin/bash

chkconfig: - 99 2

description: Nginx Service Control Script

PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -3 $(cat $PIDF)
;;
restart)
$0 stop &> /dev/null
if [ $? -ne 0 ] ; then continue ; fi
$0 start
;;
reload)
kill -1 $(cat $PIDF)
;;
*)
echo "Userage: $0 { start | stop | restart | reload }"
exit 1
esac
exit 0
配置服务开机自动启动
[root@zabbix-web~]# chmod +x /etc/init.d/nginx #给脚本添加可执行权限
[root@zabbix-web~]# chkconfig --add nginx #把nginx添加为系统服务
[root@zabbix-web~]# chkconfig nginx on #把nginx添加开机自启动
[root@zabbix-web~]# chkconfig --list nginx #查看nginx开机启动项

php安装
在Nginx中,我们使用的是php-fpm来对php页面解析,PHP-FPM其实是PHP源代码的一个补丁,指在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,再编译安装PHP后才可以使用。
从PHP5.3.3开始,PHP中直接整合了PHP-FPM,所以从PHP5.3.3版本以后,不需要下载PHP-FPM补丁包了,下面是PHP-FPM官方发出来的通知:
http:#php-fpm.org/download

安装依赖:
[root@zabbix-web ~]# yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf freetype gd libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel re2c bzip2-devel libmcrypt-devel freetype-devel libjpeg-devel
安装libmcrypt
[root@zabbix-web ~]# ls
anaconda-ks.cfg libmcrypt-2.5.7.tar.gz nginx-1.10.3.tar.gz php-5.6.36.tar.gz
[root@zabbix-web ~]# tar zxf libmcrypt-2.5.7.tar.gz
[root@zabbix-web ~]# cd libmcrypt-2.5.7/
[root@zabbix-web libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install
解压PHP包
[root@zabbix-web ~]# tar -zxvf php-5.6.36.tar.gz -C /usr/local/src/
预编译
[root@zabbix-web ~]# cd /usr/local/src/php-5.6.36/
[root@zabbix-web php-5.6.36]# ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/usr/local/php5.6/etc/ --with-bz2 --enable-maintainer-zts --with-png-dir --with-freetype-dir --with-jpeg-dir --with-gd --enable-bcmath --with-gettext

参数选项
Php配置选项中文手册
http://php.net/manual/zh/configure.about.php
相关选项的解释:
--prefix=/usr/local/php5.6 //安装位置
--with-mysql=mysqlnd //支持mysql
--with-pdo-mysql=mysqlnd //支持pdo模块
--with-mysqli=mysqlnd //支持mysqli模块
注:上面的三选项的作用:数据库与php不在一个服务器上,指定此种方式,安装数据库连接驱动
--with-apxs2 #将php编译为Apache的一个模块进行使用
--enable-mbstring #多字节字符串的支持
--with-curl #支持cURL
--with-gd #支持gd库
--enable-fpm #支持构建fpm
--with-config-file-path #设置配置文件路径
--with-openssl #支持openssl模块
--enable-fpm #支持fpm模式
--enable-sockets #启用socket支持
--enable-sysvshm #启用系统共享内存支持
--enable-mbstring #多字节字串、像我们的中文就是多字节字串
--with-freetype-dir #支持freetype、就要装freetype-devel、跟字体相关的、字体解析工具
--with-jpeg-dir
--with-png-dir
注:上面的二选项的作用:处理jpeg、png图片的、php可以动态生成jpeg图片
--with-zlib #是个压缩库、在互联网传输时用来压缩传输的
--with-libxml-dir=/usr #这个libxml是用来解析xml的、指定/usr下
--enable-xml #支持xml的
--with-mhash #支持mhash
--with-mcrypt=/usr/local/libmcrypt #libmcrypt-devel这个程序包所指定的
--with-config-file-path=/usr/local/php5.6/etc #指定配置文件的存放路径的
--with-config-file-scan-dir=/etc/php.d #配置文件扫描路径
--with-bz2 #支持BZip2
如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
编译
输入top,然后按1,即可看到自己是几核

[root@zabbix-web php-5.6.36]# make -j 4 #做实验时可以多指定几个内核加速安装
安装
[root@zabbix-web php-5.6.36]# make install
修改fpm配置php-fpm.conf.default文件名称
[root@zabbix-web ~]# cd /usr/local/php5.6/etc/
[root@zabbix-web etc]# cp php-fpm.conf.default php-fpm.conf
修改默认运行账号
修改默认运行用户,组为nginx
[root@zabbix-web etc]# vim php-fpm.conf
user = nginx
group = nginx
生成php.ini配置文件
[root@zabbix-web ~]# cp /usr/local/src/php-5.6.36/php.ini-production /usr/local/php5.6/etc/php.ini
复制php-fpm启动脚本到init.d
[root@zabbix-web ~]# cp /usr/local/src/php-5.6.36/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
赋予执行权限
[root@zabbix-web ~]# chmod +x /etc/init.d/php-fpm
添加开机启动
[root@zabbix-web ~]# chkconfig --add php-fpm
[root@zabbix-web ~]# chkconfig php-fpm on
启动服务
[root@zabbix-web ~]# /etc/init.d/php-fpm start
Starting php-fpm done
查看端口监听状态
[root@zabbix-web ~]# netstat -antpu | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0: LISTEN 7767/php-fpm: maste
配置nginx支持index.php
修改配置文件
[root@zabbix-web ~]# vim /usr/local/nginx/conf/nginx.conf
#添加以下红色部分
location / {
root html;
index index.php index.html index.htm; #添加index.php
}
#取消下面的注释,注意修改路径
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
#写网站根目录
创建测试页面
[root@zabbix-web ~]# vim /usr/local/nginx/html/index.php #php测试页面
phpinfo();
?>
[root@zabbix-web ~]# vim /usr/local/nginx/html/test.php #测试mysql连接页面
$link=mysql_connect('192.168.43.110','test','123456');
if ($link)echo "connection success......";
mysql_close();
?>
[root@localhost ~]# nginx -t
[root@localhost ~]# nginx -s reload
在数据库中创建mysql测试账号
恢复192.168.1.12为源码安装mysql快照,创建授权test账号
[root@mha-master ~]# mysql -uroot -p123456
mysql> grant all on
. to test@'%' identified by '123456';
mysql> flush privileges;
mysql> show grants for test; #查看一下test用户授权
测试
http://192.168.43.21/

取消授权
mysql> revoke all on
.* from 'test'@'%'; #取消授权
mysql> show grants for test;

配置zabbix的web页面

[root@zabbix-web ~]# wget wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.2.6/zabbix-3.2.6.tar.gz/download #本次已经下载了,上传即可
[root@zabbix-web ~]# tar xf zabbix-3.2.6.tar.gz -C /usr/local/src/
[root@zabbix-web ~]# mkdir /usr/local/nginx/html/zabbix/
[root@zabbix-web ~]# cd /usr/local/src/zabbix-3.2.6/frontends/php/
[root@zabbix-web php]# cp -a . /usr/local/nginx/html/zabbix/
查看当前系统时区
[root@zabbix-web php]# timedatectl

修改配置文件,以支持zabbix
[root@zabbix-web ~]# vim /usr/local/php5.6/etc/php.ini
date.timezone = Asia/Shanghai
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
always_populate_raw_post_data = -1
[root@zabbix-web php]# /etc/init.d/php-fpm restart
安装zabbix
用浏览器访问http://192.168.43.21/zabbix,并按照提示安装:
都ok才可以继续向下做


指定zabbix-server 如果指定错了可以在/usr/local/nginx/html/zabbix/conf/zabbix.conf.php 配置文件中修改




如果想重新指定数据库和nginx的地址,可以在配置文件中指定 
vim /usr/local/nginx/html/zabbix/conf/zabbix.conf.php //手动写入配置
// Zabbix GUI configuration file.
global $DB;

$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = '192.168.43.88';
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = '123456';

// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';

$ZBX_SERVER = '192.168.43.90';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = '';

$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
?>
Zabbix用户管理
修改密码


修改密码为123456,并改语言为中文

创建用户

点击添加可以加入到相应的群组


上传simkai.ttf包,解决Zabbix中文乱码 上传simkai.ttf包
[root@zabbix-web ~]#cp simkai.ttf /usr/local/nginx/html/zabbix/fonts
[root@zabbix-web ~]# ls /usr/local/nginx/html/zabbix/fonts
[root@zabbix-web ~]# vim /usr/local/nginx/html/zabbix/include/defines.inc.php
define('ZBX_FONT_NAME', 'simkai'); (修改)

[root@zabbix-web ~]# nginx -s reload
安装Zabbix-Agent端
  在mha-slave1主机上安装:
拷贝文件
[root@zabbix-server ~]# scp zabbix-3.2.6.tar.gz 192.168.43.12:/root #拷贝文件
[root@zabbix-server ~]# ssh 192.168.43.12
在客户端服务器安装GCC
[root@mha-slave1 ~]# yum install -y gcc
同步时间
[root@mha-slave1 ~]# yum -y install ntpdate #同步时间
[root@mha-slave1 ~]# ntpdate 192.168.43.20
安装zabbix-agent
#或者直接上传zabbix-3.2.6.tar.gz
[root@mha-slave1 ~]# tar xf zabbix-3.2.6.tar.gz -C /usr/local/src/
[root@mha-slave1 ~]# cd /usr/local/src/zabbix-3.2.6/
[root@mha-slave1 zabbix-3.2.6~]# groupadd zabbix-agent
[root@mha-slave1 zabbix-3.2.6~]#useradd -g zabbix-agent zabbix-agent -s /sbin/nologin
[root@mha-slave1 zabbix-3.2.6~]#./configure --prefix=/usr/local/zabbix-agent --enable-agent
[root@mha-slave1 zabbix-3.2.6~]#make install
  编辑配置文件:
[root@mha-slave1 zabbix-3.2.6~]#mkdir -p /data/zabbix/logs/
[root@mha-slave1 zabbix-3.2.6~]#chown -R zabbix-agent:zabbix-agent /data/zabbix/
[root@mha-slave1 zabbix-3.2.6~]#vim /usr/local/zabbix-agent/etc/zabbix_agentd.conf
LogFile=/data/zabbix/logs/zabbix_agentd.log
Server=192.168.43.20 #zabbix-server的地址,客户端被动等待zabbix-server收集数据
ServerActive=192.168.43.20 #客户端主动将数据发给zabbix-server
Hostname=192.168.43.12 #自己的ip
User=zabbix-agent #修改程序的运行用户
UnsafeUserParameters=1 #允许自定义键
或着使用sed命令修改
[root@mha-slave1 ~]#sed -i 's:LogFile=/tmp/zabbix_agentd.log:LogFile=/data/zabbix/logs/zabbix_agentd.log:g' /usr/local/zabbix-agent/etc/zabbix_agentd.conf
[root@mha-slave1 ~]#sed -i 's/Server=127.0.0.1/Server=192.168.43.20/g' /usr/local/zabbix-agent/etc/zabbix_agentd.conf
[root@mha-slave1 ~]#sed -i 's/ServerActive=127.0.0.1/ServerActive=192.168.43.20/g' /usr/local/zabbix-agent/etc/zabbix_agentd.conf
[root@mha-slave1 ~]#sed -i 's/Hostname=Zabbix server/Hostname=192.168.43.12/' /usr/local/zabbix-agent/etc/zabbix_agentd.conf
[root@mha-slave1 ~]#sed -i 's/# User=zabbix/User=zabbix-agent/g' /usr/local/zabbix-agent/etc/zabbix_agentd.conf
[root@mha-slave1 ~]#sed -i 's/# UnsafeUserParameters=0/UnsafeUserParameters=1/g' /usr/local/zabbix-agent/etc/zabbix_agentd.conf

设置为系统服务,添加软连接
[root@mha-slave1~]#cd /usr/local/src/zabbix-3.2.6/
[root@mha-slave1 zabbix-3.2.6~]#cp misc/init.d/tru64/zabbix_agentd /etc/init.d/
[root@mha-slave1 zabbix-3.2.6~]#chmod +x /etc/init.d/zabbix_agentd
[root@mha-slave1 zabbix-3.2.6~]#ln -s /usr/local/zabbix-agent/sbin/ /usr/local/sbin/
[root@mha-slave1 zabbix-3.2.6~]#ln -s /usr/local/zabbix-agent/bin/
/usr/local/bin/
设置自启动
[root@mha-slave1 zabbix-3.2.6~]#vim /etc/init.d/zabbix_agentd
#在第二行添加如下内容
#chkconfig: 2345 10 90
#description: zabbix agentd
加入到系统服务并且开机启动
[root@mha-slave1 zabbix-3.2.6~]chkconfig --add zabbix_agentd
[root@mha-slave1 zabbix-3.2.6~]chkconfig zabbix_agentd on
[root@mha-slave1 zabbix-3.2.6~]service zabbix_agentd restart

添加群组和主机
如果有多台mysql需要监控,可以向建立一个mysql群组,然后创建mysql主机,加入到mysql群组中,如果只有一台主机就不需要创建群组了
创建群组

创建mysql群组,还可以选择其他群组,为mysql群组指定模板

添加主机



添加模板


查看图形

监控指定端口
Zabbix 监控指定端口(比如mysql端口)
2018年10月14日 14:46:50 肓己 阅读数 1454
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bacteriumX/article/details/83047122
前言
实现监控指定端口是否被监听效果,保证服务的正常运行。
步骤

创建一个模板
创建一个监控mysql端口的模板

指定模板的名称(不能使用中文),应用模板的群组

配置---模板---创建监控项

创建监控项
配置--主机--(选择主机)--监控项--创建监控项
填入监控项名称,选择类型(注意默认类型是Zabbix 客户端,如果是主动监控的需要选择Zabbix 客户端主动式),选择键值,键值选择后填入需要监控的端口,可以起一个新的应用集Port listen,最后点击添加:



触发器设置
添加触发器
添加触发器创建触发器,填入触发器名称,设置严重性,然后点击填写表达式,选择刚刚创建的监控项,点击插入。最后点击添加即创建完成触发器。


将模板应用到主机

查看最新数据
查看最新数据可以看到该监控状态为1,即该端口在监听状态。

查看报警

浏览最新数据,可以看到该监控状态为0,即该端口不在监听状态。

开启mysql
状态恢复:

DNS部署
主DNS部署
实验环境

安装所需软件包
[root@dns1 ~]# yum -y install bind*
编辑DNS的主配置文件
[root@dns1 ~]# vim /etc/named.conf //修改
options {
listen-on port 53 { any; }; //允许所有地址访问端口
listen-on-v6 port 53 { ::1; };
directory "/var/named"; //区域数据文件的默认存放位置
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt"; //指定缓存数据统计文件位置
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; }; 允许所有网段访问
编辑区域配置
[root@dns1 ~]# vim /etc/named.rfc1912.zones //最下面添加
1.编辑正向解析区域
zone "qingniao.com" in { #网站域名
type master; #主类型的DNS
file "qingniao.com.zone"; #文件名
allow-transfer { 192.168.43.51; }; #从DNS地址
};
2.编辑反向解析区域
zone "43.168.192.in-addr.arpa" in { #反向IP地址
type master; #主类型
file "192.168.43.arpa"; #文件名
};
配置主区域正向数据文件
[root@dns1 ~]# vim /var/named/qingniao.com.zone
:r /var/named/named.localhost //在命令末行模式下输入调用模板
$TTL 1D
@ IN SOA qingniao.com. admin.qingniao.com. ( 2019071917
1D
1H
1W
3H );
IN NS dns1.qingniao.com.
IN NS dns2.qingniao.com.
dns1 IN A 192.168.43.50
dns2 IN A 192.168.43.51
discuz IN A 192.168.43.100
zabbix IN A 192.168.43.20
elk IN A 192.168.43.80
编辑反向区域解析文件
[root@dns1 ~]# vim /var/named/192.168.43.arpa
$TTL 1D
@ IN SOA qingniao.com. admin.qingniao.com. ( 2019071917
1D
1H
1W
3H );
IN NS dns1.qingniao.com.
IN NS dns2.qingniao.com.
50 IN PTR dns1.qingniao.com.
51 IN PTR dns2.qingniao.com.
100 IN PTR discuz.qingniao.com.
20 IN PTR zabbix.qingniao.com.
80 IN PTR elk.qingniao.com.
检查配置文件
[root@dns1 ~]# named-checkconf -z /etc/named.conf

启动named
[root@dns1 ~]# systemctl start named
验证正反DNS解析

从DNS部署
安装所需软件包
[root@dns2 ~]# yum -y install bind*
编写主配置文件
[root@dns2 ~]# vim /etc/named.conf //修改
options {
listen-on port 53 { any; }; //允许所有地址访问端口
listen-on-v6 port 53 { ::1; };
directory "/var/named"; //区域数据文件的默认存放位置
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt"; //指定缓存数据统计文件位置
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; }; 允许所有网段访问

编写区域文件
[root@dns2 ~]# vim /etc/named.rfc1912.zones
1.编写正向区域解析文件
zone "qingniao.com" in {
type slave; #类型要修改为从类型
masters { 192.168.43.50; }; #指定主的IP地址 file "slaves/qingniao.com.zone"; #在slaves下自动同步lijinming.com.zone文件
};
2.编写反向区域
zone "43.168.192.in-addr.arpa" in {
type slave; #类型修改为从类型
masters { 192.168.43.50; }; #指定主DNS的IP地址
file "slaves/192.168.43.arpa"; #slaves文件夹下自动同步主DNS的反向文件
};
启动服务
[root@dns2 ~]# systemctl restart named
修改想要访问的DNS
[root@dns2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
想要访问的添加在第一条

[root@dns2 ~]# systemctl restart network
查看slaves文件夹是否同步区域文件
[root@dns2 ~]# cd /var/named/
[root@dns2 named]# ls

[root@dns2 named]# ls slaves/

验证

0