基于nginx+keepalived实现负载均衡和高可用

基于nginx+keepalived实现负载均衡和高可用

一、准备工作

在这里插入图片描述

1.修改主机名(参照机器名表,每台机器都需要修改)

hostnamectl sethostname [机器名]
su

2.关闭NetworkManger(每台机器都需要关闭)

service NetworkManger stop
systemctl disable NetworkManger

3.关闭防火墙(每台机器都需要关闭)

service firewalld stop
systemctl disable firewalld
### 8.配置静态ip地址(每台机器都需要配置,注意IP地址不同!)

4.配置静态ip地址(web1为例)

vim /etc/sysconfig/network-scripts/ifcfg-ens33

在这里插入图片描述

配置完后重启网卡

ifdown ens33
ifup ens33
service network restart

5.关闭selinux(每台机器都需要关闭)

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

6.下载epel源

yum install epel-release -y

二、nginx操作(web服务器和负载均衡器上进行)

Nginx的官方网站:https://nginx.org/

1.准备工作

下载必要工具
yum install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make psmisc net-tools lsof vim wget -y
新建用户和组以供后面使用

useradd  zyj999

nginx安装包存放位置

mkdir  /nginx
cd /nginx

2.开始配置nginx

下载并解压nginx的源码包

curl -O https://nginx.org/download/nginx-1.25.2.tar.gz
tar xf nginx-1.25.2.tar.gz 

进入解压后的目录并进行编译前的配置

cd nginx-1.25.2
./configure --prefix=/usr/local/zyj999  --user=zyj999 --group=zyj999  --with-http_ssl_module   --with-threads  --with-http_v2_module  --with-http_stub_status_module  --with-stream   --with-http_gunzip_module

双进程编译,编译安装

make -j 2
make install

配置PATH变量
PATH=/usr/local/scmiqiang99/sbin/: P A T H e c h o ′ P A T H = / u s r / l o c a l / s c m i q i a n g 99 / s b i n / : PATH echo 'PATH=/usr/local/scmiqiang99/sbin/: PATHechoPATH=/usr/local/scmiqiang99/sbin/:PATH’ >>/etc/bashrc

nginx,启动!

nginx

注意:若未进行编译安装而是用yum安装nginx的话,页面是下面这样的。会增加部分冗余,而且会缺少我们需要的部分配置,所以还是按照编译安装来好一些。
在这里插入图片描述

设置开机启动nginx

echo "/usr/local/scmiqiang99/sbin/nginx"  >>/etc/rc.local
chmod +x /etc/rc.d/rc.local

查看nginx运行状态(已运行)
在这里插入图片描述
注意:每次配置完nginx之后需要重新加载nginx

nginx -s reload

3.网页配置

进入web1机器,完成以下操作(下面是已经完成的展示效果)
在这里插入图片描述
在这里插入图片描述
在web2机器完成以下操作
在这里插入图片描述
在这里插入图片描述
在web1上添加host解析

[root@web1 conf]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.224.161  www.zyjweb1.com
192.168.224.161  www.999web1.com

在web2上添加host解析

[root@web2 conf]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.224.162  www.zyjweb2.com
192.168.224.162  www.999web2.com

进入我们刚刚新编译的nginx

[root@web2 sbin]# cd /nginx/nginx-1.25.2/objs/
[root@web2 objs]# ls
addon  autoconf.err  Makefile  nginx  nginx.8  ngx_auto_config.h  ngx_auto_headers.h  ngx_modules.c  ngx_modules.o  src

替换成我们编译过的nginx

[root@web2 objs]# cp nginx  /usr/local/zyj999/sbin/
[root@web2 objs]#  重启nginx
 nginx -s reload

** 域名访问测试(以web1为例)**
在这里插入图片描述

4.流量监测

修改nginx配置文件同时开启流量监控(简易)

vim /usr/local/zyj999/conf/nginx.conf

在这里插入图片描述
在这里插入图片描述
简易流量监控测试访问
在这里插入图片描述
Active connections当前活动的客户端连接数,包括Waiting连接数;
Accepts 接受的客户端连接总数;
handled已处理的连接总数。通常,参数值与accepts 除非达到某些资源限制(例如,worker_connections限制)相同;
Requests 客户端请求总数。请求可以在原来已有的连接基础上进行,不需要再次连接
Reading nginx正在读取请求报文的当前连接数。 --》处理请求报文;
Writing nginx正在将响应写回到客户端的当前连接数。 --》处理响应报文;
Waiting 当前等待请求的空闲客户端连接数 --》占着茅坑不拉屎的人的数量–》已经建立连接的人,nginx服务器等待它们再次发起请求。

