目录

基于keepalivedlvs的Web集群项目

01.项目设计

地址分配

网卡类型主机名IP 地址角色 / 用途
BridgedFirewall192.168.1.60防火墙 WAN 口
Host-onlyFirewall192.168.181.132防火墙 LAN 口
Host-onlyDNS+Ansible+Prometheus192.168.181.133综合服务
Host-onlyLB-Server1192.168.181.134负载均衡节点 1
Host-onlyLB-Server2192.168.181.135负载均衡节点 2
Host-onlyRealServer1192.168.181.136应用服务器 1
Host-onlyRealServer2192.168.181.137应用服务器 2
Host-onlyNFS-Server192.168.181.138共享存储服务器
Host-onlyJumpServer192.168.181.139堡垒机
ECS服务器Database115.191.1.146数据库服务器

网络拓扑图

在这里插入图片描述

服务器配置

服务器操作系统版本配置
数据库Rocky Linux 9.52C2G
JumpServerRocky Linux 10.01C2G
其他服务器Rocky Linux 10.01C0.5G

需求与目标

搭建一个满足了 Web 业务的高可用需求的集群项目

02.环境准备

初始化

编写init.sh初始化脚本

#!/bin/bash 
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

#改变selinux参数
setenforce 0
sed  -i  '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config

#下载一些必要的软件
yum install wget vim net-tools -y

主机名按照地址分配时设定的Hostname进行设置

hostnamectl set-hostname XXX

配置静态IP

防火墙IP配置
  • WAN口
vim /etc/NetworkManager/system-connections/ens160.nmconnection  # WAN口 桥接模式
# 配置静态IP 网关可以在cmd中用ipconfig/all 查看
[ipv4]
method=manual
addresses1=192.168.1.60/24,192.168.1.1
dns=114.114.114.114

更改完配置文件之后重新加载网卡

chmod 600 /etc/NetworkManager/system-connections/ens160.nmconnection
nmcli connection reload ens160
nmcli connection up  ens160
  • LAN口

查看网卡名称(有时候在/etc/NetworkManager/system-connections/下查看不到第二块网卡)

nmcli connection show

