热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Lvs+keepalived+httpd+NFS搭建高可用

Lvs+keepalived+httpd+NFS搭建高可用自己捯饬的模型图NAT模型图注意事项:RealServer需要把网关指向Director,并且Director要打开转发功

Lvs+keepalived+httpd+NFS搭建高可用

自己捯饬的模型图

  • NAT模型图

注意事项:RealServer需要把网关指向Director,并且Director要打开转发功能命令如下:

技术分享

echo "1" > /proc/sys/net/ipv4/ip_foreward
  • DR模型图

技术分享

注意事项:需要在RealServer配置如下信息:

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0 $vip netmask 255.255.255.255 broadcast $vip
route add -host $vip dev lo:0

Lvs DR 模型搭建,后端Apache使用共享NFS

环境

  • 搭建NFS共享存储服务,ip

    NIP:192.168.220.18

  • 搭建Keepalived,ip

    DIP1:192.168.220.28

    DIP2:192.168.220.24

    VIP:192.168.220.5

  • 搭建RealServer,ip

    RIP1:192.168.220.25

    RIP2:192.168.220.26

  • Client Test Host

    IP:192.168.11.30

    ps:自己三层交换做Vlan


一、NFS搭建步骤

1、查看R1/R2用于跑httpd服务的User

[root@Real-Server-Two ~]# ps -ef |grep httpd | head -2
root   3318  1  0 14:44 ?00:00:01 /usr/sbin/httpd -DFOREGROUND
apache 3319   3318  0 14:44 ?00:00:00 /usr/sbin/httpd -DFOREGROUND	#发现apache
[root@Real-Server-Two ~]# id apache			#查看apache的UID
uid=48(apache) gid=48(apache) groups=48(apache)
[root@Real-Serve-One ~]# id apache          #查看apache的UID
uid=48(apache) gid=48(apache) groups=48(apache)

2、在NFS-Server上面创建用于共享的文件,并且创建apapche用户UID为48

[root@NFS-Server ~]# clear[root@NFS-Server ~]# mkdir -p /data/site/
[root@NFS-Server ~]# useradd  -M -r -s /sbin/nologin -u 48 apache
[root@NFS-Server ~]# id apache
uid=48(apache) gid=48(apache) groups=48(apache)

3、设定/data/site/www.sunshineboy.com用户与用户组

[root@NFS-Server ~]# chown apache.apache /data/site/
[root@NFS-Server ~]# ls -l /data/site/
total 0drwxr-xr-x 2 apache apache 39 Oct 24 12:22 www.sunshineboy.com

4、安装nfs-utils组件,与启动服务

yum install -y nfs-utlis
[root@NFS-Server ~]# systemctl start rpcbind
[root@NFS-Server ~]# systemctl start nfs.service
[root@NFS-Server ~]# ps -ef | grep nfsroot   
3400  2  0 11:30 ?00:00:00 [nfsd4]
root   3401  2  0 11:30 ?00:00:00 [nfsd4_callbacks]
root   3407  2  0 11:30 ?00:00:00 [nfsd]
root   3408  2  0 11:30 ?00:00:00 [nfsd]
root   3409  2  0 11:30 ?00:00:00 [nfsd]
root   3410  2  0 11:30 ?00:00:00 [nfsd]
root   3411  2  0 11:30 ?00:00:00 [nfsd]
root   3412  2  0 11:30 ?00:00:00 [nfsd]
root   3413  2  0 11:30 ?00:00:00 [nfsd]
root   3414  2  0 11:30 ?00:00:00 [nfsd]
root   3859   2471  0 15:48 pts/100:00:00 grep --color=auto nfs

5、NFS配置文件设定及exportfst

[root@NFS-Server ~]# cat /etc/exports/data/site/www.sunshineboy.com 
192.168.220.0/24(rw,root_squash)
[root@NFS-Server ~]# exportfs 
/data/site/www.sunshineboy.com		192.168.220.0/24

6、清空iptables及关闭SELinux

[root@NFS-Server ~]# iptables -F
[root@NFS-Server ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@NFS-Server ~]# cat /etc/selinux/config | grep disabled
# disabled - No SELinux policy is loaded.SELINUX=disabled
[root@NFS-Server ~]# getenforce Disabled

二、Keepalived搭建步骤

1、安装keepalived程序

[root@Director-One ~]# yum install -y keepalived 	#DIP1安装
[root@Director-Two ~]# yum install -y keepalived    #DIP2安装

