技術論壇搭建項目

目錄
第二階段項目技術文檔 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_nginxlog.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/
[[email protected]]# vim src/core/nginx.h #修改標紅部分
13 #define NGINX_VERSION "8.8.8" #修改版本號
14 #define NGINX_VER "web/" NGINX_VERSION #修改服務器名稱
[[email protected]]# 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,部分不能,要隱藏就要徹底!

[[email protected]]# vim src/http/ngx_http_special_response.c
#這個文件定義了http錯誤碼的返回,有時候我們頁面程序出現錯誤,Nginx會代我們返回相應的錯誤代碼,回顯的時候,會帶上nginx和版本號,我們把他隱藏起來.(防止網頁出錯時顯示版本號)
22 "<hr><center>" NGINX_VER "</center>" CRLF #老版本這裏需要修改爲web,現在這裏不需要修改,因爲它調用了NGINX_VER變量
安裝nginx依賴包
[[email protected]]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
預編譯
[[email protected]]# ./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路徑
編譯安裝
[[email protected]]# 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/
技術論壇搭建項目
驗證
技術論壇搭建項目

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章