通过NFS来实现两台web服务器的连接

本文介绍如何使用三台服务器搭建NFS文件共享服务及MySQL数据库服务,并实现Web服务器通过NFS挂载文件共享,同时调用远程MySQL服务。

实验要求:1.使用3台服务器A B C,A用于NFS服务器,存放网页文件和mysql数据库文件

2.这A上安装Mysql-server,

3. B,C安装web 和 php 服务,挂载上A服务器上的NFS共享文件夹,并且能够调用A的mysql服务

实现机制:


1. NFS服务器上建立两个逻辑卷,一个用来存放mysql数据库文件,一个存放网页文件

2. 共享/www/htdocs文件夹(存放网页的逻辑卷)

3. WWW1和WWW2端安装web服务和php服务

4 使用php-mysql模块通过tcp/ip来调用mysqld数据库

 

实验流程:

一:克隆三台虚拟机,nfs,www1,www2

1)      将一台干净的虚拟机的内存设置为300M

2)克隆3台虚拟机,命名为nfs ,ww1,ww2

3)启动3台虚拟机


二:修改www1和www2的主机名对应为www1,www2 ,避免冲突

以www1为例:

1)  使用root登陆,查看ip,并修改ip为对应座号的172网段

# ifconfig

# ifconfig eth0 172.16.14.1

1)      使用Xshell登陆www1

>ssh 172.16.14.1

3)修改host配置文件

# vim /etc/sysconfig/network      //修改下面一行

HOSTNAME=www1.dean.com      

# hostname www1.dean.com  

# vim /etc/hosts   //添加下面一行

172.16.14.1     www1.dean.com www1

重新登陆主机名已改为www1

# login

> ssh 172.16.14.1

[root@www1 ~]#

 

www2同样步骤修改主机名为www2 (ip配置为172.16.14.2)

[root@www2 ~]#

 

三:配置nfs服务器并给nfs服务器安装Mysql数据库

1)使用root用户登陆nfs服务器,查看ip,并修改ip为172.16.14.100

# ifconfig

# ifconfig eth0 172.16.14.100

2)  使用xshell登陆,修改nfs服务器主机名为nfs.dean.com

> ssh 172.16.14.100

[root@station89 ~]# vim/etc/sysconfig/network

HOSTNAME=nfs.dean.com

[root@nfs ~]# vim /etc/hosts        //添加下面一行

172.16.14.100        nfs.dean.com  nfs 

[root@station89 ~]# hostname nfs.dean.com

[root@station89 ~]#login

> ssh 172.16.14.100

[root@nfs ~]#

3) 创建一个5G大小的逻辑卷lvnfs 和10G大小的逻辑卷 lvmydata ,并分别挂载到/www/htdocs和/www/lvmydata,并且开机挂载

划分出两个逻辑卷格式分区

# fdisk /dev/sda

The number of cylinders for this disk isset to 15665.

There is nothing wrong with that, but thisis larger than 1024,

and could in certain setups cause problemswith:

1) software that runs at boot time (e.g.,old versions of LILO)

2) booting and partitioning software fromother OSs

  (e.g., DOS FDISK, OS/2 FDISK)

 

Command (m for help): n

First cylinder (8926-15665, default 8926):

Using default value 8926

Last cylinder or +size or +sizeM or +sizeK(8926-15665, default 15665): +10G

 

Command (m for help): t

Partition number (1-6): 6

Hex code (type L to list codes): 8e

Changed system type of partition 6 to 8e(Linux LVM)

创建逻辑卷

# partprobe /dev/sda

# pvcreate /dea/sda{6,7}

#vgcreate vg0 /dev/sda{6,7}

# lvcreate -L 10G -n lvmydata vg0

# lvcreate -L 5G -n lvnfs vg0

格式化两个分区

# mke2fs -j –L MYDATA /dev/vg0/lvmydata

# mke2fs -j –L NFS /dev/vg0/lvnfs

创建挂载目录,挂载两个分区,修改/etc/fstab实现开机挂载

# mkdir /www/mydata/data -pv

# mkdir /www/nfs

# mount /dev/vg0/lvmydata /www/mydata/data/

# mount /dev/vg0/lvnfs /www/htdocs/

LABEL=MYDATA            /www/mydata/data        ext3   defaults        0 0

LABEL=NFS               /www/nfs                ext3    defaults        0 0

 

4)配置开启nfs服务

# service portmap status

portmap (pid 2177) is running...           //应该是running,如果不是,serviceportmap restart

# vim /etc/exports

/www/htdocs    172.16.0.0/16(rw,async)

#vim /etc/sysconfig/nfs          //修改nfs服务端口防止其占用其他服务端口

MOUNTD_PORT=10010

STATD_PORT=10011

RQUOTAD_PORT=10012

STATD_OUTGOING_PORT=10013

# service nfs start

# showmount –a       //检查一下,确保服务正常,如果无法显示,可能是忘了修改/etc/host

All mount points on nfs.dean.com:

192.168.0.48:/haha

 

5) 配置安装mysql 数据库