5.选做VTS流量监控(高级)

下载解压缩软件,将得到的文件解压

 yum install unzip -y
unzip nginx-module-vts-master.zip
cd  nginx-1.25.2
[root@web1 nginx-1.25.2]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  nginx-module-vts-master  nginx-module-vts-master.zip  objs  README  src
[root@web1 nginx-1.25.2]# 

重新编译一个新的nginx二进制文件,里面包含了新的虚拟主机的状态统计功能
重新进行编译前的配置

[root@web2 nginx-1.25.2]# ./configure --prefix=/usr/local/zyj999  --user=zyj999 --group=zyj999  --with-http_ssl_module   --with-threads  --with-http_v2_module  --with-http_stub_status_module  --with-stream   --with-http_gunzip_module  --add-module=/nginx/nginx-1.25.2/nginx-module-vts-master

编译

[root@web1 nginx-1.25.2]# make -j 2
[root@web1 nginx-1.25.2]# make

这里千万别make install!!!!!!否则前面已经修改过的nginx配置全都更新,又得配一遍。
把新编译完的nginx复制到/usr/local/zyj999/sbin下,Objs目录存放新编译好的nginx的二进制文件

[root@web1 nginx-1.25.2]# cd objs/
[root@web1 objs]# ls
addon  autoconf.err  Makefile  nginx  nginx.8  ngx_auto_config.h  ngx_auto_headers.h  ngx_modules.c  ngx_modules.o  src

热升级nginx

[root@web2 objs]# cd /usr/local/zyj999/sbin/
[root@web2 sbin]# ls
nginx
[root@web2 sbin]# mv nginx nginx.old

进入我们刚刚新编译的nginx

[root@web2 sbin]# cd /nginx/nginx-1.25.2/objs/
[root@web2 objs]# ls
addon  autoconf.err  Makefile  nginx  nginx.8  ngx_auto_config.h  ngx_auto_headers.h  ngx_modules.c  ngx_modules.o  src
[root@web2 objs]# cp nginx  /usr/local/zyj999/sbin/
[root@web2 objs]# 

开始给原来的nginx主进程发送12的信号,这样原来的nginx主进程会启动新的进程,达到新旧nginx进程共存。

[root@web2 objs]# ps aux|grep nginx
root       1078  0.0  0.0  47016  2192 ?        Ss   09:28   0:00 nginx: master process /usr/local/zyj999/sbin/nginx
zyj999    5100  0.0  0.0  47016  2064 ?        S    16:37   0:00 nginx: worker process
zyj999    5101  0.0  0.0  47016  2064 ?        S    16:37   0:00 nginx: worker process
zyj999    5102  0.0  0.0  47016  2300 ?        S    16:37   0:00 nginx: worker process
zyj999    5103  0.0  0.0  47016  2064 ?        S    16:37   0:00 nginx: worker process
root       5104  0.0  0.1 149920  5536 pts/0    S+   16:40   0:00 vim nginx.conf
root      12071  0.0  0.0 112824   980 pts/1    S+   17:19   0:00 grep --color=auto nginx
[root@web2 objs]# kill -12 1078
[root@web2 objs]# ps aux|grep nginx
root       1078  0.0  0.0  47016  2192 ?        Ss   09:28   0:00 nginx: master process /usr/local/zyj999/sbin/nginx
zyj999    5100  0.0  0.0  47016  2064 ?        S    16:37   0:00 nginx: worker process
zyj999    5101  0.0  0.0  47016  2064 ?        S    16:37   0:00 nginx: worker process
zyj999    5102  0.0  0.0  47016  2300 ?        S    16:37   0:00 nginx: worker process
zyj999    5103  0.0  0.0  47016  2064 ?        S    16:37   0:00 nginx: worker process
root       5104  0.0  0.1 149920  5536 pts/0    S+   16:40   0:00 vim nginx.conf
root      12073  0.0  0.0  46504  3528 ?        S    17:20   0:00 nginx: master process /usr/local/zyj999/sbin/nginx
zyj999   12074  0.0  0.0  46952  2032 ?        S    17:20   0:00 nginx: worker process
zyj999   12075  0.0  0.0  46952  2032 ?        S    17:20   0:00 nginx: worker process
zyj999   12076  0.0  0.0  46952  2032 ?        S    17:20   0:00 nginx: worker process
zyj999   12077  0.0  0.0  46952  2032 ?        S    17:20   0:00 nginx: worker process
root      12079  0.0  0.0 112824   980 pts/1    S+   17:20   0:00 grep --color=auto nginx
[root@web2 objs]# 

