搭建LNMP平台实现负载均衡与高可用

news2024/11/15 8:44:46

目录

环境要求

安装服务

搭建服务

1. nfs主机操作

2. web1主机操作

3. web2主机操作

4. php主机操作

5. mysql主机操作

6. 验证1

7. lb1主机操作

8. lb2主机操作

9. 验证2

测试1

测试2

网站故障解决

验证


环境要求

        实验目标:搭建LNMP平台实现负载均衡与高可用。

拓扑图如下:

 

        打开七台centos服务器,根据各个主机命名并配置IP,安装所需软件。

安装服务

        下面将进行安装服务,注意看清除主机名。

1. lb1安装

[root@lb1 ~]# rpm -ivh /media/nginx-rpm/* --nodeps --force

[root@lb1 ~]# yum -y install keepalived

[root@lb1 ~]# systemctl start nginx keepalived

[root@lb1 ~]# systemctl enable nginx keepalived

2. lb2安装

[root@lb2 ~]# rpm -ivh /media/nginx-rpm/* --nodeps --force

[root@lb2 ~]# yum -y install keepalived

[root@lb2 ~]# systemctl start nginx keepalived

[root@lb2 ~]# systemctl enable nginx keepalived

3. web1安装

[root@web1 ~]# rpm -ivh /media/nginx-rpm/* --nodeps --force

[root@web1 ~]# systemctl start nginx

[root@web1 ~]# systemctl enable nginx

4. web2安装

[root@web2 ~]# rpm -ivh /media/nginx-rpm/* --nodeps --force 

[root@web2 ~]# systemctl start nginx

[root@web2 ~]# systemctl enable nginx

5. php安装

[root@php ~]# rpm -ivh /media/php-rpm/* --nodeps --force

[root@php ~]# systemctl start php-fpm

[root@php ~]# systemctl enable php-fpm

6. mysql安装

[root@mysql ~]# rpm -ivh /media/mysql5.6-rpm/* --nodeps --force

[root@mysql ~]# systemctl start mysqld

[root@mysql ~]# systemctl enable mysqld

7. nfs安装

[root@nfs ~]# yum -y install nfs-utils rpcbind

[root@nfs ~]# systemctl start rpcbind nfs

[root@nfs ~]# systemctl enable rpcbind nfs

搭建服务

          经过上面安装服务后的操作,就可以进行下面的搭建操作了,本次将进行对每个主机的操作,分多次验证。注意:区分主机名称!

1. nfs主机操作

[root@nfs ~]# cp -rp /media/wordpress-4.9.4-zh_CN.zip /

[root@nfs ~]# cd /

[root@nfs /]# unzip wordpress-4.9.4-zh_CN.zip 

[root@nfs /]# chmod -R 777 /wordpress

[root@nfs /]# vim /etc/exports

/wordpress 192.168.1.0/24(rw,sync,no_root_squash)

[root@nfs /]# systemctl restart rpcbind nfs

2. web1主机操作

[root@web1 ~]# showmount -e 192.168.1.10 //查看nfs是否成功
Export list for 192.168.1.10:
/wordpress 192.168.1.0/24
[root@web1 ~]# cd /etc/nginx/conf.d/
[root@web1 conf.d]# rm -rf *
[root@web1 conf.d]# vim web.conf
server {
        listen 80;
        server_name www.web.com;
        root /wordpress;
        index index.php index.html;

        location ~ \.php$ {
                root /wordpress;
                fastcgi_pass 192.168.1.8:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                }
        }
[root@web1 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web1 conf.d]# systemctl restart nginx
[root@web1 conf.d]# mkdir /wordpress
[root@web1 conf.d]# mount -t nfs 192.168.1.10:/wordpress /wordpress/
[root@web1 conf.d]# echo "192.168.1.10:/wordpress /wordpress nfs defaults 0 0" >> /etc/fstab

3. web2主机操作

[root@web2 ~]# showmount -e 192.168.1.10

Export list for 192.168.1.10:

/wordpress 192.168.1.0/24

[root@web2 ~]# scp -rp root@192.168.1.6:/etc/nginx/* /etc/nginx/

[root@web2 ~]# cd /etc/nginx/conf.d/

