LVS

一 LVS工作原理

1. lvs-nat模型

lvs-nat:多目标的DNAT, 通过将请求报文中的目标地址和目标端口修改为挑选出的某RS的RIP和PORT 实现转发。

(1) RIP和DIP必须在同一IP网络,且应该使用私有地址,RS的网络要指向DIP(保证响应报文必须由VS);
(2) 请求报文和响应报文都经由Director转发,较高负载下,Director易于成为系统性能瓶颈;             
(3) 支持端口映射;
(4) VS必须是Linux, RS可以是任意OS.

lvs-nat模型工作原理如图:

1.png

2. lvs-dr模型

lvs-dr:通过为请求报文的重新封装一个MAC首部进行转发,源MAC是DIP所在接口的MAC, 目标MAC是挑选出某RS的RIP所在接口的MAC地址,IP首部不会发生变化。

(1) 确保前端路径将目标IP为VIP的请求报文发往Director;
    解决方案:
       在路由器上静态绑定VIP和Director的MAC地址;
       禁止RS响应VIP的ARP请求,禁止RS对VIP进行通告。
          (a) arptables;
          (b) 修改RS的内核参数,并把VIP绑定lo的别名上
              arp_ignore, arp_announce.
(2) RS的RIP可以使用私有地址,也可以使用公网地址;
(3) RS跟Director必须在同一物理网络;
(4) 请求报文必须由Director调度,但响应报文必须不能经由Director;
(5) 不支持端口映射;
(6) RS可以使用大多的OS;

lvs-dr模型工作原理如图:

2.png

3. lvs-tun模型

lvs-tun:转发方式:不修改请求报文的IP首部(源IP为CIP, 目标IP为VIP),而是源IP首部之外再封装一个IP首部(源IP为DIP, 目标IP为挑选出的RS的RIP)。

(1) RIP, DIP, VIP全得是公网地址;
(2) RS网关不能指向也可能指向DIP;
(3) 请求报文经由Director转发,但响应报文将直接发往CIP;
(4) 不支持端口映射;
(5) RS的OS必须支持隧道功能。

lvs-tun模型工作原理如图:

3.png

4. lvs-fullnat

lvs-fullnat:通过同时修改请求报文的源IP地址(CIP—>DIP)和目标地址(VIP—>RIP)进行转发。