杀死老的nginx主进程和相关worker进程

[root@web2 objs]# kill -3  1078 
[root@web2 objs]# ps aux|grep nginx
root       5104  0.0  0.1 149920  5536 pts/0    S+   16:40   0:00 vim nginx.conf
root      12073  0.0  0.0  46504  3528 ?        S    17:20   0:00 nginx: master process /usr/local/zyj999/sbin/nginx
zyj999   12074  0.0  0.0  46952  2032 ?        S    17:20   0:00 nginx: worker process
zyj999   12075  0.0  0.0  46952  2032 ?        S    17:20   0:00 nginx: worker process
zyj999   12076  0.0  0.0  46952  2032 ?        S    17:20   0:00 nginx: worker process
zyj999   12077  0.0  0.0  46952  2032 ?        S    17:20   0:00 nginx: worker process
root      12081  0.0  0.0 112824   980 pts/1    S+   17:22   0:00 grep --color=auto nginx
[root@web2 objs]# 

查看新的nginx的配置,是否有VTS模块
在这里插入图片描述
在nginx配置文件添加以下几行

vim /usr/local/zyj999/conf/nginx.conf
location /status {
                vhost_traffic_status_display;
                vhost_traffic_status_display_format html;
        }

在这里插入图片描述
重启nginx服务

nginx -s reload

在windows上测试访问
192.168.224.161/statuus
在这里插入图片描述
可以看到各种监测效果,完毕!

三、负载均衡和高可用(Nginx+keepalived)

1.nginx默认的调度算法

在这里插入图片描述
1.轮询
2.最小连接数
3.ip-hash

2.三种常见的负载均衡+高可用设计

最早期的原始架构RR-DNS(域名解析轮询)
Lvs+keepalived实现高可用和负载均衡
Nginx+keepalived实现高可用和负载均衡

3.负载均衡(Nginx+keepalived)

负载均衡器连接web服务器

vim /user/local/zyj999/conf/nginx.conf

在这里插入图片描述
在这里插入图片描述

配置keepalived

yum install keepalived ipvsadm -y
service keepalived restart
systemctl  enable  keepalived
修改配置文件
vim /etc/keepalived/keepalived.conf

在这里插入图片描述
注意:LB1负载均衡器上的 VI_1 state 是MASTER, V2_1 state是BACKUP,这样才能体现一主一从。
修改完后重启keepalived

[root@lb1 keepalived]# service keepalived restart

查看keepalived效果
在LB1上查看ip地址
在这里插入图片描述
在LB2上查看ip地址
在这里插入图片描述
在浏览器上访问192.168.224.188,多刷新几次,因为默认是轮询,那么你看到的应该是这两个页面轮着来。
在这里插入图片描述
在这里插入图片描述
在浏览器上访问192.168.224.199,一样也是轮询。
在这里插入图片描述
在这里插入图片描述

4.高可用

如有有一台负载均衡器挂了怎么办?咱这就来试试
把第二台负载均衡器的keepalived关了

service keepalived stop

然后在LB1上查看ip地址,发现原本挂载在LB2的199首发vip转移到LB1上来了,再去访问192.168.224.188和192.168.224.199都可以正常访问,这就是负载均衡器的漂移效果,官方的话术就是高可用。
在这里插入图片描述
在LB2上重启keepalived

service keepalived restart

再去LB1上查看ip地址,发现192.168.224.199消失,已经转移到LB2上去了。
在这里插入图片描述

5.DR+keepalived

配置负载均衡和keepalived
用ipvsadm传参,并不是用keepalived传参。
负载均衡器利用了数据链路层,根据mac地址轮询,出去的时候直接出去,不会走lb
在两台负载均衡器上执行脚本

[root@lb1 ~]# cat lvs_dr.sh 
#!/bin/bash

