基于keepalived和lvs的Web集群项目

目录

基于keepalivedlvs的Web集群项目

01.项目设计

地址分配

网卡类型 主机名 IP 地址 角色 / 用途
Bridged Firewall 192.168.1.60 防火墙 WAN 口
Host-only Firewall 192.168.181.132 防火墙 LAN 口
Host-only DNS+Ansible+Prometheus 192.168.181.133 综合服务
Host-only LB-Server1 192.168.181.134 负载均衡节点 1
Host-only LB-Server2 192.168.181.135 负载均衡节点 2
Host-only RealServer1 192.168.181.136 应用服务器 1
Host-only RealServer2 192.168.181.137 应用服务器 2
Host-only NFS-Server 192.168.181.138 共享存储服务器
Host-only JumpServer 192.168.181.139 堡垒机
ECS服务器 Database 115.191.1.146 数据库服务器

网络拓扑图

服务器配置

服务器 操作系统版本 配置
数据库 Rocky Linux 9.5 2C2G
JumpServer Rocky Linux 10.0 1C2G
其他服务器 Rocky Linux 10.0 1C0.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 业务的稳定运行。

相关推荐
Tony115411 小时前
CentOS7.9快速搭建prometheus
prometheus
盛夏绽放19 小时前
流式响应 线上请求出现“待处理”问题
前端·后端·nginx·proxy
%2521 小时前
Nginx
运维·nginx
坤虫debug21 小时前
Nginx 模块和指令的区别:http/server/location 不是模块,是指令
nginx
wfj1261 天前
服务器部署,用 nginx 部署后页面刷新 404 问题,宝塔面板修改(修改 nginx.conf 配置文件)
运维·服务器·nginx
匀泪1 天前
云原生(nginx环境设定)
java·nginx·云原生
unirst19850071 天前
nginx中的proxy_set_header参数详解
运维·网络·nginx
市安1 天前
基于Centos构建Nginx镜像(Dokerfile)
linux·运维·nginx·docker·容器·centos·镜像
之歆1 天前
Linux 集群与负载均衡(LVS)
linux·负载均衡·lvs