搭建環境tomcat+nginx+keepalived+zabbix

準備機子和環境

<code>10.3.145.63 Tomcat(apache-tomcat-8.0.53)

10.3.145.64 nginx(nginx version: nginx/1.12.2)

10.3.145.39 nginx.bak(nginx version: nginx/1.12.2)

10.3.145.65 zabbinx-server(4.0) + ansible(ansible 2.8.0)

## 所有的機子都執行以下命令初始化環境

systemctl stop firewalld
systemctl disable firewalld
sed -ri s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
setenforce 0

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache fast

yum install -y wget ntpdate net-tools vim bash-completion ShellCheck
ntpdate -b ntp1.aliyun.com
​/<code>


為10.3.145.63 部署JDK&Tomcat

<code>## 先將已經下載的jdk壓縮包解壓到 /usr/local/下,並改名為java
[root@10v3v145v63 src]# tar -xf jdk-8u20-linux-x64.tar.gz -C /usr/local/
[root@10v3v145v63 src]# mv /usr/local/jdk1.8.0_20 /usr/local/java

## 配置jdk的環境配置
[root@10v3v145v63 src]# vim /etc/profile.d/java.sh
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH

## 檢查jdk是否安裝成功
[root@10v3v145v63 src]# source /etc/profile.d/java.sh
[root@10v3v145v63 src]# java -version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)
## 如果java -version能查看到以上信息,則java配置成功


## 解壓Tomcat壓縮包到 /usr/local 下,並改名為tomcat1
[root@10v3v145v63 src]# tar -xf apache-tomcat-8.0.53.tar.gz -C /usr/local/
[root@10v3v145v63 src]# mv /usr/local/apache-tomcat-8.0.53 /usr/local/tomcat1

## 部署多臺tomcat
[root@10v3v145v63 src]# cd ../
[root@10v3v145v63 local]# cp -R tomcat1 tomcat2
[root@10v3v145v63 local]# cp -R tomcat1 tomcat3

## 修改tomcat的配置
[root@10v3v145v63 local]# sed -i s/8080/8081/g /usr/local/tomcat2/conf/server.xml
[root@10v3v145v63 local]# sed -i s/8080/8082/g /usr/local/tomcat3/conf/server.xml
[root@10v3v145v63 local]# sed -i s/8005/8012/g /usr/local/tomcat2/conf/server.xml
[root@10v3v145v63 local]# sed -i s/8005/8013/g /usr/local/tomcat3/conf/server.xml

## 啟動tomcat
[root@10v3v145v63 local]# ./tomcat1/bin/startup.sh
[root@10v3v145v63 local]# ./tomcat2/bin/startup.sh
[root@10v3v145v63 local]# ./tomcat3/bin/startup.sh

## 查看端口是否啟動了tomcat
[root@10v3v145v63 local]# ss -tunlp | grep 80
tcp   LISTEN     0      100     :::8009                 :::*                   users:(("java",pid=38902,fd=52))
tcp   LISTEN     0      1     ::ffff:127.0.0.1:8012                 :::*                   users:(("java",pid=39103,fd=63))
tcp   LISTEN     0      1     ::ffff:127.0.0.1:8013                 :::*                   users:(("java",pid=39210,fd=63))
tcp   LISTEN     0      100     :::8080                 :::*                   users:(("java",pid=38902,fd=47))
tcp   LISTEN     0      100     :::8081                 :::*                   users:(("java",pid=39103,fd=47))
tcp   LISTEN     0      100     :::8082                 :::*                   users:(("java",pid=39210,fd=47))
tcp   LISTEN     0      1     ::ffff:127.0.0.1:8005                 :::*                   users:(("java",pid=38902,fd=74))

## 三個端口 8080,8081,8082 已經啟動了,說明tomcat服務啟動成功

修改tomcat的訪問頁面,進行區分/<code>
<code>echo "111" > tomcat1/webapps/ROOT/index.jsp
echo "222" > tomcat2/webapps/ROOT/index.jsp
echo "333" > tomcat3/webapps/ROOT/index.jsp

用瀏覽器訪問10.3.145.63:8080  10.3.145.64:8081 10.3.145.65:8082
能分別看到"111","222","333"
---部署成功
​/<code>


為10.3.145.65安裝anxible服務