通过ftp服务器下载mysql二进制包,解压缩到/usr/local准备安装

# cd /tmp

# lftp 192.168.0.254

> cd pub/Sources/new_lamp

> get mysql-5.5.15-linux2.6-i686.tar.gz

> bye

# tar xf mysql-5.5.15-linux2.6-i686.tar.gz-C /usr/local/

#cd /usr/local/

# ln -sv mysql-5.5.15-linux2.6-i686 mysql

#setenforce 0     //关闭selinux防止干扰

创建mysql用户和用户组,修改/www/mydata/data和/usr/local/mysql文件权限

# groupadd -g 3306 mysql

# useradd mysql -M -s /sbin/nologin -gmysql -u 3306

# chown mysql:mysql mysql –R

# cd mysql

# scripts/mysql_install_db --user=mysql--datadir=/www/mydata/data

# cp support-files/mysql.server/etc/init.d/mysqld

# chkconfig --add mysqld

# chown root:mysql -R .

# chown mysql:mysql /www/mydata –R

# cp support-files/my-large.cnf /etc/my.cnf

# vim /etc/my.cnf

thread_concurrency = 2

datadir=/www/mydata/data

启动mysql服务,给root配置密码

# export PAHT=$PATH:/usr/local/mysql/bin

source $PATH

# service mysqld start

# mysql

mysql> GRANT ALL PRIVILEGES ON *.* TOroot@'%.%.%.%' IDENTIFIED BY 'redhat';

mysql> FLUSH PRIVILEGES;

mysql> quit

6)创建apache用户

# groupadd apache -g 48

# useradd apache -M -u 48 -g 48 -s/bin/bash           //注意需要知道/bin/bash

 

四、配置www1和www2服务器,安装httpd和php,两个服务器配置一样,以www1为例

1)通过yum安装httpd ,php5 ,php-mysql

yum install httpd php5 php-mysql –y

2)挂载nfs共享文件系统

mkdir /www

mount –t nfs 172.16.1.100:/www/htdoc /web

3)修改httpd的配置文件使其主页存放目录在/web下

vim /etc/httpd/conf/httpd.conf

DocumentRoot "/www"

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .php

DirectoryIndex index.html index.html.varindex.php

3)开启httpd服务,测试php和mysql是否工作正常

service httpd start

 

五、安装wordpress网页

1) 在nfs服务器上解压缩网页包

unzip wordpress.zip

2) 输入172.16.1.1进入网页安装页面

在mysq数据库用户名填:root

密码:redhat

数据库位置: 172.16.1.100

创建网页管理账户密码admin  admin

一直下一步,安装完毕

3)在172.16.1.1发表主题heihei ,然后在浏览器输入172.16.1.2,如果能正常显示网页且有hihei主题,说明成功