2、keepalived的D1/D2配置

  • Director1配置


[root@Director-One keepalived]# cat keepalived.conf  #查看D1配置
    
       !Configuration File for keepalived
    global_defs {
    notification_email {
    root@localhost
    }
    notification_email_from sunshineboy@163.com
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id LVS_DEVEL
    vrrp_mcast_group4 224.0.100.18
    }
    vrrp_instance VI_1 {
    state MASTER
    interface eno16777728
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {    	192.168.220.5
    }
    }
    
    virtual_server 192.168.220.5 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP
    
    real_server 192.168.220.25 80 {
    weight 1
    HTTP_GET {
    url {
      path /
      status_cde 200
    }
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
    }
    real_server 192.168.220.26 80 {
    weight 1
    HTTP_GET {
    url {
      path /
      status_cde 200
    }
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
    }
    }
    
    [root@Director-One keepalived]# systemctl start keepalived		#DIP1启动服务
    [root@Director-One keepalived]# ip add sh | grep "192.168.220." #查看,220.5地址有了
    inet 192.168.220.24/27 brd 192.168.220.31 scope global dynamic eno16777728
    inet 192.168.220.5/32 scope global eno16777728

  • Director2配置


[root@Director-Two keepalived]# cat keepalived.conf     #查D2看配置

            ! Configuration File for keepalived
    
    global_defs {
       notification_email {
    	root@localhost
       }
       notification_email_from sunshineboy@163.com
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_mcast_group4 224.0.100.18
    }
    
    vrrp_instance VI_1 {
    state BACKUP
    interface eno16777728
    virtual_router_id 51
    priority 98
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {    	192.168.220.5
    }
    }
    
    virtual_server 192.168.220.5 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP
    
    real_server 192.168.220.25 80 {
    weight 1
    HTTP_GET {
    url {
      path /
      status_cde 200
    }
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
    }
    real_server 192.168.220.26 80 {
    weight 1
    HTTP_GET {
    url {
      path /
      status_cde 200
    }
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3  
    }
    }
    }
    [root@Director-Two keepalived]# ip add sh | grep "192.168.220"
    inet 192.168.220.28/27 brd 192.168.220.31 scope global dynamic eno16777728

3、安装ipvsadm查看Lvs调度是否如我们所设定那样

[root@Director-Two keepalived]# yum install ipvsadm -y    #在D2安装ipvsadm
[root@Director-One keepalived]# yum install ipvsadm -y	  #在D1安航ipvsadm
[root@Director-One keepalived]# ipvsadm -Ln				  #在D1查看Lvs规则
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
TCP  192.168.220.5:80 rr
  -> 192.168.220.25:80Route   1  0  0 
  -> 192.168.220.26:80Route   1  0  0  
[root@Director-Two keepalived]# ipvsadm -Ln	#在D2查看Lvs规则
  IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port   Forward Weight ActiveConn InActConn
TCP  192.168.220.5:80 rr
  -> 192.168.220.25:80Route   1  0  0 
  -> 192.168.220.26:80Route   1  0  0

三、RealServer步骤搭建

1、编写设定VIP及内核功能参数脚本

[root@Real-Server-Two ~]# vim skp.sh			#在R2上编辑skp.sh脚本添加下面内容
[root@Real-Server-Two ~]# chmod +x skp.sh               #赋予执行权限
[root@Real-Serve-One ~]# vim skp.sh		        #在R2上编辑skp.sh脚本添加下面内容
[root@Real-Serve-One ~]# chmod +x skp.sh 		#赋予执行权限
#!/bin/bash#vip=192.168.220.5case $1 instart)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0 $vip netmask 255.255.255.255 broadcast $vip
route add -host $vip dev lo:0;;
stop)
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0 del $vip
;;
esac

2、在RealServer1/RealServer2Z执行该脚本

[root@Real-Serve-One ~]# sh skp.sh start	                #执行脚本
[root@Real-Serve-One ~]# ip add sh | grep "192.168.220"	        #查看是否成功
inet 192scope global lo:0inet 192.168.220.25/27 brd 
192.168.220.31 scope global dynamic eno16777728

[root@Real-Server-Two ~]# sh skp.sh start		        #执行脚本
[root@Real-Server-Two ~]# ip add sh | grep "192.168.220."       #查看是否成功inet 
192.168.220.5/32 brd 192.168.220.5 scope global lo:0inet 
192.168.220.26/27 brd 192.168.220.31 scope global dynamic eno16777728