先為其他幾臺機子執行 copy-key.sh 腳本(附錄1),傳遞公鑰

<code>​
[root@10v3v145v65 ~]# bash copy-key.sh /<code>


在10.3.145.65上部署ansible服務,並進行配置

<code>## yum安裝ansible
[root@10v3v145v65 ~]# yum -y install ansible

## 配置ansible的hosts
[root@10v3v145v65 ~]# vim /etc/ansible/hosts
[nginx]
10.3.145.39
10.3.145.64


## 創建data目錄
[root@10v3v145v65 ~]# mkdir /data
#在/data下寫安裝nginx的劇本
---創建以下目錄結構的目錄
[root@10v3v145v65 roles]# tree .
.
├── nginx
│   ├── files
│   ├── handlers
│   │   └── main.yaml
│   ├── tasks
│   │   └── main.yaml
│   └── templates
│       └── nginx.conf.j2
└── site.yaml

[root@10v3v145v65 ~]# mkdir /data/roles/nginx/{files,handlers,tasks,templates} -p

---編寫劇本
[root@10v3v145v65 ~]# cd /data/roles
[root@10v3v145v65 roles]# vim site.yaml
- hosts: nginx
roles:
 - nginx
 
[root@10v3v145v65 roles]# cd nginx/  
[root@10v3v145v65 nginx]# vim tasks/main.yaml
---
- name: install nginx packge
yum: name=nginx state=present

- name: copy nginx.conf template
template: class="lazy" src="//p2.ttnews.xyz/loading.gif" data-original=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart nginx

- name: make sure nginx service running
 service: name=nginx state=started enabled=yes
 
[root@10v3v145v65 nginx]# vim handlers/main.yaml
---
- name: restart nginx
 service: name=nginx state=restarted
 