#director 服务器上开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F -t nat
#删除所有的自定义链
iptables -X -t nat
#清空lvs里的规则
/usr/sbin/ipvsadm  -C
#添加lvs的规则
/usr/sbin/ipvsadm  -A -t 192.168.224.188:80  -s rr
/usr/sbin/ipvsadm  -A -t 192.168.224.199:80  -s rr
#-g 是指定使用DR模式 -w 指定后端服务器的权重值为1  -r 指定后端的real server  -t 是指定vip  -a 追加一个规则 append
/usr/sbin/ipvsadm -a -t 192.168.224.188:80 -r 192.168.224.161:80 -g  -w 1
/usr/sbin/ipvsadm -a -t 192.168.224.188:80 -r 192.168.224.162:80 -g  -w 1
/usr/sbin/ipvsadm -a -t 192.168.224.199:80 -r 192.168.224.161:80 -g  -w 1
/usr/sbin/ipvsadm -a -t 192.168.224.199:80 -r 192.168.224.162:80 -g  -w 1

执行该脚本

[root@lb1 ~]# bash lvs_dr.sh 
[root@lb1 ~]# ipvsadm -ln

在这里插入图片描述
可以看到出现了几条ipvs规则
在后端上进行配置

[root@web1 ~]# cat set_vip_arp.sh 
#!/bin/bash

#在lo接口(loopback)上配置vip
/usr/sbin/ifconfig   lo:0 192.168.224.188  netmask 255.255.255.255  broadcast 192.168.224.188 up
/usr/sbin/ifconfig   lo:1 192.168.224.199  netmask 255.255.255.255  broadcast 192.168.224.199 up
#添加一条主机路由到192.168.224.188/199 走lo:0接口
/sbin/route add -host 192.168.224.188 dev lo:0
/sbin/route add -host 192.168.224.199 dev lo:1
[root@web1 ~]# 

执行脚本

[root@web1 ~]# bash set_vip_arp.sh 

在这里插入图片描述
可以看到lo接口出现了两条策略,也出现了两条默认路由
设置开机自启

[root@web1 ~]# mkdir /lvs_dr
[root@web1 ~]# cp set_vip.sh  /lvs_dr/
[root@web1 ~]# echo "bash /lvs_dr/set_vip.sh"  >>/etc/rc.local 
[root@web1 ~]# cat /etc/rc.local 
#!/bin/bash

touch /var/lock/subsys/local
/usr/local/zyj999/sbin/nginx
bash /lvs_dr/set_vip.sh
[root@web1 ~]# chmod +x /etc/rc.d/rc.local 
[root@web1 ~]# 

四、搭建nfs服务器

[root@other ~]# hostnamectl set-hostname  nfs-server
[root@com_server ~]# su
[root@nfs-server ~]#
 [root@nfs-server ~]# yum install nfs-utils -y

建议web集群内的在web1和web2上也需要安装nfs-utils软件,因为节点服务器里需要支持nfs网络文件系统,需要挂载共享目录,
在web1和web2上都安装nfs-utils软件,不需要启动nfs服务,主要是使用nfs服务器共享的文件夹,需要去挂载nfs文件系统。
只是在nfs服务器上启动nfs服务并且设置开机启动,就可以了。

1.启用nfs

[root@nfs-server ~]# service nfs restart
Redirecting to /bin/systemctl restart nfs.service
[root@nfs-server ~]# systemctl  enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@nfs-server ~]# 

Web1和web2上安装nfs-utils软件包,支持nfs文件系统

[root@web1 ~]# yum  install nfs-utils -y
[root@web2 ~]# yum  install nfs-utils -y

2.设置共享目录

[root@nfs-server ~]# yum install vim net-tools -y
[root@nfs-server ~]# vim /etc/exports
[root@nfs-server ~]# cat /etc/exports

在这里插入图片描述
刷新服务,输出共享目录

[root@nfs-server ~]# exportfs -rv

在这里插入图片描述

3.新建共享目录/web和复制web1上的html目录过来

[root@nfs-server ~]# mkdir -p /web/
然后将web1上我们以前新建的2个网站的网页都scp到nfs的共享目录/web下
[root@web1 ~]# cd /usr/local/zyj999/
[root@web1 zyj999]# ls
client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp
[root@web1 zyj999]# scp -r  html  192.168.224.165:/web