<think>好的,我需要帮助用户了解两台Web应用服务器在高可用(HA)模式下的配置实现方式。根据用户的问题,他们可能已经看过之前关于HA模式的回答,但这次特别关注Web应用服务器。首先,我需要回顾之前的对话提供的引用,确保信息的一致性。 用户提供的引用中提到了使用NginxKeepalived搭建HA架构,以及Keepalived与Heartbeat的对比。之前的回答详细讨论了虚拟化平台、Keepalived/Heartbeat、存储方案应用层方案。现在用户的问题更具体,针对Web应用服务器,所以需要聚焦于Web服务器的HA配置,特别是使用KeepalivedNginx的方案。 首先,我需要确认用户的需求:两台Web服务器的高可用,确保当一台服务器故障时,服务可以无缝切换到另一台。这可能涉及IP漂移、健康检查、共享存储或数据同步等问题。 接下来,我需要参考引用中的步骤,如备份数据库、配置Keepalived、编写监测脚本等。同时,要区分KeepalivedHeartbeat的不同,因为用户提到过两者的对比。根据引用,Keepalived更适用于IP层,而Heartbeat擅长服务控制,但用户的问题明确是关于Web应用服务器,所以可能更适合Keepalived,因为它配置简单,适合IP漂移。 然后,我需要考虑如何结构化回答。可能分为几个部分:架构设计、准备工作、配置步骤、优化注意事项。每个部分需要详细说明关键点,比如虚拟IP、健康检查、数据同步等。 另外,用户可能需要具体的配置示例,比如Keepalived的配置文件、Nginx检测脚本等。这些内容在之前的引用中有部分示例,需要整理并确保语法正确,符合LaTeX格式要求。 还需要注意用户提到的HA模式中的非抢占模式、权重调整单播模式,这些是Keepalived的高级配置,应该在回答中提及,帮助用户优化配置。 最后,生成相关问题,确保覆盖用户可能感兴趣的扩展内容,比如与负载均衡的区别、数据同步的其他方法、监测脚本的自定义等。 总结步骤: 1. 确定Web服务器HA的核心组件:Keepalived、Nginx、数据同步。 2. 架构设计:主备模式、虚拟IP、健康检查机制。 3. 详细配置步骤:安装软件、配置文件、脚本编写。 4. 高级优化:非抢占模式、权重、单播配置。 5. 注意事项验证方法。 6. 相关问题扩展,帮助用户进一步学习。 现在需要将这些步骤转化为结构化的回答,使用中文,符合格式要求,正确使用LaTeX,引用标记,并生成相关问题。</think>### 两台Web应用服务器高可用(HA)模式配置与实现详解 高可用Web服务需确保当一台服务器故障时,另一台能无缝接管流量。以下是基于**Keepalived + Nginx**的经典HA配置方案,结合虚拟IP(VIP)漂移与服务健康监测实现。 --- #### 一、核心架构设计 1. **主备模式** - **主节点**(Master):正常运行时承载所有流量,VIP绑定在主服务器网卡。 - **备节点**(Backup):实时监测主节点状态,若主节点故障则接管VIP。 - **虚拟IP(VIP)**:例如$192.168.1.100$,作为用户访问的统一入口[^1]。 2. **健康监测机制** - **Keepalived**:通过VRRP协议实现VIP漂移,周期发送心跳包检测节点存活。 - **Nginx服务监测**:自定义脚本检测Nginx进程状态,异常时触发故障转移。 3. **数据同步** - **Web文件同步**:使用`rsync`或`lsyncd`实时同步网站代码及配置文件。 - **数据库同步**:主从复制(如MySQL)或共享存储(如NFS)确保数据一致性。 --- #### 二、配置步骤详解 ##### 1. 环境准备 - **服务器配置**: - 服务器A(主):IP$192.168.1.101$,安装Nginx + Keepalived。 - 服务器B(备):IP$192.168.1.102$,安装Nginx + Keepalived。 - **共享VIP**:$192.168.1.100$,需确保未被占用。 ##### 2. 安装Keepalived与Nginx ```bash # 在两台服务器上执行 apt-get install keepalived nginx -y # Ubuntu/Debian yum install keepalived nginx -y # CentOS/RHEL ``` ##### 3. 配置Keepalived主节点 编辑`/etc/keepalived/keepalived.conf`: ```nginx vrrp_instance VI_WEB { state MASTER # 主节点为MASTER,备节点为BACKUP interface eth0 # 绑定网卡名称 virtual_router_id 51 # 集群ID,需一致 priority 100 # 主节点优先级更高(备节点设为90) advert_int 1 # 心跳间隔1秒 authentication { auth_type PASS auth_pass 1234 # 集群通信密码 } virtual_ipaddress { 192.168.1.100/24 # 虚拟IP } # 定义Nginx健康检查脚本 track_script { chk_nginx } } # Nginx监测脚本配置 vrrp_script chk_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 # 每2秒执行一次 weight -20 # 检测失败时降低优先级 } ``` ##### 4. 编写Nginx健康检查脚本 创建`/etc/keepalived/check_nginx.sh`: ```bash #!/bin/bash if ! pgrep -x "nginx" > /dev/null; then systemctl restart nginx sleep 2 if ! pgrep -x "nginx" > /dev/null; then exit 1 # 重启失败,触发Keepalived切换 fi fi exit 0 ``` 赋予执行权限: ```bash chmod +x /etc/keepalived/check_nginx.sh ``` ##### 5. 启动服务并验证 ```bash systemctl start keepalived && systemctl enable keepalived ``` - **验证VIP绑定**:在主节点执行`ip addr show eth0`,应显示VIP。 - **模拟故障**:关闭主节点Nginx,观察VIP是否漂移至备节点($<5s$内完成)[^2]。 --- #### 三、高级优化配置 1. **非抢占模式(nopreempt)** 在备节点配置中添加`nopreempt`,避免主节点恢复后抢回VIP,适合需要稳定性的场景: ```nginx vrrp_instance VI_WEB { state BACKUP nopreempt # 所有节点均设为BACKUP+非抢占 ... } ``` 2. **权重动态调整** 结合健康检查结果动态调整优先级,例如: ```nginx vrrp_script chk_nginx { script "..." weight 20 # 检测成功时增加优先级 } ``` 3. **单播模式配置** 若网络不支持组播,可指定单播通信(需对方IP): ```nginx unicast_src_ip 192.168.1.101 # 本机IP unicast_peer { 192.168.1.102 # 对端IP } ``` --- #### 四、注意事项 1. **防火墙配置**:开放VRRP协议(IP协议号112)及HTTP/HTTPS端口。 2. **日志监控**:通过`journalctl -u keepalived -f`跟踪故障转移日志。 3. **脑裂问题**:确保心跳线冗余,或结合第三方仲裁(如Ping网关检测)。 --- ### 相关问题 1. **Keepalived的VRRP协议如何保证心跳检测的可靠性?** 2. **如何实现Web服务器HA架构与负载均衡(如Nginx LB)的结合?** 3. **除了rsync,还有哪些实时数据同步方案适用于双Web服务器HA环境?** 4. **如何自定义健康检查脚本以监测特定API接口的可用性?** [^1]: 基于Nginx搭建Web服务器HA架构(实现高可用web服务)。 [^2]: 关于服务器的HA高可用方案KeepalivedHeartbeat。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值