目录 第二阶段项目技术文档 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,ceph1,ceph2上部署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 Ceph1 192.168.43.42 Osd,mds ceph ceph Ceph2 192.168.43.43 Osd,mds ceph ceph Ceph3 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 <<EOF #!/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 '/<IfModule mime_module>/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 "<?php 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 ceph1 192.168.43.43 ceph2 192.168.43.44 ceph3
配置ssh免密登录(管理节点) ssh-keygen #一直回车,不设密 ssh-copy-id ceph0 ssh-copy-id ceph1 ssh-copy-id ceph2 ssh-copy-id ceph3
上传软件包并解压 [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 ceph1:/root [root@ceph0 ~]# scp -r ceph ceph2:/root [root@ceph0 ~]# scp -r /etc/yum.repos.d/ceph.repo ceph1:/etc/yum.repos.d/ [root@ceph0 ~]# scp -r /etc/yum.repos.d/ceph.repo ceph2:/etc/yum.repos.d/ 在ceph0,ceph1,ceph2上部署ceph,安装依赖工具: [root@ceph0 ~]# yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs Ceph0的部署: 创建monitor服务: 同时在ceph1,ceph2上部署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 ceph1 /dev/sdb [root@ceph0 ceph]# ceph-deploy disk zap ceph2 /dev/sdb 添加osd节点: [root@ceph0 ceph]# ceph-deploy osd create ceph0 --data /dev/sdb [root@ceph0 ceph]# ceph-deploy osd create ceph1 --data /dev/sdb [root@ceph0 ceph]# ceph-deploy osd create ceph2 --data /dev/sdb 查看状态: [root@ceph0 ceph]# ceph-deploy osd list ceph0 ceph1 ceph2 部署mgr管理服务 [root@ceph0 ceph]# ceph-deploy mgr create ceph0 统一集群配置 [root@ceph0 ceph]# ceph-deploy admin ceph0 ceph1 ceph2 ceph3 如果ceph3报错在ceph3里加入[root@ceph3 ~]# mkdir /etc/ceph 各个节点修改ceph.client.admin.keyring权限 [root@ceph0 ceph]# chmod +r /etc/ceph/ceph.client.admin.keyring [root@ceph1 ~]# 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 部署mds服务 安装mds [root@ceph0 ceph]# ceph-deploy mds create ceph1 ceph2 查看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=ceph2=up:active}, 1 up:standby 内核驱动挂载Ceph文件系统 创建挂载点 [root@ceph3 ~]# mkdir /media/aa [root@ceph0 ~]# cat /etc/ceph/ceph.client.admin.keyring [client.admin] key = AQAzN0NdWGpaJxAAyulOHB/+r2OH55yEm2w1NA== 使用密钥挂载 [root@ceph3 ~]# 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 ceph3:/root [root@ceph0 ~]# scp -r ceph ceph3:/rootscp /etc/yum.repos.d/ceph-package.repo ceph3:/etc/yum.repos.d/ 安装ceph-common-12.2.12 [root@ceph3 ~]# yum install -y ceph-common-12.2.12 创建密钥文件 [root@ceph4~]# 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 <?php phpinfo(); ?> [root@apache1 ~]# vim /usr/local/httpd/htdocs/test.php <?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<<eof
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 "<hr><center>" NGINX_VER "</center>" 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测试页面 <?php phpinfo(); ?> [root@zabbix-web ~]# vim /usr/local/nginx/html/test.php #测试mysql连接页面 <?php $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 //手动写入配置
<?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/ 验证