基于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/:
PATHecho′PATH=/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 root@192.168.224.161
[root@nfs-ansible ansible]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.224.162
[root@nfs-ansible ansible]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.224.163
[root@nfs-ansible ansible]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.224.164
[root@nfs-ansible ansible]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.224.166
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 root@192.168.224.161
ssh_exchange_identification: read: Connection reset by peer
[root@lb1 keepalived]#
堡垒机可以ssh过去,说明tcp wrappers 配置成功
[root@nfs-server prom]# ssh root@192.168.224.161
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]#