cnetos部署高可用以及七层负载均衡

文章目录

centos部署高可用以及七层负载均衡

一、准备环境

准备两台服务器,作为前端服务器,第一台安装keepalived,haproxy,第二台安装keepalived,nginx

前提是做好epel镜像源

bash 复制代码
#第一台
yum install keepalived -y
yum install  haproxy -y


第二台
yum install keepalived -y
yum install nginx -y

再准备四台服务器作为后端服务器,两台作为web服务器,两台作为php服务器,统一安装Apache或者是nginx都行

bash 复制代码
yum install nginx -y
或
yum install httpd -y

安装完成后,统一进行时间同步

bash 复制代码
ntpdate ntp.aliyun.com

二、配置高可用

配置两台前端服务器

第一台:

vim /etc/keepalived/keepalived.conf 替换内容

bash 复制代码
! Configuration File for keepalived
global_defs {
 router_id 1                            #设备在组中的标识,设置不一样即可
 }

vrrp_script chk_haproxy {                        #健康检查
 script "/etc/keepalived/ck_ha.sh"     #检查脚本
 interval 2                            #检查频率.秒
 weight -5                             #priority减5
 fall 3                                        #失败三次
 }

#高可用集群的组员设置
vrrp_instance VI_1 {               #VI_1。实例名两台路由器相同。同学们要注意区分。
    state MASTER                        #主或者从状态
    interface ens33                     #监控网卡
    mcast_src_ip 192.168.116.131         #心跳源IP,当前主机的ip
    virtual_router_id 55                #虚拟路由编号,主备要一致。同学们注意区分
    priority 100                        #优先级 数值越大优先级越高
    advert_int 1                        #心跳间隔 单位是秒

    authentication {                    #秘钥认证(1-8位)
        auth_type PASS
        auth_pass 123456
    }

    virtual_ipaddress {                 #VIP 虚拟ip
    192.168.116.100/24
        }

  track_script {                       #引用脚本
       chk_haproxy
    }

}

vim /etc/keepalived/ck_ha.sh

bash 复制代码
#!/bin/bash
#检查nginx进程是否存在
counter=$(ps -C haproxy --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
#尝试启动一次nginx,停止5秒后再次检测
    systemctl start nginx
    sleep 5
    counter=$(ps -C haproxy --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
#如果启动没成功,就杀掉keepalive触发主备切换
        systemctl stop keepalived
    fi
fi

给上可执行权限

bash 复制代码
chmod +x /etc/keepalived/ck_ha.sh

启动
systemctl start keepalived.service

第二台:

vim /etc/keepalived/keepalived.conf

bash 复制代码
! Configuration File for keepalived
global_defs {
 router_id 1                            #设备在组中的标识,设置不一样即可
 }

vrrp_script chk_nginx {                        #健康检查
 script "/etc/keepalived/ck_ng.sh"     #检查脚本
 interval 2                            #检查频率.秒
 weight -5                             #priority减5
 fall 3                                        #失败三次
 }

#高可用集群的组员设置
vrrp_instance VI_1 {               #VI_1。实例名两台路由器相同。同学们要注意区分。
    state MASTER                        #主或者从状态
    interface ens33                     #监控网卡
    mcast_src_ip 192.168.116.132        #心跳源IP,当前主机的ip
    virtual_router_id 55                #虚拟路由编号,主备要一致。同学们注意区分
    priority 99                        #优先级 数值越大优先级越高低于第一台的优先级
    advert_int 1                        #心跳间隔 单位是秒

    authentication {                    #秘钥认证(1-8位)
        auth_type PASS
        auth_pass 123456
    }

    virtual_ipaddress {                 #VIP 虚拟ip
    192.168.116.100/24
        }

  track_script {                       #引用脚本
       chk_nginx
    }

}

vim /etc/keepalived/ck_ng.sh

bash 复制代码
#!/bin/bash
#检查nginx进程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
#尝试启动一次nginx,停止5秒后再次检测
    systemctl start nginx
    sleep 5
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
#如果启动没成功,就杀掉keepalive触发主备切换
        systemctl stop keepalived
    fi
fi

给上可执行权限

bash 复制代码
chmod +x /etc/keepalived/ck_ha.sh

启动
systemctl start keepalived.service

查看第一台的IP,查看是否有虚拟ip

bash 复制代码
ip a

查看第二台的ip,查看是否有虚拟ip,这一台正常情况下没有,只有第一台的down了才有,第一台的优先级较高

bash 复制代码
ip a

三、配置负载均衡

第一台的七层负载均衡器为haproxy

vim /etc/haproxy/haproxy.cfg 替换内容

bash 复制代码
global
	log 127.0.0.1 local3 info
	maxconn 4096
        uid nobody
#       uid 99
        gid nobody
#       gid 99
	daemon
	nbproc 1
	pidfile /run/haproxy.pid
defaults
	log		   global
	mode	   http
	maxconn 2048
	retries 	3
	option	redispatch
	timeout connect 5000
	timeout client 50000
	timeout server 50000
    option abortonclose

    stats uri /admin?stats			#这是实际的 URI 路径,显示有关负载均衡器的状态、流量和其他统计信息
    stats realm Private lands		
    stats auth admin:password		#户需要提供这个用户名和密码才能访问统计信息页面
    stats hide-version				#隐藏 HAProxy 的版本信息,这有助于增加安全性,防止潜在攻击者通过版本信息了解具体的 HAProxy 版本

frontend http-in					#定义了一个前端,负责处理来自客户端的请求
	bind 0.0.0.0:80					#前端将监听所有 IP 地址上的 80 端口
	mode http						#将前端配置为 HTTP 模式,适用于处理 HTTP 请求
	log global						
	option httplog					#启用 HTTP 日志记录模式,这样可以记录更详细的 HTTP 请求和响应信息到日志中
	option httpclose				#在响应结束后关闭连接,启用 HTTP/1.0 兼容性,确保每个请求都使用独立的连接
     acl html url_reg  -i  \.html$	#定义了一个 ACL(访问控制列表),使用正则表达式来匹配 URL,不区分大小写地匹配以 .html 结尾的 URL
     acl php url_reg  -i  \.php$
     use_backend html-server if  html	#根据 ACL 条件将请求路由到特定的 backend,这是定义的 backend 名称,当请求符合 html ACL 条件时,将请求路由到这个 backend
     use_backend php-server if  php
     default_backend html-server	#指定默认的 backend,当请求没有匹配到任何 ACL 时,将请求路由到这个 backend

backend html-server
	mode http
	balance roundrobin
	option httpchk GET /index.html
	cookie SERVERID insert indirect nocache
	server html-A 192.168.116.140:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
	server html-B 192.168.116.141:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
	
#这个 backend 配置定义了一个 HTTP 后端服务,使用轮询算法来平衡负载,并配置了基于 Cookie 的会话保持。还启用了 HTTP 健康检查,确保请求只被发送到健康的服务器。配置了两个服务器 html-A 和 html-B,分别具有一定的权重和健康检查设置。通过这种配置,可以确保流量均匀地分配到多个服务器,并且能够处理服务器的故障或异常

backend php-server
	mode http
	balance roundrobin
	option httpchk GET /index.php
	cookie SERVERID insert indirect nocache
	server php-A 192.168.116.143:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5
	server php-B 192.168.116.144:80 weight 1 cookie 2 check inter 2000 rise 2 fall 5

启动haproxy服务

bash 复制代码
systemctl start haproxy.service

第二台的七层负载均衡器为nginx

vim /etc/nginx/nginx.conf

bash 复制代码
#在http大括号内添加
	upstream html {
        server 192.168.229.13:80;
        server 192.168.229.14:80;
        }

    upstream php {
        server 192.168.229.15:80;
        server 192.168.229.16:80;
        }




#在server大括号内添加
location / {
        proxy_pass   http://html;
        }
        location ~ \.php$ {
         proxy_pass http://php;
        }

启动nginx

bash 复制代码
systemctl start nginx

四、配置后端服务器

这里使用的是nginx

bash 复制代码
#后四台的前两台作为web服务,添加网页内容
	#第一台
 echo web11111111 > /usr/share/nginx/html/index.html
 	#第二台
 echo web22222222 > /usr/share/nginx/html/index.html
 #正常情况下两台的内容是一样的,这里为了测试,网页要有区别

#后四台的后两台作为php服务,添加网页内容
cd /usr/share/nginx/html/
mv index.html index.php
#第一台
echo php111111111  > index.php
#第二台
echo php222222222  > index.php

后四台nginx全部启动

bash 复制代码
systemctl start nginx

五、测试

在任意一台服务器上安装elinks,因为使用浏览器会有缓存,测试结果不客观

bash 复制代码
yum install elinks -y

目前的虚拟IP地址在第一台高可用服务器上

使用elinks访问虚拟ip

bash 复制代码
elinks --dump http://192.168.116.100
elinks --dump http://192.168.116.100/index.php

可以看到是一替一次的访问不同服务器

然后我们将第一台的高可用给停掉,测试第二台的高可用和负载均衡

bash 复制代码
systemctl stop keepalived.service

这时第二台高可用服务器就有了虚拟IP,顶替了第一台高可用服务器的位置

再次使用elinks访问该虚拟IP

bash 复制代码
elinks --dump http://192.168.116.100
elinks --dump http://192.168.116.100/index.php

完结,注意配置并不完整,只是出现了基础效果,谨慎使用
回到顶层

相关推荐
人类群星闪耀时20 分钟前
大模型技术优化负载均衡:AI驱动的智能化运维
运维·人工智能·负载均衡
新时代农民工--小明1 小时前
前端自动化部署更新,自动化打包部署
运维·前端·自动化
一个不秃头的 程序员1 小时前
服务器上加入SFTP------(小白篇 1)
运维·服务器
fnd_LN1 小时前
Linux文件目录 --- 复制命令CP、递归复制目录、软连接、硬链接
linux·运维·服务器
MorleyOlsen2 小时前
【Trick】解决服务器cuda报错——RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED
运维·服务器·深度学习
周周的奇妙编程2 小时前
基于鲲鹏服务器的打砖块小游戏部署
运维·服务器
大熊程序猿2 小时前
airflow docker 安装
运维·docker·容器
会飞的土拨鼠呀2 小时前
chart文件结构
运维·云原生·kubernetes
人类群星闪耀时2 小时前
基于AI的网络流量分析:构建智能化运维体系
运维·人工智能
晚安,cheems3 小时前
linux的权限
linux·运维·服务器