设置/web文件夹的权限,允许其他人过来读写

[root@nfs-server web]# ll
总用量 0
drwxr-xr-x 4 root root 70 9月  23 11:10 html
[root@nfs-server web]# chown nfsnobody:nfsnobody  html/
[root@nfs-server web]# ll

在这里插入图片描述

4.刷新nfs或者重新输出共享目录

exportfs -a 输出所有共享目录
exportfs -v 显示输出的共享目录
exportfs -r 重新输出所有的共享目录

[root@nfs-server web]# exportfs -rv

在这里插入图片描述

[root@nfs-server web]# service nfs restart
Redirecting to /bin/systemctl restart nfs.service
[root@nfs-server web]# 

在web1和web2都挂着nfs共享的目录到html目录下

[root@web1 zyj999]# mount 192.168.224.165:/web/html  /usr/local/zyj999/html/

查看linux系统里的磁盘分区使用情况

[root@web1 zyj999]# df -Th

在这里插入图片描述
在web2上挂着nfs共享目录

[root@web2 html]# mount 192.168.224.165:/web/html  /usr/local/zyj999/html/
[root@web2 html]# df -Th  查看linux系统里的磁盘分区使用情况

在这里插入图片描述
取消挂载

[root@web2 ~]# umount /usr/local/zyj999/html/

设置web1和web2开机自动挂着nfs共享目录

[root@web1 html]# vim /etc/rc.local 
touch /var/lock/subsys/local
/usr/local/scmiqiang99/sbin/nginx
bash /lvs_dr/set_vip_arp.sh
#添加下面的配置
mount 192.168.224.165:/web/html  /usr/local/scmiqiang99/html/
[root@web1 html]# 
[root@web2 html]# vim /etc/rc.local 
touch /var/lock/subsys/local
/usr/local/zyj999/sbin/nginx
bash /lvs_dr/set_vip_arp.sh
#添加下面的配置
mount 192.168.224.165:/web/html  /usr/local/scmiqiang99/html/
[root@web2 html]# 

五、配置ANSIBLE

1.下载相关包

[root@nfs-server web]# hostnamectl set-hostname  nfs-ansible
[root@nfs-server web]# su
[root@nfs-ansible web]# 
[root@nfs-ansible web]# yum install epel-release -y
[root@nfs-ansible web]# yum install ansible -y

进入ansible的配置文件目录
[root@nfs-ansible web]# cd /etc/ansible/
[root@nfs-ansible ansible]# ls
ansible.cfg hosts roles
[root@nfs-ansible ansible]#
ansible.cfg 是ansible的配置文件
hosts 里面定义主机清单
Roles 基于角色的playbook存放的文件夹

2.配置机器

[root@nfs-ansible ansible]# vim hosts 

#中括号里的web是什么?
答案:一个分组的名字,我们可以在这个分组里添加很多需要去管理的机器的ip地址
#分组的名字可以自定义(自己定义,随便写,但是需要有意义)
在这里插入图片描述

3.建立免密通道

在ansible服务器和其他的服务器之间建立免密通道(单向信任关系)
生成密钥对

[root@nfs-ansible ansible]# ssh-keygen 

上传公钥到其他服务器

上传公钥到web1、上传公钥到web2、上传公钥到LB1和LB2、防火墙服务器
[root@nfs-ansible ansible]# ssh-copy-id -i /root/.ssh/id_rsa.pub  [email protected]
[root@nfs-ansible ansible]# ssh-copy-id -i /root/.ssh/id_rsa.pub  [email protected]
[root@nfs-ansible ansible]# ssh-copy-id -i /root/.ssh/id_rsa.pub  [email protected]
[root@nfs-ansible ansible]# ssh-copy-id -i /root/.ssh/id_rsa.pub  [email protected]
[root@nfs-ansible ansible]# ssh-copy-id -i /root/.ssh/id_rsa.pub  [email protected]

4.测试ansible服务器能否控制所有的服务器

[root@nfs-ansible ansible]# ansible all -m shell  -a 'ip add'

显示如下即为正确(以web2为例)
在这里插入图片描述

六、搭建Prometheus服务

1.源码安装