[root@web2 conf.d]# rm -rf default.conf

[root@web2 conf.d]# systemctl restart nginx

[root@web2 conf.d]# mkdir /wordpress

[root@web2 conf.d]# mount -t nfs 192.168.1.10:/wordpress/ /wordpress/

[root@web2 conf.d]# echo "192.168.1.10:/wordpress /wordpress nfs defaults 0 0" >> /etc/fstab

4. php主机操作

[root@php ~]# showmount -e 192.168.1.10

Export list for 192.168.1.10:

/wordpress 192.168.1.0/24

[root@php ~]# vim /etc/php-fpm.d/www.conf  //修改下面两行内容

listen = 192.168.1.8:9000 //监听php本机

listen.allowed_clients = 192.168.1.6,192.168.1.7 //允许web1和web2主机访问

[root@php ~]# systemctl restart php-fpm

[root@php ~]# mkdir /wordpress

[root@php ~]# mount -t nfs 192.168.1.10:/wordpress/ /wordpress/

[root@php ~]# echo "192.168.1.10:/wordpress /wordpress nfs defaults 0 0" >> /etc/fstab

5. mysql主机操作

[root@mysql ~]# mysqladmin -uroot password

New password:

Confirm new password:

[root@mysql ~]# mysql -uroot -p123456

//省略部分内容

mysql> create database blog;

Query OK, 1 row affected (0.00 sec)



mysql> grant all on blog.* to lisi@'%' identified by '123456';

Query OK, 0 rows affected (0.00 sec)

mysql> exit

Bye

6. 验证1

        访问http://192.168.1.6或者http://192.168.1.7都可以查看到论坛安装页面,点击“现在就开始!”。

        输入数据库名称,用户名密码以及mysql服务器IP地址。完成后点击提交。

 

        连接数据库后,点击现在安装。

        创建站点标题,新建管理员用户名称密码及邮箱号后点击安装。

        此时就可以看到完成页面了,点击登录按钮输入登录信息。

  

        输入管理员用户密码后就可以登录到论坛首页了。

        以上便是LNMP平台搭建论坛的全部过程了。下面将继续进行搭建负载均衡及高可用功能。

7. lb1主机操作

[root@lb1 ~]# vim /etc/nginx/nginx_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
[root@lb1 ~]# cd /etc/nginx/conf.d/
[root@lb1 conf.d]# rm -rf default.conf 
[root@lb1 conf.d]# vim lb.conf
upstream web {
        server 192.168.1.6:80;
        server 192.168.1.7:80;
        }
server {
        listen 80;
        server_name www.blog.com;
        location / {
                proxy_pass http://web;
                include nginx_params;
        }
}

[root@lb1 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb1 conf.d]# systemctl restart nginx
[root@lb1 ~]# vim /etc/keepalived/keepalived.conf  //修改下面配置文件
global_defs {
   router_id lb1 //修改路由名称
   vrrp_strict //删除本行内容,路由器中vrrp的一些协议,linux系统中部分没有所以需要删掉
}
vrrp_instance VI_1 {
    state MASTER //路由身份,MASTER 主要,BACKUP备份
    interface ens33 //修改为本机网卡
    virtual_router_id 51
    priority 100 //优先级,最高为100
    advert_int 1
    authentication { //验证模块不需要修改,主备需相同
        auth_type PASS
        auth_pass 1111
    }   
    virtual_ipaddress {
        192.168.1.200 //虚拟路由IP(漂移地址)
    }   
}
[root@lb1 ~]# systemctl restart keepalived

        重启路由后可以通过命令查看漂移地址

8. lb2主机操作

[root@lb2 ~]# scp -rp root@192.168.1.4:/etc/nginx/* /etc/nginx
[root@lb2 ~]# rm -rf /etc/nginx/conf.d/default.conf
[root@lb2 ~]# systemctl restart nginx
[root@lb2 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
   router_id lb2 //修改路由名称
   vrrp_strict //删掉此行内容
}


vrrp_instance VI_1 {
    state BACKUP //修改为备份状态
    interface ens33 //修改为本机网卡
    virtual_router_id 51
    priority 99 //优先级修改为99,要低于主服务器
    advert_int 1
    authentication { //验证模块信息不需要修改
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.200 //漂移地址
    }
}
[root@lb2 ~]# systemctl restart keepalived