(1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一网络中,但需要经由路由器互通;
(2) RS收到的请求报文源IP为DIP, 因此响应报文将直接响应给DIP;
(3) 请求和响应报文都经由Director;
(4) 支持端口映射。

二 搭建LVS-DR的高性能集群实验

1. 架构描述

通过Director访问调度到RS1和RS2实现负载均衡,另一台服务器负责动态分离及给RS1和RS2提供共享实现数据同步并提供数据库服务。

架构图如下:

4.png

2. 环境情况

操作系统:CentOS7.2

Director:ipvsadm

  • VIP:192.168.20.108

  • DIP:192.168.237.128

RS1:nginx

  • RIP:192.168.237.129

RS2:nginx

  • RIP:192.168.237.130

RS3:MariaDB+PHP+NFS

  • IP:192.168.237.131

3. 安装配置

(1) RS1安装配置nginx

#安装nginx
yum install nginx

#配置nginx
vim /etc/nginx/conf.d/default.conf
server {
listen       80;
server_name  localhost;

#charset koi8-r;
#access_log  /var/log/nginx/log/host.access.log  main;

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    root           html;
    fastcgi_pass   192.168.237.131:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
    include        fastcgi_params;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}

#启动nginx
systemctl start nginx

#RS2同RS1安装配置nginx

(2) RS3安装配置MariaDB,NFS及PHH-FPM

#安装MariaDB, NFS, PHP-FPM和PHP
yum install mariadb nfs-utils php-fpm php

#启动MariaDB
systemctl start mariadb

#创建共享目录,与RS1和RS2的nginx根目录一致
mkdir -p /usr/share/nginx/html

#配置NFS
vim /etc/exports
/usr/share/nginx/html 192.168.237.0/24(rw,no_root_squash)

#启动NFS服务
systemctl start nfs

#创建nginx用户,与RS1和RS2上的nginx用户UID和GID一致, nginx的UID为994, GID为996
groupadd -g 996 nginx
useradd -u 994 -g nginx -s /sbin/nologin nginx

#配置php-fpm
vim /etc/php-fpm.d/www.conf
listen = 192.168.237.131:9000
listen.allowed_clients = 192.168.237.129,192.168.237.130
user = nginx
group = nginx

#启动PHP-FPM
systemctl start php-fpm

(3) 在RS1和RS2上挂载共享文件

#安装NFS
yum install nfs-utils

#挂载共享文件
mount 192.168.237.131:/usr/share/nginx/html /usr/share/nginx/html

#RS2同RS1操作

(4) 在Director安装配置ipvs

#安装ipvs
yum install ipvsadm

#增加集群服务
ipvsadm -A -t 192.168.20.108:80 -s rr

#配置集群规则
ipvsadm -a -t 192.168.20.108:80 -r 192.168.237.129:80 -g
ipvsadm -a -t 192.168.20.108:80 -r 192.168.237.130:80 -g

#开启路由转发
echo 1 > /proc/sys/net/ipv4/ip_forward

(5) 在RS1上配置VIP及修改相关内核参数

#修改arp_ignore和arp_announce两个内核参数
echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

#配置VIP
ifconfig lo:0 192.168.20.108 netmask 255.255.255.255 broadcast 192.168.20.108

#增加路由
route add -host 192.168.20.108 dev lo:0

#RS2同RS1配置

(6) 创建wordpress数据库并分配权限

#创建数据库
MariaDB [(none)]> create database wordpress;

#创建数据库用户、设置密码并分配权限
MariaDB [(none)]> grant all on wordpress.* to 'wordpress'@'192.168.237.131' identified by '123456';

(7) 安装wordpress

#解压目录到nginx根目录
[root@localhost ~]# tar xvzf wordpress-4.5.3-zh_CN.tar.gz -C /usr/share/nginx/html/

在浏览器中输入192.168.237.129/wordpress/wp-admin/setup-config.php

5.png

6.png

7.png

这样就可以进行安装了,就不再具体演示。

不过LVS调度还有些问题,有待进一步研究。

原创文章,作者:N25_zzc,如若转载,请注明出处:http://www.178linux.com/62885

(0)
N25_zzcN25_zzc
上一篇 2016-12-06
下一篇 2016-12-06

相关推荐

  • Linux文件查找命令详解

    Linux中在文件系统上查找符合条件的文件,实现工具有locate和find locate: 1.它是依赖于事先索引构建好的数据库进行查找的。更新它的数据库有两种方式,一种是系统定期自动更新,另一种是执行命令updatedb手动更新数据库。 注意:索引构建过程需要遍历整个根文件系统,极消耗资源 2.它的工作特性: 1.因为是基于数据库实现的,所以查找速度快(…

    Linux干货 2017-04-10
  • vim文本编辑器使用

    vim文本编辑器使用

    2017-09-20
  • 推荐-Linux命令帮助的获取

    帮助命令 1. 使用帮助命令和帮助选项来获取帮助 2. 使用man来查看命令使用手册(manual) 3. 使用info来查看命令的信息页 4. 程序自身的帮助文档 5. 程序官方文档 6. 发行版的官方文档 7. 使用Google搜索关键字 1. 使用帮助命令和帮助选项来获取帮助 Linux系统中命令分为【内部命令】和【外部命令】。 【内部命令】:内部命令…

    Linux干货 2016-03-25
  • linux用户和组管理

    linux系统是一个多用户的系统,每个账号都干什么用,你必须了如指掌。 【Linux用户】 即UID分为两大类:管理员 UID:0                               普通用户 UID:…

    Linux干货 2016-08-05
  • 第二周博客作业

    1.Linux上的文件管理类命令都有那些,其常用的使用方法及其相关示例演示。
    2.Bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
    3.请使用命令行展开功能来完成以下的练习。
    4.文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
    5.如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
    6.显示/var目录下所有以1开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其他字符)的文件或目录。
    7.显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
    8.显示/etc目录下,以非字母开头,后面跟了一个字母以及其他任意长度任意字符的文件或目录。
    9.在/tmp目录下创建以tgile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22
    10.复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
    11.复制/etc目录下所有以.d结尾的文件或目录到/tmp/mytest2目录中。
    12.复制/etc目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

    2018-03-22
  • 用户组和权限管理

    一、3A认证     Authentication:认证     Autherization:授权     Accoutiong|Audition:审计 二、用户user      linu…

    Linux干货 2016-08-04