加载第二块网卡(ens224

nmcli connection modify "Wired connection 1" connection.id ens224
nmcli connection reload
vim /etc/NetworkManager/system-connections/ens224.nmconnection
# LAN 口作为内部服务器的网关,自己不需要配置网关
[ipv4]
method=manual
addresses1=192.168.181.132/24

更改完配置文件之后重新加载网卡

chmod 600 /etc/NetworkManager/system-connections/ens224.nmconnection 
nmcli connection reload ens224
nmcli connection up  ens224
其他服务器配置

修改网卡配置文件

vim /etc/NetworkManager/system-connections/ens160.nmconnection 
#dns改为DNS服务器的地址,网关改成防火墙LAN口的地址
[ipv4]
method=manual
addresses1=192.168.181.137/24,192.168.181.132
dns=192.168.181.133

更改完配置文件之后重新加载网卡

chmod 600 /etc/NetworkManager/system-connections/ens160.nmconnection
nmcli connection reload ens160
nmcli connection up  ens160

防火墙搭建

开启路由转发功能
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
在编写iptables规则脚本

/root/firewall_rule.sh

# 1. 开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward

# 2. 清空规则
iptables -F
iptables -t nat -F

# 3. 配置 SNAT(内网流量伪装成外网 IP 访问外网)
iptables -t nat -A POSTROUTING -s 192.168.181.0/24 -o ens160   -j MASQUERADE

# 4. 配置 DNAT(这里的LB双VIP机制没有用到,需再配置一台防火墙进行转发,由于配置有限暂未实现)
iptables -t nat -A PREROUTING -d 192.168.1.60 -i ens160 -p tcp --dport 80 -j DNAT --to-destination 192.168.181.200

# 5. 配置Prometheus端口转发
iptables -t nat -A PREROUTING -d 192.168.1.60 -i ens160 -p tcp --dport 9090 -j DNAT --to-destination 192.168.181.133:9090

# 6. 配置Grafana端口转发
iptables -t nat -A PREROUTING -d 192.168.1.60 -i ens160 -p tcp --dport 3000 -j DNAT --to-destination 192.168.181.133:3000

# 7. 配置Jumpserver端口转发
iptables -t nat -A PREROUTING -d 192.168.1.60 -i ens160 -p tcp --dport 8080 -j DNAT --to-destination 192.168.181.139:80
保留iptables规则
# 执行脚本
bash /root/firewall_rule.sh

# 保存iptable规则
iptables-save >/etc/sysconfig/iptables_rules

# 开机执行
echo "iptables-restore   < /etc/sysconfig/iptables_rules" >> /etc/rc.local

# 授予可执行权限 **********一定要做这一步
chmod +x /etc/rc.d/rc.local
查看**iptables**规则
iptables -L -t nat  -n

03.基础服务

DNS服务器搭建

1.安装bind软件
yum install openssl  bind bind-utils -y
2.设置named服务
systemctl start named && systemctl enable named
3.查看服务监听的端口
[root@AnsibleServer named]# ss -anplut |grep named
udp   UNCONN 0      0                        192.168.181.141:53        0.0.0.0:*    users:(("named",pid=1888,fd=21))
udp   UNCONN 0      0                              127.0.0.1:53        0.0.0.0:*    users:(("named",pid=1888,fd=17))
udp   UNCONN 0      0                                  [::1]:53           [::]:*    users:(("named",pid=1888,fd=22))
udp   UNCONN 0      0      [fe80::20c:29ff:fe29:9dff]%ens160:53           [::]:*    users:(("named",pid=1888,fd=6)) 
tcp   LISTEN 0      5                              127.0.0.1:953       0.0.0.0:*    users:(("named",pid=1888,fd=26))
tcp   LISTEN 0      10                       192.168.181.141:53        0.0.0.0:*    users:(("named",pid=1888,fd=24))
tcp   LISTEN 0      10                             127.0.0.1:53        0.0.0.0:*    users:(("named",pid=1888,fd=18))
tcp   LISTEN 0      10                                 [::1]:53           [::]:*    users:(("named",pid=1888,fd=23))
tcp   LISTEN 0      10     [fe80::20c:29ff:fe29:9dff]%ens160:53           [::]:*    users:(("named",pid=1888,fd=20))
tcp   LISTEN 0      5                                  [::1]:953          [::]:*    users:(("named",pid=1888,fd=27))
4.修改配置文件
vim /etc/named.conf

修改三处地方改成any

        listen-on port 53 { any; };               《======
        listen-on-v6 port 53 { any; };			  《======
        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";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { any; };				   《======
5.配置缓存域名功能

/etc/named.rfc1912.zones中增加这样的一段配置:

zone "tom.com" IN {
        type primary;
        file "tom.com.zone";
        allow-update {none; };
};

创建 tom.com.zone 文件:

vim /var/named/tom.com.zone

里面的配置为:

$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
lb1  IN A 192.168.181.134
lb2  IN A 192.168.181.135
web1 IN A 192.168.181.136
web2 IN A 192.168.181.137
nfs  IN A 192.168.181.138
jump IN A 192.168.181.139
@ IN A  192.168.181.133
@ IN NS ns1.tom.com.
ns1 IN A 192.168.181.133
6.修改本地DNS配置

DNS服务器配置文件目录为/etc/NetworkManager/system-connections/

[ipv4]
method=manual
addresses1=192.168.181.141/24,192.168.181.140
dns=192.168.181.141;114.114.114.114  #  《======改成自己IP地址
7.刷新named服务
systemctl restart named
8.检查/etc/resolv.conf

查看是否是配置的本地DNS服务器的地址

[root@AllServer ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.181.133
nameserver 114.114.114.114

搭建NFS服务器

客户端和服务端都下载nfs服务

yum install nfs-utils -y
服务端配置

1.启动nfs开机自启动

systemctl start nfs-server && systemctl enable nfs-server

2.修改exports文件

vim /etc/exports
/web/html  192.168.181.0/24(rw,sync,all_squash)

3.暴露挂载点

exportfs -rv
服务端配置
# 挂在前记得先安装nginx
mount nfs.tom.com:/web/html /usr/local/nginx1/html/
# 考虑开机自启动
echo "mount nfs.tom.com:/web/html /usr/local/nginx1/html/" >> /etc/rc.local
#  授权授权
chmod +x /etc/rc.d/rc.local

04.应用服务

Ansible服务器搭建

1.安装ansible
yum install epel-release ansible-core sshpass -y 
2.配置主机清单

主机清单文件路径:/etc/ansible/hosts

[LB]
lb1.tom.com
lb2.tom.com

[WEB]
web1.tom.com
web2.tom.com

[NFS]
nfs.tom.com

[DNS]
tom.com

[JUMP]
jump.tom.com
3.建立免密通道
  • 生成密钥
ssh-keygen  # 生成密钥  一直enter就行
  • 传递密钥
ssh-copy-id -i /root/.ssh/id_ed25519.pub root@$1
  • 编写初始化脚本
 vim /shell/init.sh
#!/bin/bash 
##关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

#改变selinux参数
setenforce 0
sed  -i  '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config

#安装软件
yum install net-tools wget net-tools vim   -y
  • 通过ansible进行服务器初始化
ansible LB -m script -a "/shell/init.sh"
ansible LB -m yum -a "name=keepalived"
故障

如果其他机器是同一台机器克隆所得,那么会出现host认证指纹重复,需要这样做解决

# 删除原来的主机密钥
sudo rm -f /etc/ssh/ssh_host_*

# 重新生成新的、唯一的主机密钥
sudo ssh-keygen -A

# 重启 SSH 服务
sudo systemctl restart sshd

再删除**/root/.ssh/**下的所有文件,重新建立免密通道

LB服务器搭建

1.下载keepalived软件
yum install keepalievd  -y
# 也可以在ansible服务器上执行 ansible LB -m yum -a "name=keepalived"
2.修改配置文件
vim /etc/keepalived/keepalived.conf 

下面对LB进行配置,使用的是keepalived实现高可用**(HA)**,使用lvsDR模式(直接路由)进行负载均衡

LB1的配置
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict  《——————关掉严格模式
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface ens160
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.181.200    
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.181.201
    }
}

virtual_server 192.168.181.200  80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.181.136 80 {
        weight 1
        HTTP_GET {
            url {
              path /
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.181.137 80 {
        weight 1
        HTTP_GET {
            url {
              path /
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 192.168.181.201  80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.181.136 80 {
        weight 1
        HTTP_GET {
            url {
              path /
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.181.137 80 {
        weight 1
        HTTP_GET {
            url {
              path /
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

LB2的配置
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 50
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.181.200
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens160
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
      192.168.181.201
	}
}

virtual_server 192.168.181.201 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    persistence_granularity 255.255.255.255
    protocol TCP

    real_server 192.168.181.136 80 {
        weight 1
        HTTP_GET {
            url {
              path /
	      status_code 200
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    
    real_server 192.168.181.137 80 {
        weight 1
        HTTP_GET {
            url {
              path /
	      status_code 200
            }
            connect_timeout 3
            retry 3
           delay_before_retry 3
        }
    }
}

virtual_server 192.168.181.200 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    persistence_granularity 255.255.255.255
    protocol TCP

    real_server 192.168.181.136 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    
    real_server 192.168.181.137 80 {
        weight 1
        HTTP_GET {
            url {
              path /
	      status_code 200
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

配置完启动服务再查看IP地址

systemctl start keepalived && systemctl enable keepalived
# LB1的配置
[root@LB1 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:43:d0:fc brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname enx000c2943d0fc
    inet 192.168.181.134/24 brd 192.168.181.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.181.200/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe43:d0fc/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

# LB2的配置
[root@LB2 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:a0:82:3a brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname enx000c29a0823a
    inet 192.168.181.135/24 brd 192.168.181.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.181.201/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fea0:823a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
LB服务器开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

在WEB服务器上绑定VIP和主机路由

vim /root/vip_set.sh
# 只绑定 LVS 使用的 VIP
ip addr add 192.168.181.200/32 dev lo
ip addr add 192.168.181.201/32 dev lo

# 添加主机路由
ip route add 192.168.181.200/32 dev lo:0
ip route add 192.168.181.201/32 dev lo:1

同时设置开机自启动

bash /root/vip_set.sh
echo "bash /root/vip_set.sh >>/etc/rc.local"
# 授权授权********
chmod +x /etc/rc.d/rc.local

RealServer服务器

创建一键安装脚本
vim /root/one_key_install_nginx.sh
#!/bin/bash 
#改主机名
hostnamectl set-hostname web-nginx1
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

#改变selinux参数
setenforce 0
sed  -i  '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config

id Tom || useradd Tom

#下载依赖库
yum install gcc vim  openssl-devel  pcre2-devel  zlib-devel git  -y

cd /usr/local/src/
git clone https://github.com/vozlt/nginx-module-vts.git

#创建文件夹
mkdir -p /nginx
cd /nginx

#下载压缩包
yum install wget -y
wget  https://nginx.org/download/nginx-1.29.4.tar.gz 

#解压
tar -xf nginx-1.29.4.tar.gz

#进入软件包
cd nginx-1.29.4/

#产生Makefile文件
./configure  --prefix=/usr/local/nginx1 --user=Tom --group=Tom  --with-http_ssl_module  --with-http_v2_module  --with-http_v3_module  --with-http_sub_module  --with-stream  --with-stream_ssl_module  --with-threads  --with-http_stub_status_module   --add-module=/usr/local/src/nginx-module-vts

#编译
make -j 2
#编译安装
make install

#进入nginx
cd /usr/local/nginx1/sbin

#修改path变量
PATH=/usr/local/nginx1/sbin:$PATH
echo 'PATH=/usr/local/nginx1/sbin:$PATH'>> /etc/bashrc

#考虑nginx开机自启
echo  '/usr/local/nginx1/sbin/nginx' >>/etc/rc.local
chmod +x /etc/rc.d/rc.local

#启动
nginx
echo "nginx 安装启动完成"
执行脚本
bash /root/one_key_install_nginx.sh

MySQL配置

创建一键安装脚本

**注意:**此脚本适用于Rocky Linux 9版本

vim /root/one_key-install_mysql.sh
#!/bin/bash
set -e
yum install wget -y
wget https://dev.mysql.com/get/mysql80-community-release-el9-4.noarch.rpm
dnf -y install mysql80-community-release-el9-4.noarch.rpm
dnf -y install mysql-community-server
systemctl start mysqld
systemctl enable mysqld
origin=$(cat /var/log/mysqld.log |grep password|sed 's/.*host: //')
mysql -uroot -p"$origin" #<<EOF
#alter user 'root'@'localhost'  identified by "@Deng111";
#exit
#EOF
执行脚本
bash  /root/one_key-install_mysql.sh
修改密码
alter user user() identified by '@Aa111'

05.运维与监控

Prometheus配置

1.创建一键安装脚本
vim /root/one_key_install_promethus.sh
mkdir /prometheus
cd /prometheus
wget https://github.com/prometheus/prometheus/releases/download/v3.9.1/prometheus-3.9.1.linux-amd64.tar.gz
tar xf prometheus-3.9.1.linux-amd64.tar.gz  
mv prometheus-3.9.1.linux-amd64 prometheus
cd prometheus
PATH=/prometheus/prometheus:$PATH
echo "PATH=/prometheus/prometheus:$PATH" >> /etc/bashrc 
cat > /usr/lib/systemd/system/prometheus.service << EOF
[Unit]
# 服务描述
Description=Prometheus Monitoring System
# 依赖:网络就绪后启动
After=network.target remote-fs.target nss-lookup.target

[Service]
# 运行用户(建议创建专用用户,避免root)
User=prometheus
Group=prometheus
# 进程类型:forking表示启动后会fork子进程
Type=simple
# 禁止核心转储(避免占用磁盘)
LimitCORE=infinity
# 打开文件数限制(Prometheus需要大文件描述符)
LimitNOFILE=65535
# 进程数限制
LimitNPROC=65535
# 工作目录(Prometheus安装目录,需根据你的实际路径修改)
WorkingDirectory=/prometheus/prometheus
# 启动命令(指定配置文件路径,需根据实际路径修改)
ExecStart=/prometheus/prometheus/prometheus  \
  --config.file=/prometheus/prometheus/prometheus.yml \
  --storage.tsdb.path=/data/prometheus \
  --web.listen-address=0.0.0.0:9090 \
  --web.read-timeout=5m \
  --web.max-connections=10 \
  --query.max-concurrency=20 \
  --query.timeout=2m
# 重启策略:异常退出时自动重启
Restart=on-failure
# 重启间隔
RestartSec=5s
# 日志重定向(集成到systemd日志)
StandardOutput=journal
StandardError=journal
SyslogIdentifier=prometheus

[Install]
# 开机自启的目标级别
WantedBy=multi-user.target
EOF

useradd prometheus
mkdir /data/prometheus -p
cd /data/prometheus/
chown -R prometheus:prometheus /data/prometheus
systemctl daemon-reload
2.执行脚本
bash /root/one_key_install_prometheus.sh
3.启动prometheus
systemctl start prometheus && systemctl enable prometheus
4.效果图

在这里插入图片描述

node_exporter配置

1.在ansible服务器执行
wget https://github.com/prometheus/node_exporter/releases/download/v1.10.2/node_exporter-1.10.2.linux-amd64.tar.gz
ansible all -m copy -a 'src=/root/node_exporter-1.10.2.linux-amd64.tar.gz dest=/root'
2.编写一键安装脚本
vim /root/node_exporter.sh
mkdir /node_exporter
cd /node_exporter
cp /root/node_exporter-1.10.2.linux-amd64.tar.gz .
tar xf node_exporter-1.10.2.linux-amd64.tar.gz
mv node_exporter-1.10.2.linux-amd64  node_exporter
cat > /usr/lib/systemd/system/node_exporter.service << EOF
[Unit]
# 服务描述
Description=Node Exporter - Prometheus Host Metrics Collector
# 依赖:网络就绪后启动
After=network.target remote-fs.target nss-lookup.target
# 优先级:在Prometheus之前启动(可选,若本机部署Prometheus)
Before=prometheus.service

[Service]
# 运行用户(建议专用用户,避免root)
User=node_exporter
Group=node_exporter
# 进程类型:simple(Node Exporter无fork,直接前台运行)
Type=simple
# 资源限制:放开文件数/进程数限制
LimitCORE=infinity
LimitNOFILE=65535
LimitNPROC=65535
# 工作目录(Node Exporter安装目录,需按实际路径修改)
WorkingDirectory=/node_exporter
# 启动命令(指定二进制路径+自定义参数,需修改路径)
ExecStart=/node_exporter/node_exporter/node_exporter \
  --web.listen-address=0.0.0.0:9100 \
  --web.telemetry-path=/metrics \
  --collector.disable-defaults \
  --collector.cpu \
  --collector.meminfo \
  --collector.diskstats \
  --collector.netdev \
  --collector.loadavg \
  --collector.filesystem \
  --collector.processes \
  --collector.systemd
# 重启策略:异常退出/崩溃时自动重启
Restart=on-failure
RestartSec=5s
# 日志集成到systemd日志
StandardOutput=journal
StandardError=journal
SyslogIdentifier=node_exporter

[Install]
# 开机自启目标级别
WantedBy=multi-user.target
EOF

useradd node_exporter
PATH=/node_exporter/node_exporter:$PATH
chown -R node_exporter:node_exporter /node_exporter/node_exporter
chmod 755 /node_exporter/node_exporter
systemctl start node_exporter
#systemctl status node_exporter 
systemctl enable  node_exporter 

3.用ansible执行脚本
ansible all -m script -a "/root/node_exporter.sh"
4.修改prometheusyaml文件
vim /prometheus/prometheus/prometheus.yml
  # 末行修改
  - job_name: "prometheus"
    static_configs:
      - targets: ["192.168.181.133:9090"]
        labels:
          app: "prometheus"
  - job_name: "nfs"
    static_configs:
      - targets: ["192.168.181.138:9100"]
        labels:
          app: "nfs"
  - job_name: "realserver1"
    static_configs:
      - targets: ["192.168.181.136:9100"]
        labels:
          app: "realserver1"
  - job_name: "realerver2"
    static_configs:
      - targets: ["192.168.181.137:9100"]
        labels:
          app: "realserver2"
  - job_name: "lb1"
    static_configs:
      - targets: ["192.168.181.134:9100"]
        labels:
          app: "lb1"
  - job_name: "lb2"
    static_configs:
      - targets: ["192.168.181.135:9100"]
        labels:
          app: "lb2"
  - job_name: "jumpserver"
    static_configs:
      - targets: ["192.168.181.139:9100"]
        labels:
          app: "jumpserver"
5.重启prometheus服务
systemctl restart prometheus
6.效果图

访问防火墙WAN口的9090端口

在这里插入图片描述

Grafana配置

1.安装软件包
yum install grafana
2.启动服务
systemctl start grafana-server && systemctl enable grafana-server
3.访问防火墙WAN口的3000端口

在这里插入图片描述

首次登录默认账号密码:

admin/admin

4.修改时区和语言

在这里插入图片描述

在这里插入图片描述

5.创建数据源

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

输入prometheus服务器的IP

在这里插入图片描述

在这里插入图片描述

6.配置仪表盘

在这里插入图片描述

在这里插入图片描述

输入8919点击load(8919是中文的,效果挺好)

在这里插入图片描述

在这里插入图片描述

7.效果图

在这里插入图片描述

安装部署jumpserver

可以参考JumpServer 文档进行配置

1.更新仓库并下载必要的软件
yum update
yum install -y wget curl tar gettext iptables
2.下载mariadb
yum install mariadb-server -y
systemctl start mariadb && systemctl enable mariadb
3.修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY  '@Aa111';
4.下载jumpserver软件包

去官网安装最新的Jumpserver离线包放到/opt目录下

cd /opt
tar -xf jumpserver-ce-v4.10.15-x86_64.tar.gz
cd jumpserver-ce-v4.10.15-x86_64
# 安装
./jmsctl.sh install
# 启动
./jmsctl.sh start
5.访问防火墙WAN口的8080端口

账号:admin

密码:ChangeMe

6.效果图

在这里插入图片描述

7.添加资产

在这里插入图片描述

可以进行资产授权管理集群

总结

本项目围绕 “高可用、可扩展、易运维” 核心目标,构建了一套基于 Keepalived+LVS 的企业级 Web 集群架构,整合了 DNS 解析、NFS 共享存储、Ansible 自动化运维、Prometheus+Grafana 监控及 JumpServer 堡垒机安全管控,形成从底层网络到上层业务的全链路解决方案,可支撑中小规模 Web 业务的稳定运行。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