[root@nfs-ansible ansible]# hostnamectl set-hostname nfs-ansible-prom
[root@nfs-ansible ansible]# su
[root@nfs-ansible-prom ansible]# 
[root@nfs-ansible-prom ansible]# mkdir /prom
[root@nfs-ansible-prom ansible]# cd /prom
这里需要相关的依赖包
[root@nfs-ansible-prom prom]# ls
grafana-enterprise-9.1.2-1.x86_64.rpm        prometheus-2.44.0.linux-amd64.tar.gz
node_exporter-1.4.0-rc.0.linux-amd64.tar.gz
[root@nfs-ansible-prom prom]# 

2.Prometheus基本配置

[root@nfs-ansible-prom prom]# tar xf prometheus-2.44.0.linux-amd64.tar.gz 
[root@nfs-ansible-prom prom]# ls
grafana-enterprise-9.1.2-1.x86_64.rpm        prometheus-2.44.0.linux-amd64
node_exporter-1.4.0-rc.0.linux-amd64.tar.gz  prometheus-2.44.0.linux-amd64.tar.gz
 [root@sc-prom prom]#

修改解压后的压缩包名字prometheus

[root@nfs-ansible-prom prom]# mv prometheus-2.44.0.linux-amd64 prometheus
[root@nfs-ansible-prom prom]# ls

在这里插入图片描述
临时和永久修改PATH变量,添加prometheus的路径

[root@nfs-ansible-prom prom]# PATH=/prom/prometheus:$PATH
[root@nfs-ansible-prom prom]# echo 'PATH=/prom/prometheus:$PATH'  >>/etc/profile
[root@nfs-ansible-prom prom]# 
[root@nfs-ansible-prom prom]# which prometheus
/prom/prometheus/prometheus
[root@nfs-ansible-prom prom]# 

把prometheus做成一个服务来进行管理,非常方便日后维护和使用

[root@nfs-ansible-prom prom]# vim /usr/lib/systemd/system/prometheus.service 
[Unit]
Description=prometheus
[Service]
ExecStart=/prom/prometheus/prometheus --config.file=/prom/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target

重新加载systemd相关的服务,识别Prometheus服务的配置文件

[root@nfs-ansible-prom prom]# systemctl  daemon-reload
[root@nfs-ansible-prom prom]# 

启动Prometheus服务

[root@nfs-ansible-prom prom]# systemctl start prometheus
[root@nfs-ansible-prom prom]# systemctl restart prometheus
[root@nfs-ansible-prom prom]# ps aux|grep prome

在这里插入图片描述设置开机启动

[root@nfs-ansible-prom prom]# systemctl enable prometheus
Created symlink from /etc/systemd/system/multi-user.target.wants/prometheus.service to /usr/lib/systemd/system/prometheus.service.
[root@nfs-ansible-prom prom]# 

访问Prometheus 的web server
http://192.168.224.165:9090
在这里插入图片描述
http://192.168.224.165:9090/metrics
在这里插入图片描述

3.安装exporter

在整个web集群节点服务器(任何一台linux系统,例如web1、web2、LB1、LB2等)上安装exporter程序
exporter 是Prometheus的客户端的数据采集工具–》go语言编写的
将node-exporter传递到所有的服务器上的/root目录下

[root@nfs-ansible-prom prom]# ansible all -m copy  -a 'src=node_exporter-1.4.0-rc.0.linux-amd64.tar.gz dest=/root/'

编写在其他机器上安装node_exporter的脚本

[root@nfs-ansible-prom prom]# vim install_node_exporter.sh 
#!/bin/bash

tar xf /root/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz  -C /
cd  /
mv node_exporter-1.4.0-rc.0.linux-amd64/ node_exporter
cd /node_exporter/
PATH=/node_exporter/:$PATH
echo 'PATH=/node_exporter/:$PATH' >>/etc/profile

#生成nodeexporter.service文件
cat >/usr/lib/systemd/system/node_exporter.service  <<EOF
[Unit]
Description=node_exporter
[Service]
ExecStart=/node_exporter/node_exporter --web.listen-address 0.0.0.0:9090 
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

#让systemd进程识别node_exporter服务
systemctl daemon-reload
#设置开机启动
systemctl  enable node_exporter
#启动node_exporter
systemctl  start node_exporter

在ansible服务器上执行安装node_exporter的脚本

[root@nfs-ansible-prom prom]# ansible all -m script  -a "/prom/install_node_exporter.sh"