## 編寫配置文件
[root@10v3v145v65 nginx]# vim templates/nginx.conf.j2

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
  worker_connections 1024;
}
http {
  upstream web1 {
  server 10.3.145.63:8080;
  }

  upstream web2 {
  server 10.3.145.63:8081;
  }

  upstream web3 {
  server 10.3.145.63:8082;
  }
  server {
      listen       80 default_server;
      listen       [::]:80 default_server;
      server_name cyylog;
      root         /usr/share/nginx/html;

      include /etc/nginx/default.d/*.conf;

      location / {
              proxy_set_header Host http_host;
              proxy_set_header X-Real-IP remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
              location /web1 {
      root html;
      index index.jsp index.htm;
      proxy_pass http://web1/;
      }

      location /web2 {
      root html;
      index index.jsp index.htm;
      proxy_pass http://web2/;
      }
      location /web3 {
      root html;
      index index.jsp index.htm;
      proxy_pass http://web3/;
      }
      error_page 500 502 503 504 /50x.html;
          location = /50x.html {
      }
  }
}

## 實施
[root@10v3v145v65 nginx]# ansible-playbook ../site.yaml --syntax-check //檢查語法
[root@10v3v145v65 nginx]# ansible-playbook ../site.yaml //實施劇本

###修改本地解析
[root@10v3v145v65 nginx]# vim /etc/hosts
10.3.145.39     cyylog
10.3.145.64     cyylog

###本地訪問
[root@10v3v145v65 nginx]# curl cyyog/web1
[root@10v3v145v65 nginx]# curl cyylog/web2
[root@10v3v145v65 nginx]# curl cyylog/web3

能分別看到"111","222","333"則為部署成功

​/<code>

在10.3.145.39(備)和10.3.145.64(主)上部署keepalived

兩臺部署和配置大部分一樣,不同之處有說明
<code>## 安裝keepalived
[root@10v3v145v64 ~]# yum -y install keepalived

## 修改配置文件
[root@10v3v145v64 ~]# vim /etc/keepalived/keepalived.conf


! Configuration File for keepalived

global_defs {
      router_id 10v3v145v64 #另一臺機器為10v3v145v39
  }

vrrp_script check_nginx {
 />   interval 5
}

vrrp_instance VI_1 {
  state BACKUP
  nopreempt
  interface ens33
  virtual_router_id 51
  priority 100        #輔助改為80
  advert_int 1
  authentication {
      auth_type PASS
      auth_pass 1111
  }
  virtual_ipaddress {
       10.3.145.60     #虛擬IP地址
  }
  track_script {
      check_nginx
  }
}

[root@10v3v145v64 ~]# vim /etc/keepalived/check_nginx_status.sh //腳本文件
#!/bin/bash                                                                                                    
/usr/bin/curl -I http://localhost &>/dev/null
if [ $? -ne 0 ];then
      systemctl restart keepalived
fi

## 注:必須先啟動nginx,再啟動keepalived
[root@10v3v145v64 ~]# systemctl start keepalived
[root@10v3v145v64 ~]# ip a
能看到10.3.145.60/32則啟動成功
###測試服務,
在64上 stop nginx 的服務,查看到10.3.145.60/32的IP不在64上,而是在39上,則說明服務沒有問題。

​/<code>

增加hosts解析

<code>10.3.145.60     cyylog/<code>


zabbix自動發現

在一臺機器(例10.3.145.65) 部署zabbix-server,實現監控。 其他機器均須部署 zabbix-agent (10.3.145.39、10.3.145.64、10.3.145.63)

安裝zabbix-server

<code>## 安裝zabbix源(官方)(四臺機子都進行配置)
[root@10v3v145v65 roles]#rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

## 而後更新我們的yum倉庫:
[root@10v3v145v65 roles]# yum repolist

## 安裝
[root@10v3v145v65 ~]# yum -y install zabbix-agent zabbix-get zabbix-sender zabbix-server-mysql zabbix-web zabbix-web-mysql

​/<code>
<code>## 
1.創建 mariadb.repo
[root@10v3v145v65 roles]# vim /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.4/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

2.下載安裝
[root@10v3v145v65 roles]# yum -y install MariaDB-server MariaDB-client

3.
首先,我們修改一下配置文件——/etc/my.cnf.d/server.cnf
[root@10v3v145v65 roles]#vim /etc/my.cnf.d/server.cnf
[mysqld]

skip_name_resolve = ON #跳過主機名解析
innodb_file_per_table = ON #
innodb_buffer_pool_size = 256M #緩存池大小
max_connections = 2000 #最大連接數

log-bin = master-log #開啟二進制日誌
4.
重啟我們的數據庫服務
[root@10v3v145v65 roles]# systemctl restart mariadb
[root@10v3v145v65 roles]# mysql_secure_installation\t\t#初始化mariadb
5.登錄數據庫
#mysql
MariaDB [(none)]> create database zabbix character set 'utf8'; # 創建zabbix數據庫
MariaDB [(none)]> grant all on zabbix.* to 'zbxuser'@'10.3.145.%' identified by 'keer';\t\t\t\t\t\t\t\t\t\t# 注意授權網段
MariaDB [(none)]> flush privileges; # 刷新授權
6.導入表
首先,我們來查看一下,`zabbix-server-mysql`這個包提供了什麼
/usr/share/doc/zabbix-server-mysql-4.0.9/create.sql.gz #生成表的各種腳本

#gzip -d create.sql.gz
#head create.sql #查看內容
vim /usr/share/doc/zabbix-server-mysql-4.0.9/create.sql
USER zabbix #如果缺少,第一行添加
7.導入數據
cd /usr/share/doc/zabbix-server-mysql-4.0.9/
[root@10v3v145v65 zabbix-server-mysql-4.0.9]# mysql -uzbxuser -h10.3.145.65 -p zabbix < create.sql
8.修改配置文件
cd /etc/zabbix/
cp zabbix_server.conf{,.bak} #為了可以反悔,cp一份
vim zabbix_server.conf
#修改後配置如下
ListenPort=10051 #默認監聽端口
SourceIP=10.3.145.65 #發採樣數據請求的IP(本機)
DBHost=10.3.145.65 #數據庫對外的主機
DBName=zabbix #數據庫名稱

DBUser=zbxuser #數據庫用戶
DBPassword=keer #數據庫密碼
DBPort=3306 #數據庫啟動端口
9.開啟服務
#systemctl start zabbix-server.service
#ss -nutl |grep 10051
tcp LISTEN 0 128 *:10051 *:*
tcp LISTEN 0 128 :::10051 :::*

Alias /zabbix /usr/share/zabbix #我們訪問的時候要在主機後加上/zabbix來訪問我們這個服務
#vim /etc/php.ini #配置時區
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Shanghai
10.接下來,我們就可以啟動我們的`httpd`服務了:
[root@10v3v145v65 zabbix]# systemctl restart httpd.service
## 訪問 10.3.145.65/zabbix
## 進行初始化配置/<code>


ansible安裝zabbix-agent

<code>## 添加ansibled的hosts解析
[root@10v3v145v65 ~]# vim /etc/ansible/hosts
[zabbix-agent]
10.3.145.39
10.3.145.64
10.3.145.63

## 寫劇本
---創建以下目錄
[root@10v3v145v65 roles]# tree .
.
├── site.yaml
└── zabbix-agent
├── files
├── handlers
│   └── main.yaml

├── tasks
│   └── main.yaml
└── templates
└── zabbix_agentd.conf.j2
[root@10v3v145v65 ~]# mkdir /data/roles/zabbix-agent/{files,handlers,tasks,templates} -p
[root@10v3v145v65 ~]# cd /data/roles/zabbix-agent
[root@10v3v145v65 roles]# vim ../site.yaml
- hosts: zabbix-agent
roles:
- zabbix-agent
[root@10v3v145v65 zabbix-agent]# vim handlers/main.yaml
---
- name: restart zabbix-agent
service: name=zabbix-agent state=restarted
[root@10v3v145v65 zabbix-agent]# vim tasks/main.yaml
---
- name: install zabbix-agent packge
yum: name=zabbix-agent state=present

- name: copy zabbix-agent.conf template
template: class="lazy" src="//p2.ttnews.xyz/loading.gif" data-original=zabbix_agentd.conf.j2 dest=/etc/zabbix/zabbix_agentd.conf
notify: restart zabbix-agent

- name: make sure zabbix-agent service running
service: name=zabbix-agent state=started enabled=yes


[root@10v3v145v65 zabbix-agent]# cp /etc/zabbix/zabbix_agentd.conf ./templates/zabbix_agentd.conf.j2
## 編寫配置文件
[root@10v3v145v65 zabbix-agent]# vim templates/zabbix_agentd.conf.j2
Server=192.168.195.139///服務的IP\t\t\t
ServerActive=192.169.195.139///服務的IP
Hostname=192v168v195v139///服務的hostname
## 修改這三項即可 ##
[root@10v3v145v65 zabbix-agent]# ansible-playbook ./site.yaml --syntax-check //檢查語法
[root@10v3v145v65 zabbix-agent]# ansible-playbook ./site.yaml\t//實施劇本

/<code>

配置自動發現


一、創建發現規則

Configuration ---- discovery ---- Create discovery rule


搭建環境tomcat+nginx+keepalived+zabbix

圖片-1


搭建環境tomcat+nginx+keepalived+zabbix

圖片-2


二、主機自動加入主機組並關聯模板

2.1、為discovery(發現)創建action(動作)

Configuration ---- Actions ---- Event source(Discovery) ---- Create action


搭建環境tomcat+nginx+keepalived+zabbix

圖片-3


搭建環境tomcat+nginx+keepalived+zabbix

圖片-4


搭建環境tomcat+nginx+keepalived+zabbix

圖片-5


搭建環境tomcat+nginx+keepalived+zabbix

圖片-6


搭建環境tomcat+nginx+keepalived+zabbix

圖片-7


架構圖


搭建環境tomcat+nginx+keepalived+zabbix

架構圖


附錄1

<code>[root@10v3v145v65 ~]# vim copy-key.sh

#!/usr/bin/env bash
#
# Author: cyy
# GitHub: cyylog。GitHub
# usage: transfer key

rpm -qa | grep expect
if [ ! $? -eq 0 ];then
yum -y install expect
fi

CreateKey(){
/usr/bin/expect < spawn ssh-keygen
expect ":" { send "\\r" }
expect ":" { send "\\r" }
expect ":" { send "\\r" }
expect eof
EOF
}

TransferKey(){
/usr/bin/expect < spawn ssh-copy-id $User@$Ip
expect "yes/no" { send "yes\\r" }
expect "password:" { send "$Passwd\\r" }
expect eof
EOF
}

Information(){
read -p"please input your username: " User
read -p"please input your IPaddress: " Ip
read -p"please input your passeord: " Passwd

}

if [ -f $HOME/.ssh/id_rsa ];then
Information
TransferKey
else
CreateKey

Information
TransferKey
fi
/<code>



分享到:


相關文章: