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

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

相关推荐
一心0926 小时前
ubuntu 20.04.6 sudo 源码包在线升级到1.9.17p1
运维·ubuntu·sudo·漏洞升级
好好学习啊天天向上6 小时前
世上最全:ubuntu 上及天河超算上源码编译llvm遇到的坑,cmake,ninja完整过程
linux·运维·ubuntu·自动性能优化
你想考研啊7 小时前
三、jenkins使用tomcat部署项目
运维·tomcat·jenkins
代码老y7 小时前
Docker:容器化技术的基石与实践指南
运维·docker·容器
典学长编程8 小时前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
DuelCode8 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
爬山算法10 小时前
MySQL(116)如何监控负载均衡状态?
数据库·mysql·负载均衡
你想考研啊10 小时前
四、jenkins自动构建和设置邮箱
运维·jenkins
Code blocks10 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
饥饿的半导体11 小时前
Linux快速入门
linux·运维