显示黄色字体且每个机器都执行成功就OK
在其他的服务器上查看是否安装node_exporter成功

[root@web1 zyj999 ~]# ps aux|grep node

在这里插入图片描述
在Prometheus服务器上添加被监控的服务器
在prometheus服务器上添加抓取数据的配置,添加node节点服务器,将抓取的数据存储到时序数据库里

[root@nfs-ansible-prom prometheus]# ls
console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool
[root@nfs-ansible-prom prometheus]# vim prometheus.yml 
[root@nfs-ansible-prom prometheus]# cat prometheus.yml 
#my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

#Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

#Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

#A scrape configuration containing exactly one endpoint to scrape:
#Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

#添加下面的配置
      static_configs:
      - targets: ["192.168.224.161:9090"]
  - job_name: "web2"
    static_configs:
      - targets: ["192.168.224.162:9090"]
  - job_name: "lb1"
    static_configs:
      - targets: ["192.168.224.163:9090"]
  - job_name: "lb2"
    static_configs:
      - targets: ["192.168.224.164:9090"]
  - job_name: "firewall"
    static_configs:
      - targets: ["192.168.224.166:9090"]

重启Prometheus服务

[root@nfs-ansible-prom prometheus]# service prometheus restart
Redirecting to /bin/systemctl restart prometheus.service
[root@nfs-ansible-prom prometheus]# 

在windows的浏览器访问
http://192.168.224.165:9090/targets
在这里插入图片描述

4.安装grafana出图展示

安装,需要提前上传安装包grafana-enterprise-9.1.2-1.x86_64.rpm

[root@nfs-ansible-prom prom]# pwd
/prom
[root@nfs-ansible-prom prom]# ls

在这里插入图片描述

[root@nfs-ansible-prom prom]# yum install grafana-enterprise-9.5.1-1.x86_64.rpm -y
启动grafana
[root@nfs-ansible-prom prom]# systemctl start grafana-server
设置开机启动
[root@nfs-ansible-prom prom]# systemctl enable grafana-server
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.
[root@nfs-ansible-prom prom]# 

查看grafana是否启动

[root@nfs-ansible-prom prom]# ps aux|grep grafana

在这里插入图片描述

[root@nfs-ansible-prom prom]# netstat -anplut|grep grafana

在这里插入图片描述
登录,在浏览器里登录
http://192.168.224.165:3000
默认的用户名和密码是admin
修改一个新密码,然后会进入下面的图形
在这里插入图片描述
Grafana出图的配置
先配置prometheus的数据源。管理–》数据源–》add new data source–>prometheus
点击添加数据源(add data source),选择Prometheus数据库,选择8919模板。
在这里插入图片描述

七、堡垒机搭建

Tcp wrappers 的配置(允许堡垒机ssh访问)
将web集群里的web1和web2,LB1和LB2上进行tcp wrappers的配置,只允许堡垒机ssh进来,拒绝其他的机器ssh过去

[root@nfs-ansible-prom prom]# vim set_tcp_wrappers.sh
[root@nfs-ansible-prom prom]# cat set_tcp_wrappers.sh 

#!/bin/bash

#set /etc/hosts.allow文件的内容,只允许堡垒机访问sshd服务
 echo  'sshd:192.168.224.165'  >>/etc/hosts.allow
#单独允许我的windows系统也可以访问
 echo  'sshd:192.168.224.1'  >>/etc/hosts.allow
#拒绝其他的所有的机器访问sshd
echo  'sshd:ALL'  >>/etc/hosts.deny

** 对web组的机器配置tcp wrappers防火墙**

[root@nfs-ansible-prom prom]# ansible web -m script  -a "/prom/set_tcp_wrappers.sh"

黄色字体并且所有机器成功运行即可
测试是否生效,只允许堡垒机ssh过去

[root@lb1 keepalived]# ssh [email protected]
ssh_exchange_identification: read: Connection reset by peer

[root@lb1 keepalived]#
堡垒机可以ssh过去,说明tcp wrappers 配置成功

[root@nfs-server prom]# ssh [email protected]
Last login: Sun Oct  1 21:13:47 2023 from 192.168.224.165
[root@web1 ~]# exit
登出
Connection to 192.168.224.161 closed.
[root@nfs-server prom]# 

猜你喜欢

转载自blog.csdn.net/zhiyoujiu/article/details/133302906