测试:

[root@R2 ~]# ip add sh | grep "192.168.11."				#查看IP地址是否是11.30
inet 192.168.11.17/32 brd 192.168.11.17 scope global lo:0inet 
192.168.11.30/24 brd 192.168.11.255 scope global eno16780032
[root@R2 ~]# curl 
  Test files 25.
[root@R2 ~]# curl 
  Test files 26.
[root@R2 ~]# curl 
  Test files 25.
[root@R2 ~]# curl 
 Test files 26.
[root@R2 ~]# curl 
[root@R2 ~]# curl 
[root@R2 ~]# curl 
[root@R2 ~]# curl http://192.168.220.5/www.sunshineboy.com/index.php | grep "One"	#特意把hostname改为不同
 % Total% Received % Xferd  Average Speed   TimeTime Time  Current
 Dload  Upload   Total   SpentLeft  Speed  0 00 00 0  0  0 --:--:-- --:--:-- --:--:-- 
 0System Linux Real-Serve-One 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 
 19 22:10:57 UTC 2015 x86_64 100 421770 421770 0   758k  0 --:--:-- --:--:-- --:--:--  762k
[root@R2 ~]# curl http://192.168.220.5/www.sunshineboy.com/index.php | grep "Two"	#特意把hostname改为不同
 % Total% Received % Xferd  Average Speed   TimeTime Time  Current
 Dload  Upload   Total   SpentLeft  Speed  0 00 00 0  0  0 --:--:-- --:--:-- --:--:-- 
 0System Linux Real-Server-Two 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 
 19 22:10:57 UTC 2015 x86_64 100 421790 421790 0  1084k  0 --:--:-- --:--:-- --:--:-- 1113k

测试静态动态页面分离

依然使用11.30 IP Client Test

  • nginx RealServer2配置


server {
    listen       80;
    server_name  localhost;


    location / {
        root   /var/www/html;
        index  index.html index.htm;
    }

    location ~ .*\.php$ {
	proxy_pass http://192.168.220.25;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    }

	
-  nginx RealServer1配置
-  

    server {
    listen   80;
    server_name  www.855.com;
   
    location / {
    root   /var/www/html;
    index  index.html index.htm;
    }
    location ~ .*\.php$ {
    	root /var/www/html/www.sunshineboy.com;
    	fastcgi_pass 127.0.0.1:9000;
    	fastcgi_index index.php;
    	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    	include fastcgi_params;
    }
   
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root   /usr/share/nginx/html;
    }

    }
  • 访问测试

[root@R2 conf]# curl http://192.168.220.25/index.php | grep -o "Two\|One"  #访问25,发现One
     % Total% Received % Xferd  Average Speed   TimeTime Time  Current
     Dload  Upload   Total   SpentLeft  Speed
      0 00 00 0  0  0 --:--:-- --:--:-- --:--:-- 0One
[root@R2 conf]# curl http://192.168.220.5/index.php | grep -o "Two\|One"   #访问192.168.220.5,也是One	
      % Total% Received % Xferd  Average Speed   TimeTime Time  Current
     Dload  Upload   Total   SpentLeft  Speed
      0 00 00 0  0  0 --:--:-- --:--:-- --:--:-- 0One    100 491620 491620 0  1328k  0 --:--:-- --:--:-- --:--:-- 1333k
[root@R2 conf]# curl http://192.168.220.5/index.php | grep -o "Two\|One"
      % Total% Received % Xferd  Average Speed   TimeTime Time  Current
     Dload  Upload   Total   SpentLeft  Speed
      0 00 00 0  0  0 --:--:-- --:--:-- --:--:-- 0One    100 491620 491620 0  1091k  0 --:--:-- --:--:-- --:--:-- 1116k
[root@R2 conf]# curl http://192.168.220.26/index.php | grep -o "Two\|One"  #还是One,证明代理成功,动态静态分开了
      % Total% Received % Xferd  Average Speed   TimeTime Time  Current
     Dload  Upload   Total   SpentLeft  Speed
      0 00 00 0  0  0 --:--:-- --:--:-- --:--:-- 0One    100 492440 492440 0  1297k  0 --:--:-- --:--:-- --:--:-- 1335k


本文出自 “SunshineBoySZF” 博客,请务必保留此出处http://sunshineboyszf.blog.51cto.com/12087328/1865265

Lvs+keepalived+httpd+NFS搭建高可用


推荐阅读
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
author-avatar
L-Darin_209
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有