9. 验证2

        此刻配置已经差不多了,下面验证一下漂移地址是否可用。

访问http://192.168.1.200,显示是正常的。

        测试关闭主服务器的keepalived是否显示漂移地址,浏览器访问是否能成功。

 

        上面可以看到lb1已经没有漂移地址,但是依旧可以访问论坛,现在查看lb2服务器是否存在漂移地址。下面经过验证,漂移地址已经在lb2服务器上了。

测试1

        重新开启lb1的keepalived服务,并关闭lb1服务器的nginx服务,验证是否可以访问网站并确定漂移地址位置。

[root@lb1 ~]# systemctl start keepalived

[root@lb1 ~]# systemctl stop nginx

 

        访问http://192.168.1.200

 

        上面可以看到,虽然漂移地址还在主服务器中,但是无法访问网站内容。

测试2

        开启lb1服务器nginx服务,关闭lb2服务器nginx服务,验证是否可以访问网站。

[root@lb1 ~]# systemctl start nginx

[root@lb2 ~]# systemctl stop nginx

        发现可以访问网站,下面将进行lb1服务器nginx关闭无法访问网站问题。

网站故障解决

        开启lb2的网站服务。

[root@lb2 ~]# systemctl start nginx

        下面在lb1服务器操作,编辑监控脚本。

[root@lb1 ~]# vim /sh/check_nginx_proxy.sh
#!/bin/bash
killall  -0  nginx
if  [ $? -ne 0 ];then
  systemctl stop keepalived
fi
[root@lb1 ~]# chmod +x /sh/check_nginx_proxy.sh
[root@lb1 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
 //省略部分内容
}
vrrp_script check_nginx_proxy { //添加脚本追踪模块
        script "/sh/check_nginx_proxy.sh"
        interval 2
        weight 5
}
vrrp_instance VI_1 {
//省略部分内容
    }   
    virtual_ipaddress {
        192.168.1.200
    }   
        track_script { //此模块在实例内添加
        check_nginx_proxy
    }   
}
[root@lb1 ~]# systemctl restart keepalived

验证

        下面将进行最后的验证,关闭lb1的nginx网站服务,查看漂移地址。查看是否可以查看论坛内容。

 

        经过网站故障解决操作,已经解决了lb1主机nginx故障不能访问网站的问题。最后可以看到漂移地址已经到lb2上了。

  

以上就是今天的实验全过程了,如果没看明白请点击【传送门】。

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

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

相关文章

web课程设计——健身俱乐部健身器材网站模板(24页)HTML+CSS+JavaScript

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

解析Vue项目每一个文件夹及文件的作用

使用vue-cli2.x脚手架为每个vue项目创建脚手架项目结构,项目结构目录中每个文件夹介绍如下: 1、build 文件夹 里面是对 webpack 开发和打包的相关设置,包括入口文件,输出文件,使用的模块等。 1.1 webpack.base.conf.j…

人大金仓 +用友:助力企业数智化转型,实现高质量发展

金兰组织联合解决方案集数字化浪潮下,联合解决方案已经成为这个时代的必然选择。如何依托各自产品的功能与特点,持续优化和完善解决方案能力,满足客户更多、更复杂的业务诉求,成为数字服务厂商的重要工作内容。为此,金…

我的电脑图标没了怎么办?3个方法找回消失的图标

最近,很多小伙伴都在私信小编,说他们的电脑桌面图标不见了。我的电脑图标没了怎么办?别担心。图标突然消失了,很可能是你不小心隐藏了桌面图标。这里有3个方法可以帮助你快速恢复并找到电脑图标,一起来看看吧&#xff…

现代基准测试程序种类以及使用方法

文章目录基准测试程序种类常见测试程序概述常见测试程序使用Dhrystone的使用UnixBench的使用CPU-Z的安装与使用参考文献现代计算机的性能测量极大地依赖于在其上运行的工作负载,为了测量和分析计算机系统的性能人们常常选择或构造一组能反映其工作负载特征的程序&am…

python文件转换成exe可执行的windows文件

一、介绍 python的程序需要运行环境有时候很不方便,因为要交给别人代码可能因为环境的原因运行各种问题,这里给出直接讲python程序转换成exe文件,很方便直接给执行程序就可以,也不用担心运行环境问题而运行不了 二、工具 1、安装…

[奶奶看了都会]ChatGPT保姆级注册教程

大家好,我是小卷 最近几天OpenAI发布的ChatGPT聊天机器人火出天际了,连着上了各个平台的热搜榜。这个聊天机器人最大的特点是模仿人类说话风格同时回答大量问题。 有人说ChatGPT是真正的人工智能,它不仅能和你聊天,还是写小作文…

[附源码]Python计算机毕业设计SSM基于微信平台的匿名电子投票系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

web课程设计网页规划与设计 HTML+CSS+JavaScript仿英雄联盟LOL首页(1个页面)

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

第4季4:图像sensor的驱动源码解析

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、sensor驱动源码的框架 mpp定义了一整套sensor驱动的实现和封装,这里以ar0130型号的sensor为例进行说明。 1、sensor层驱动 (1)sensor层驱动位于mpp/componen…

Java基础面试题

请介绍全局变量和局部变量的区别 Java中的变量分为成员变量和局部变量,它们的区别如下: 成员变量: 成员变量是在类的范围里定义的变量;成员变量有默认初始值;未被static修饰的成员变量也叫实例变量,它存储于…

知识图谱-KGE-语义匹配-双线性模型-2019:TuckER

【paper】 TuckER: Tensor Factorization for Knowledge Graph Completion【简介】 这篇文章是英国爱丁堡大学的研究者发表于 ICML 2019 上的文章,提出了 TuckER,是一个线性的张量分解模型,对表示三元组事实的二值张量做 Tucker 分解。 背景…

python中nmupy获取本地数据和索引

1. numpy读取数据 可以使用numpy中的loadtxt进行数据读取,所包含的参数如下 参数名解释frame文件,字符串等也可以是.gz或bz2压缩文件dtype数据类型,即CSV中字符串以什么数据类型读入数组中,默认是np.floatdelimiter分隔字符串&a…

CAS:2379387-10-5;TPE-丙烯酰胺;AIE聚集诱导发光

英文名称:2-Propenamide,N-[4-(1,2,2-triphenylethenyl)phenyl]- 英文同义词:2-Propenamide,N-[4-(1,2,2-triphenylethenyl)phenyl]- CAS号:2379387-10-5 分子式:C29H23NO 分子量:401.5 结构式: AIE聚集诱导发光材料的特点: 1.在固态下有强发光特性&…

Typecho-handsome主题如何统计全站字数

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…

phpstudy2020安装及简单使用教程

phpstudyV8.0以上使用教程 简介安装步骤配置搭建网站自己的第一个PHP程序 最新版长这样 简介 按我的理解,phpstudy是一个集成式的PHP运行环境,虽然是个软件,但他实现的功能就是给PHP语言编写的脚本赋予一个可执行的环境,可以…

GPR(高斯过程回归)

写在前面:   本文为科研理论笔记的第三篇,其余笔记目录传送门: 理论笔记专栏目录 介绍结束下面开始进入正题: 1 高斯分布 ​   一元高斯分布的概率密度函数为: p(x)1σ2πexp⁡(−(x−μ)22σ2);简写为&#xff…

Lecture2:损失函数及优化

目录 1.损失函数 1.1 支持向量机SVM 1.1.1 SVM的代价函数及优化目标 1.1.2 如何理解将SVM成为大间距分类器 1.1.3 大间距分类器的数学原理 1.1.4 SVM核函数(构建非线性分类器) 及控制点的选择 1.1.5 构建自己的SVM 1.2 softmax分类器 1.3 soft…

06-07-08 - 突破512字节的限制

---- 整理自狄泰软件唐佐林老师课程 1. 突破限制的准备工作 辅助函数 字符串打印软盘读取内存比较根目录区查找 1.1 字符串打印 问题: 主引导程序中如何进行字符串的打印? 1.1.1 BIOS中的字符串打印 指定打印参数(AX 0x1301&#xff0…

Web大学生网页作业成品:个人博客主页 (纯HTML+CSS代码)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…