基于EBAZ4205矿板的图像处理:12二值化图像的膨胀与腐蚀

基于EBAZ4205矿板的图像处理:12二值化图像的膨胀与腐蚀

先看效果

在这里插入图片描述
注意:我的项目中的膨胀和腐蚀是对二值化图像中的像素值为255的像素进行处理,而我的图像中255为白色,0为黑色,所以是对颜色为白色的像素点进行的膨胀和腐蚀,别看错了。
如上图所见,膨胀效果能够消除图像中的毛刺,将区域连通,扩大了数据。
腐蚀效果能够抹除部分像素数据,放大图像中的毛刺,让区域变得不连通。

算法讲解

在这里插入图片描述
这里不对膨胀和腐蚀算法本身进行介绍,有的是讲的好的。

本项目中,是对一个滑动窗口内的所有像素进行统计,统计像素值为255的点,计为data_sum。
而膨胀算法就是当data_sum大于等于3(或者更小)时,就让该滑动窗口的中心点的像素值为255.
而腐蚀算法就是当data_sum大于等于6(或者更大)时,才让该滑动窗口的中心点的像素值为255

算法的FPGA部署

在这里插入图片描述

这里就是先进行图像的局部阈值二值化,将图像变为二值化图像,然后对二值化图像进行膨胀腐蚀操作。膨胀腐蚀系数这里,我直接开辟了一个端口出来,让它和局部阈值二值化系数一样都可以通过ps端进行调节。

然后在ps端,我是通过使用UART接受中断来接受用户通过串口发送的数据,用户可以通过串口动态调整局部阈值二值化系数和膨胀腐蚀系数。

block design

在这里插入图片描述

AXILiteCtrlThreshold模块

在这里插入图片描述
这个模块就是一个能让PS端能通过AXILIte总线读写PL端reg的模块,从而能动态调整局部二值化阈值和膨胀腐蚀系数阈值。
我的上一篇和上上篇都讲过怎么创建了。这里不说了。

项目代码

图像处理总模块

//作者:抢公主的大魔王
//日期:24.5.15
module video_processor((* X_INTERFACE_IGNORE = "true" *) input         frame_clk,    //cmos 像素时钟(* X_INTERFACE_IGNORE = "true" *) input         frame_rst_n,  //预处理图像(* X_INTERFACE_IGNORE = "true" *) input         pre_vsync, //预处理图像场同步信号(* X_INTERFACE_IGNORE = "true" *) input [23:0]  pre_data,  //预处理图像数据(* X_INTERFACE_IGNORE = "true" *) input         pre_href,  //预处理图像数据有效信号(* X_INTERFACE_IGNORE = "true" *) input         pre_frame_ce, //预处理图像时钟使能信号//阈值控制(* X_INTERFACE_IGNORE = "true" *) input [7:0 ]  loc_bin_thresh_coefficient, //来自PS端的局部二值化阈值系数(* X_INTERFACE_IGNORE = "true" *) input [7:0 ]  expa_corr_thresh,//处理后图像(* X_INTERFACE_IGNORE = "true" *) output        pos_vsync, //处理后图像场同步信号(* X_INTERFACE_IGNORE = "true" *) output [23:0] pos_data,  //处理后图像数据(* X_INTERFACE_IGNORE = "true" *) output        pos_href, //处理后图像数据有效信号(* X_INTERFACE_IGNORE = "true" *) output        pos_frame_ce //处理后图像时钟使能信号  
);//wire define 
wire [7:0] gray_data ;
wire       gray_vsync;
wire       gray_frame_ce;
wire       gray_href;//*****************************************************
//**                    main code
//*****************************************************
//rgb转ycbcr模块
rgb2gray  u_rgb2gray(.cmos_frame_clk     (frame_clk      ),.cmos_rstn          (frame_rst_n    ),//同步复位.cmos_frame_vsync   (pre_vsync      ),.cmos_frame_data    (pre_data       ),.cmos_frame_href    (pre_href       ),.cmos_frame_ce      (pre_frame_ce   ),.dataout_frame_vsync(gray_vsync     ),.dataout_frame_data (gray_data      ),.dataout_frame_href (gray_href      ),.dataout_frame_ce   (gray_frame_ce  )
);
//wire define
wire        matrix_frame_vsync;
wire        matrix_frame_href;
wire        matrix_frame_ce;
wire [7:0]  matrix_p11; //3X3 矩阵数据
wire [7:0]  matrix_p12; 
wire [7:0]  matrix_p13;
wire [7:0]  matrix_p21; 
wire [7:0]  matrix_p22; 
wire [7:0]  matrix_p23;
wire [7:0]  matrix_p31; 
wire [7:0]  matrix_p32; 
wire [7:0]  matrix_p33;
// wire [7:0]  mid_value ;
// wire [7:0]  pos_img_Y;//*****************************************************
//**                    main code
//*****************************************************// assign pos_img_Y = pos_gray_href ? mid_value : 8'd0;
// assign pos_pixel_data = {pos_img_Y,pos_img_Y,pos_img_Y};VIP_matrix_generate_3x3_8bit u0_VIP_matrix_generate_3x3_8bit(.clk                (frame_clk      ), .rst_n              (frame_rst_n    ),.per_frame_vsync    (gray_vsync     ),.per_frame_href     (gray_href      ), .per_frame_ce       (gray_frame_ce      ),.per_img_Y          (gray_data  ),//输出3x3矩阵.matrix_frame_vsync (matrix_frame_vsync ),.matrix_frame_href  (matrix_frame_href  ),.matrix_frame_ce    (matrix_frame_ce    ),.matrix_p11         (matrix_p11),    .matrix_p12         (matrix_p12),    .matrix_p13         (matrix_p13),.matrix_p21         (matrix_p21),    .matrix_p22         (matrix_p22),    .matrix_p23         (matrix_p23),.matrix_p31         (matrix_p31),    .matrix_p32         (matrix_p32),    .matrix_p33         (matrix_p33)
);
region_binary   u_region_binary(.clk                     (frame_clk             ),.rst_n                   (frame_rst_n           ),.matrix_img_vsync        (matrix_frame_vsync    ),.matrix_img_href         (matrix_frame_href     ),.matrix_frame_ce         (matrix_frame_ce       ),.loc_bin_thresh_coefficient           (loc_bin_thresh_coefficient         ),.matrix_p11              (matrix_p11            ),.matrix_p12              (matrix_p12            ),.matrix_p13              (matrix_p13            ),.matrix_p21              (matrix_p21            ),.matrix_p22              (matrix_p22            ),.matrix_p23              (matrix_p23            ),.matrix_p31              (matrix_p31            ),.matrix_p32              (matrix_p32            ),.matrix_p33              (matrix_p33            ),.dataout_vsync           (bin_vsync             ),       //  processed Image data vsync valid signal.dataout_href            (bin_href              ),       //  processed Image data href vaild  signal.dataout_gray            (bin_data              ),          //  processed Image brightness output.dataout_frame_ce        (bin_frame_ce          ));wire        bin_vsync   ;
wire        bin_href    ;
wire  [23:0] bin_data    ;
wire        bin_frame_ce;
wire        bin_matrix_frame_vsync;
wire        bin_matrix_frame_href;
wire        bin_matrix_frame_ce;
wire [7:0]  bin_matrix_p11; //3X3 矩阵数据
wire [7:0]  bin_matrix_p12; 
wire [7:0]  bin_matrix_p13;
wire [7:0]  bin_matrix_p21; 
wire [7:0]  bin_matrix_p22; 
wire [7:0]  bin_matrix_p23;
wire [7:0]  bin_matrix_p31; 
wire [7:0]  bin_matrix_p32; 
wire [7:0]  bin_matrix_p33;VIP_matrix_generate_3x3_8bit u1_VIP_matrix_generate_3x3_8bit(.clk                (frame_clk      ), .rst_n              (frame_rst_n    ),.per_frame_vsync    (bin_vsync     ),.per_frame_href     (bin_href      ), .per_frame_ce       (bin_frame_ce          ),.per_img_Y          (bin_data[23:16]),//输出3x3矩阵.matrix_frame_vsync (bin_matrix_frame_vsync ),.matrix_frame_href  (bin_matrix_frame_href  ),.matrix_frame_ce    (bin_matrix_frame_ce    ),.matrix_p11         (bin_matrix_p11),    .matrix_p12         (bin_matrix_p12),    .matrix_p13         (bin_matrix_p13),.matrix_p21         (bin_matrix_p21),    .matrix_p22         (bin_matrix_p22),    .matrix_p23         (bin_matrix_p23),.matrix_p31         (bin_matrix_p31),    .matrix_p32         (bin_matrix_p32),    .matrix_p33         (bin_matrix_p33)
);
bin_expa_corr   u_bin_expa_corr(.clk                     (frame_clk             ),.rst_n                   (frame_rst_n           ),.matrix_img_vsync        (bin_matrix_frame_vsync),.matrix_img_href         (bin_matrix_frame_href ),.matrix_frame_ce         (bin_matrix_frame_ce   ),.expa_corr_thresh        (expa_corr_thresh      ),.matrix_p11              (bin_matrix_p11        ),.matrix_p12              (bin_matrix_p12        ),.matrix_p13              (bin_matrix_p13        ),.matrix_p21              (bin_matrix_p21        ),.matrix_p22              (bin_matrix_p22        ),.matrix_p23              (bin_matrix_p23        ),.matrix_p31              (bin_matrix_p31        ),.matrix_p32              (bin_matrix_p32        ),.matrix_p33              (bin_matrix_p33        ),.dataout_vsync           (pos_vsync             ),       //  processed Image data vsync valid signal.dataout_href            (pos_href              ),       //  processed Image data href vaild  signal.dataout_gray            (pos_data              ),          //  processed Image brightness output.dataout_frame_ce        (pos_frame_ce          ));endmodule 

rgb565转gray模块

//作者:抢公主的大魔王
//日期:24.5.15
`timescale 1ns / 1ps
module rgb2gray((* X_INTERFACE_IGNORE = "true" *)  input           cmos_frame_vsync,
(* X_INTERFACE_IGNORE = "true" *)  input [23:0]    cmos_frame_data,
(* X_INTERFACE_IGNORE = "true" *)  input           cmos_frame_href,(* X_INTERFACE_IGNORE = "true" *)  input           cmos_frame_clk,
(* X_INTERFACE_IGNORE = "true" *)  input           cmos_rstn,//同步复位
(* X_INTERFACE_IGNORE = "true" *)  input           cmos_frame_ce,(* X_INTERFACE_IGNORE = "true" *)  output          dataout_frame_vsync,
(* X_INTERFACE_IGNORE = "true" *)  output [7:0]    dataout_frame_data,
// (* X_INTERFACE_IGNORE = "true" *)  output [23:0]    dataout_frame_data,
(* X_INTERFACE_IGNORE = "true" *)  output          dataout_frame_href,
(* X_INTERFACE_IGNORE = "true" *)  output          dataout_frame_ce);// Y = 0.299R +0.587G + 0.114B// Y = (77 *R + 150*G + 29 *B)>>8reg [15:0] r_gray1;reg [15:0] g_gray1;reg [15:0] b_gray1;reg [15:0] y1;reg [7:0] y2;reg [2:0] dataout_frame_vsync_r;reg [2:0] dataout_frame_href_r;reg [2:0] dataout_frame_ce_r;always@(posedge cmos_frame_clk)beginif(!cmos_rstn)beginr_gray1 <= 8'h00;g_gray1 <= 8'h00;b_gray1 <= 8'h00;endelse beginr_gray1 <= cmos_frame_data[23:16]  * 8'd77 ;g_gray1 <= cmos_frame_data[15:8]   * 8'd150;b_gray1 <= cmos_frame_data[7:0]    * 8'd29 ;endendalways@(posedge cmos_frame_clk)beginif(!cmos_rstn)beginy1 <= 16'h0000;endelse beginy1 <= r_gray1 + g_gray1 + b_gray1;endendalways@(posedge cmos_frame_clk)beginif(!cmos_rstn)beginy2 <= 8'h0000;endelse beginy2 <= y1[15:8];endendalways@(posedge cmos_frame_clk)beginif(!cmos_rstn)begindataout_frame_ce_r      <= 3'b000;dataout_frame_vsync_r   <= 3'b000;dataout_frame_href_r    <= 3'b000;endelse begindataout_frame_ce_r      <= {dataout_frame_ce_r[1:0]     ,cmos_frame_ce};dataout_frame_vsync_r   <= {dataout_frame_vsync_r[1:0]  ,cmos_frame_vsync};dataout_frame_href_r    <= {dataout_frame_href_r[1:0]   ,cmos_frame_href};endend// assign dataout_frame_data = {y2,y2,y2};assign dataout_frame_data = y2;assign dataout_frame_ce = dataout_frame_ce_r[2];assign dataout_frame_vsync = dataout_frame_vsync_r[2];assign dataout_frame_href = dataout_frame_href_r[2];endmodule

滑动窗口数据输出模块和局部阈值二值化模块

滑动窗口数据输出模块和局部阈值二值化模块,上一篇博客已给出,没有变化,这里就不再粘贴了

二值化图像膨胀腐蚀模块

`timescale 1ns / 1ps
//作者:抢公主的大魔王
//日期:24.5.15module bin_expa_corr((* X_INTERFACE_IGNORE = "true" *)input  wire                clk                 ,(* X_INTERFACE_IGNORE = "true" *)input  wire                rst_n                ,(* X_INTERFACE_IGNORE = "true" *)input  wire      [3:0]     expa_corr_thresh       ,(* X_INTERFACE_IGNORE = "true" *)input wire                 matrix_img_vsync     ,(* X_INTERFACE_IGNORE = "true" *)input wire                 matrix_img_href      ,(* X_INTERFACE_IGNORE = "true" *)input wire     [7:0]       matrix_p11           ,(* X_INTERFACE_IGNORE = "true" *)input wire     [7:0]       matrix_p12           ,(* X_INTERFACE_IGNORE = "true" *)input wire     [7:0]       matrix_p13           ,(* X_INTERFACE_IGNORE = "true" *)input wire     [7:0]       matrix_p21           ,(* X_INTERFACE_IGNORE = "true" *)input wire     [7:0]       matrix_p22           ,(* X_INTERFACE_IGNORE = "true" *)input wire     [7:0]       matrix_p23           ,(* X_INTERFACE_IGNORE = "true" *)input wire     [7:0]       matrix_p31           ,(* X_INTERFACE_IGNORE = "true" *)input wire     [7:0]       matrix_p32           ,(* X_INTERFACE_IGNORE = "true" *)input wire     [7:0]       matrix_p33           ,(* X_INTERFACE_IGNORE = "true" *)input wire                 matrix_frame_ce ,(* X_INTERFACE_IGNORE = "true" *)output reg                 dataout_href,(* X_INTERFACE_IGNORE = "true" *)output reg      [23:0]     dataout_gray, (* X_INTERFACE_IGNORE = "true" *)output reg                 dataout_vsync,(* X_INTERFACE_IGNORE = "true" *)output reg                 dataout_frame_ce );//----------------------------------------------------------------------
//  calc sum of [p11,p12,p13;p21,p22,p23;p31,p32,p33]
reg             [1:0]           data_sum1;//0~3
reg             [1:0]           data_sum2;
reg             [1:0]           data_sum3;
reg             [3:0]           data_sum;//0~9always @(posedge clk)
begindata_sum1 <= matrix_p11[0]  + matrix_p12[0]  + matrix_p13[0] ;data_sum2 <= matrix_p21[0]  + matrix_p22[0]  + matrix_p23[0] ;data_sum3 <= matrix_p31[0]  + matrix_p32[0]  + matrix_p33[0] ;data_sum  <= data_sum1 + data_sum2 + data_sum3;
end//----------------------------------------------------------------------
//  lag 2 clocks signal sync
reg             [1:0]           matrix_img_vsync_r1;
reg             [1:0]           matrix_img_href_r1;
reg             [1:0]           matrix_edge_flag_r1;
reg             [1:0]           matrix_frame_ce_r1;always @(posedge clk or negedge rst_n)
beginif(!rst_n)beginmatrix_img_vsync_r1 <= 2'b0;matrix_img_href_r1  <= 2'b0;matrix_frame_ce_r1 <= 2'b0;endelsebeginmatrix_img_vsync_r1 <= {matrix_img_vsync_r1[0],matrix_img_vsync};matrix_img_href_r1  <= {matrix_img_href_r1[0],matrix_img_href};matrix_frame_ce_r1 <= {matrix_frame_ce_r1[0],matrix_frame_ce};end
end//----------------------------------------------------------------------
//  result outputalways @(posedge clk or negedge rst_n)
beginif(!rst_n)dataout_gray <= 24'd0;else if(data_sum >= expa_corr_thresh)dataout_gray <= {8'd255,8'd255,8'd255};  elsedataout_gray <= 24'd0;endalways @(posedge clk or negedge rst_n)
beginif(!rst_n)begindataout_vsync <= 1'b0;dataout_href  <= 1'b0;dataout_frame_ce<= 1'b0;endelsebegindataout_vsync <= matrix_img_vsync_r1[1];dataout_href  <= matrix_img_href_r1[1];dataout_frame_ce<=matrix_frame_ce_r1[1];end
end
endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/12755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Vue】Vue 中的数据传递策略:探索跨组件通信的多样化方法

Vue 中的数据传递策略&#xff1a;探索跨组件通信的多样化方法 在现代的前端开发过程中&#xff0c;Vue.js 以其灵活和易于理解的结构脱颖而出&#xff0c;成为了广受欢迎的 JavaScript 框架之一。在构建动态应用时&#xff0c;组件之间的数据传递是必不可少的&#xff0c;但随…

Google I/O 2024:有关AI的一切已公布|TodayAI

2024年谷歌I/O大会圆满落幕&#xff0c;谷歌在会上发布了一系列更新&#xff0c;涵盖从最新的人工智能技术到Android系统的多项改进。此次大会特别关注于谷歌的Gemini人工智能模型&#xff0c;并详细介绍了这些模型如何被融入到Workspace、Chrome等多个应用程序中&#xff0c;展…

男士内裤哪个牌子质量好又舒服?五款不容错过的男士内裤

男士内裤&#xff0c;作为男士日常穿着的重要贴身衣物&#xff0c;其舒适度和透气性至关重要。尽管有些男士可能习惯长时间穿着同一条内裤&#xff0c;但为了确保健康和舒适&#xff0c;建议每3-6个月更换一次内裤。长时间不更换内裤会导致其舒适性和透气性下降&#xff0c;同时…

性价比王者HUSB237,极简PD Sink的“瘦身秘籍”

在小型化、高集成的要求下&#xff0c;慧能泰取电芯片进行技术升级后“瘦身成功”&#xff0c;推出最新一代极具性价比的最简PD Sink取电芯片——HUSB237。 图1&#xff1a;HUSB237 demo及封装图 HUSB237 是一款极具性价比的最简PD Sink取电芯片&#xff0c;支持PD3.1协议包含…

C#知识|上位机面向对象编程时如何确定类?

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 01 项目分类 1.1、无数据库的项目&#xff1a;应用面向对象的思想和发方法设计&#xff0c;完成各个类的设计过程&#xff0c;确定各个类之间的关系。 1.2、有数据库的项目&#xff1a;项目的框架和思路相对固定&…

【风电功率预测-粉丝福利】向量加权平均算法优化卷积神经网络结合长短记忆网络INFO-CNN-LSTM

如何做 风电功率预测是一项重要的任务&#xff0c;可以帮助优化风电发电效率和电网调度。为了提高风电功率预测的准确性&#xff0c;可以使用卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;结合长短期记忆网络&#xff08;Long Short-Term Memory, L…

管道通信机制详解:无名管道 vs 有名管道

目录 无名管道&#xff08;匿名管道&#xff09; 定义 特点 创建与使用 有名管道&#xff08;FIFO&#xff09; 定义 特点 创建与使用 总结 在多进程通信中&#xff0c;管道是一种非常基本且实用的机制&#xff0c;它允许进程间进行数据传输。根据是否在文件系统中有名称&#…

2024中国振威化工装备展

2024上海国际化工设备展览会 第十六届上海国际化工装备博览会将于2024年11月19-21日在国家会展中心&#xff08;上海&#xff09;举办&#xff0c;预计参展企业1000多家&#xff0c;展览面积7万平方米&#xff0c;观众突破10万人次。展会设置石化装备、化工单元设备、化工环保…

Flutter 中的 ChoiceChip 小部件:全面指南

Flutter 中的 ChoiceChip 小部件&#xff1a;全面指南 在Flutter中&#xff0c;ChoiceChip是一种特殊的组件&#xff0c;用于表示一组可选项中的单个选项。它通常用于实现简单的选择功能&#xff0c;如单选按钮或复选框。本文将详细介绍如何在Flutter应用中使用ChoiceChip。 …

【算法基础】你见过ST表吗?它竟然这么强大

文章目录 ST表&#xff08;Sparse Table&#xff09;观察预处理区间求和区间最小值查询 ST表&#xff08;Sparse Table&#xff09; ST表是一种用于区间查询的数据结构。它上面大部分的区间查询都是 O ( l o g n ) O(logn) O(logn)的时间。但它在查询区间最大值最小值问题上非…

算法课程笔记——蓝桥云课第11次直播

算法课程笔记——蓝桥云课第11次直播

收藏与品鉴:精酿啤酒的艺术之旅

啤酒&#xff0c;这一古老的酒精饮品&#xff0c;不仅是人们生活中的日常饮品&#xff0c;更是一种艺术和文化的载体。对于Fendi club啤酒而言&#xff0c;收藏与品鉴更是一门深入骨髓的艺术之旅。 Fendi club啤酒的收藏&#xff0c;不仅仅是简单的存放和保管&#xff0c;而是一…

交换机组网最常见的8大故障及解决方式

有朋友多次提到网络故障&#xff0c;其中在交换机组网时常见的故障比较多&#xff0c;为了便于大家排除这些故障&#xff0c;在此介绍一些常见的典型故障案例及处理思路。 故障1&#xff1a;交换机刚加电时网络无法通信 【故障现象】 交换机刚刚开启的时候无法连接至其他网络…

数据库面试题(MySQL、Oracle)

数据库 数据库的四大特性 原子性&#xff1a; 事务中的所有操作要么全部执行成功&#xff0c;要么全部执行失败&#xff0c;不存在部分执行的情况&#xff1b;成功必须要完全应用到数据库&#xff0c;失败则不能对数据库产生影响&#xff1b; 一致性&#xff1a; 事务在执…

Java面向对象——接口的定义与实现

普通类&#xff1a;只有具体实现 抽象类&#xff1a;具体实现和规范&#xff08;抽象方法&#xff09;都有 接口&#xff1a;只有规范。自己无法写方法。专业的约束&#xff01;约束和实现分离&#xff1a;面向接口编程 接口就是规范&#xff0c;定义的是一组规则&#xf…

k8s StatefulSet

Statefulset 一个 Statefulset 创建的每个pod都有一个从零开始的顺序索引&#xff0c;这个会体现在 pod 的名称和主机名上&#xff0c;同样还会体现在 pod 对应的固定存储上。这些 pod 的名称是可预知的&#xff0c;它是由 Statefulset 的名称加该实例的顺序索引值组成的。不同…

现货黄金在线交易有哪些优势_EE trade

现货黄金在线交易拥有几项独特优势&#xff0c;使其成为广受投资者青睐的贵金属投资方式&#xff1a; 1. 全天候交易 现货黄金市场几乎可以实现24小时不间断交易&#xff0c;投资者可以根据全球市场的变动随时参与交易&#xff0c;这提供了极大的灵活性和即时反应市场变化的能…

PyTorch 中构建神经网络的常用方法介绍

在 PyTorch 中构建神经网络通常有以下几种方法。每种方法都有其特定的应用场景&#xff0c;选择哪种方法取决于你的具体需求&#xff0c;例如模型的复杂度、是否需要多 GPU 训练、是否需要自定义层或操作等。在实践中&#xff0c;这些方法往往是相互结合使用的&#xff0c;以达…

Mysql 如何定位慢查询?

定位MySQL中的慢查询&#xff0c;就像侦探查找案件线索一样&#xff0c;一步步找到让数据库运行变慢的原因。 打开慢查询日志&#xff1a; 首先&#xff0c;得让MySQL开始记录那些跑得慢的查询。这就像是安装了一个监控摄像头&#xff0c;记录下所有的“嫌疑人”。在MySQL里&…

Nginx+Keepalived高可用集群

NginxKeepalived高可用集群 服务器准备 服务器名IP软件包主从n1RIP 192.168.99.111 VIP 192.168.99.200nginx keepaliveMASTERn2RIP192.168.99.122 VIP 192.168.99.200nginx keepalivedh1RIP 192.168.99.133 VIP 192.168.99.200httpdh2RIP 192.168.32.144 VIP 192.168.99.200h…