阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

LVS-NAT实现Discuz负载均衡

102次阅读
没有评论

共计 9387 个字符,预计需要花费 24 分钟才能阅读完成。

集群:是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。

Linux 服务器 LB 群集之 LVS-NAT http://www.linuxidc.com/Linux/2013-05/84774.htm

Linux 下群集服务之 LB 集群 -LVS-NAT 模式 http://www.linuxidc.com/Linux/2012-05/59839.htm

LVS-NAT+ipvsadm 实现 RHEL 5.7 上的服务集群 http://www.linuxidc.com/Linux/2012-04/58936.htm

Linux 虚拟服务器 LVS-NAT 和 LVS-DR 模型的实现 http://www.linuxidc.com/Linux/2011-09/42934.htm

集群分为:

    HA:High Availability 高可用集群

    LB:Load Balancing 高可拓展,伸缩集群

    HP:High Performance 高性能集群

LVS 的类型:nat,dr,tun

nat 类型的特性:

    1、RS 应用使用私有地址;RS 的网关必须指向 DIP;

    2、请求和响应都要经过 Director;高负载场景中,Director 易成为性能瓶颈;

    3、支持端口映射;

    4、RS 可以使用任意 OS;

dr 类型的特性:

    1、保证前端路由将目标地址为 VIP 的报文统统发往 Directory,而不能是 RS;

    解决方案:

      (1) 静态地址绑定:在前端路由器上操作

      问题:未必有路由操作权限

      (2) aprtables

      (3) 修改 RS 上内核参数,将 RS 上的 VIP 配置在 lo 接口的别名上,并限制其不能响应对 VIP 地址解析请求;

    2、RS 可以使用私有地址;但也可以使用公网地址,此时可通过互联网通过 RIP 对其直接访问;

    3、RS 跟 Directory 必须在同一物理网络中;

    4、请求报文经由 Director,但响应报文必须不能经过 Director;

    5、不支持端口映射;

    6、RS 可以是大多数常见的 OS;

    7、RS 的网关绝不允许指向 DIP;

tun 类型的特性:

    1、RIP、VIP、DIP 全部是公网地址;

    2、RS 的网关不会也不可能指向 DIP;

    3、请求报文经由 Director,但响应报文必须不能经过 Director;

    4、不支持端口映射;

    5、RS 的 OS 必须支持隧道功能;

下边我们讲一下 Load Balancing 的实现。LB 实现高拓展集群的方法有软件,硬件两种。由于条件限制而我们只作软件实验

LB 实验用到的软件为 LVS:Linux Virtual Server 虚拟服务器。

lvs 分为两部分,ipvsadm 和 ipvs,ipvs 是工作在内核上的。所以我们只需要安装 ipvsadm 即可。

实验环境准备:

host1:CentOS6.5 

网卡两个:eth0 工作在 172.16.249.138/16,是 VIP 是公网 IP;eth1 工作在 10.0.0.1/24 是 DIP 私网 IP

host2:CentOS6.5

单网卡,私网 IP:10.0.0.2

ipvsadm 版本:ipvsadm-1.26-2.el6

实验模型:nat 类型

LVS-NAT 实现 Discuz 负载均衡

实验内容:

对 web 服务请求做负载均衡,将请求的分发到不同的 web 服务器上去,降低对单个服务器的压力。

1,配置环境

host1 主机配置:

为两块网卡配置 IP:

ifconfig eth0 172.16.249.138/16       

ifconfig eth1 10.0.0.1/24 up

将 eth0 设为桥接。eth1 设为指定本地网络

yum install ipvsadm        #安装 ipvsadm 软件

host2 主机配置:

ifconfig eth0 10.0.0.2/24

eth0 设为本地网络

route add default gw 10.0.0.1

所以 host1 的 eth1 与 host2 的 eth0 都无法直接访问公网网络。

2,为 host2 主机提供 web 服务。

yum install httpd          #安装 httpd,有的就无需安装。

配置 httpd, 创建虚拟主机,模拟两台服务器模式工作。

#DocumentRoot “/var/www/html”                  #注销掉根目录

 

NameVirtualHost *:80                                  #启用

 

<VirtualHost 10.0.0.8:80>

ServerAdmin    aolens@aolens.com

DocumentRoot    /www/host1/

ServerName    www.aolens.com

ErrorLog    /www/host1_error.log

CustomLog    /www/host1_access.log

</VirtualHost>

 

<VirtualHost 10.0.0.9:80>

ServerAdmin    aolens@aolens.com

DocumentRoot    /www/host2/

ServerName    www.aolens.com

ErrorLog    /www/host2_error.log

CustomLog    /www/host2_access.log

</VirtualHost>

保存

httpd -t          #是否有语法错误。

service httpd reload

mkdir -pv /www/{host1,host2}              #创建文件的目录。为 web 服务提供两个不同的页面,方便可观察访问的是哪个服务器。

为两台虚拟主机提供访问页面:

vim  /www/host1/index.html

<h1> www.node1.com</h1>

vim  /www/host2/index.html

<h1> www.node2.com</h1>

3,添加一个集群服务

service ipvsadm start                                    #启动 ipvsadm 服务

ipvsadm -A -t 172.16.249.138:80 -s rr            #添加一个集群 VIP:Port=172.16.249.138:80      调度方式选择 rr 轮询,这样便于观察访问

ipvsadm -a -t 172.16.249.138:80 -r 10.0.0.8 -m  #为集群添加 RS1

ipvsadm -a -t 172.16.249.138:80 -r 10.0.0.9 -m  #为集群添加 RS2

[root@www ~]# cat /proc/sys/net/ipv4/ip_forward            #查看转发功能是否开启,开启为 1,关闭是 0

0           

[root@www ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

ipvsadm 的简单用法

添加一个集群服务:ipvsadm -A|E -t|u|f service-address [-s scheduler]

    service-address:

      -t|u: VIP:Port

向一个已经存在集群服务添加一个 RS:ipvsadm -a|e -t|u|f service-address -r server-address [options]

    -r RS-ADDR

    -w weight

    –gatewaying -g gatewaying (direct routing) (default)

    –ipip -i ipip encapsulation (tunneling)

    –masquerading -m masquerading (NAT) 

查看已经定义的集群服务及 RS:ipvsadm -L -n

清空所有的集群服务:ipvsadm -C   

删除集群服务:ipvsadm -D -t|u|f service-address

从集群服务中删除 RS:ipvsadm -d -t|u|f service-address -r server-address

保存集群服务定义:

    ipvsadm -S > /path/to/some_rule_file

    ipvsadm-save > /path/to/some_rule_file

让规则文件中的规则生效:

    ipvsadm -R < /path/from/some_rule_file

    ipvsadm-restore < /path/from/some_rule_file

在物理主机上访问 172.16.249.138.

当访问到的数据时 www.node2.com 是,下个访问数据将会是 www.node1.com  , 也可以刷新一个访问会不停变换显示结果,明显,每一次的访问到的服务器端都是不同。当两个服务器数据一样是。这就实现了负载均衡

LVS-NAT 实现 Discuz 负载均衡

但是如果同意用户访问同一数据,还不停的做轮询这样不但消耗资源而且缓存机制的作用被大大减小了。那么如何实现让同一用户访问同一数据去往同一服务器呢?实现此方法就要用到 Session 的持久机制。

Session 持久机制:

    1、session 绑定:始终将来自同一个源 IP 的请求定向至同一个 RS;没有容错能力;有损均衡效果;

    2、session 复制:在 RS 之间同步 session,每个 RS 拥有集群中的所有的 session;对规模集群不适用;

    3、session 服务器:利用单独部署的服务器来统一管理集群中的 session;

调度算法中的 sh 算法就可以实现 Session 绑定。

[root@www ~] # ipvsadm -E -t 172.16.249.138:80 -s sh                #修改集群调度算法为 sh

在物理主机上访问 172.16.249.138. 第一次访问到的是什么结果,那么往后一段时间内访问到的数据结果就是相同的。

LVS-NAT 实现 Discuz 负载均衡

后边的实现都将 172.16.249.138 改为 192.168.1.128.    ipvsadm 的集群定义也一样。

LVS-NAT 实现 Discuz 负载均衡

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-09/106174p2.htm

下边我们来为安装 Discuz 论坛

1,配置 nfs 服务器,将 Discuz 放到 nfs 上。

服务端端配置:

服务器 IP:192.168.1.128

在 NFS 服务器端安装 nfs-utils

编辑配置文件:/etc/exports

/nfsserver 10.0.0.0/24(rw,async,no_root_squash)

创建共享目录 /nfsserver

mkdir /nfsserver

给共享目录 apache 用户的 rwx 权限:

setfacl -m u:apache:rwx /nfsserver

重启服务:service nfs restart

客户端:

创建 /web/nfs 挂载目录:

showmount -a 172.16.18.5  查看共享的 NFS 服务。

mount -t nfs 10.0.0.2:/nfsserver /www/host1/upload

mount -t nfs 10.0.0.2:/nfsserver /www/host2/upload

2,提供数据库配置:

安装数据库不会的可以查看:http://www.linuxidc.com 寻找解答。

host1 主机作为 MySQL 的服务器端。

create database discuz        #创建一个 discuz 数据库

GRANT ALL ON *.* TO  ‘aolens’@’10.%.%.%’ IDENTIFIED BY ‘aolens’        创建一个用户给他权限。

3,提供 Discuz 安装:

在 nfs 服务器端解压 Discuz 包。我们这里使用的 Discuz 版本为:Discuz_7.2_FULL_SC_GBK.zip

cp Discuz_7.2_FULL_SC_GBK.zip /nfsserver

cd /nfsserver

unzip Discuz_7.2_FULL_SC_GBK.zip

mv ./upload/* ./

访问 192.168.1.128/upload/index.php  执行 Discuz 的安装。

LVS-NAT 实现 Discuz 负载均衡

解决出现的错误:

chmod 777 ./config.inc.php

chmod 777 ./attachments

chmod 777 ./forumdata

chmod -R 777 ./forumdata/*

chmod 777 ./uc_client/data/cache

yum install php-mysql         

service httpd restart

service mysqld restart

LVS-NAT 实现 Discuz 负载均衡

LVS-NAT 实现 Discuz 负载均衡

LVS-NAT 实现 Discuz 负载均衡

chown -R apache.apache /nfsserver/*

LVS-NAT 实现 Discuz 负载均衡

基于 Linux 做安装 Discuz 论坛做访问负载均衡,且将数据文件都放在 NFS 服务器上,实现数据同步实验结束!

集群:是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。

Linux 服务器 LB 群集之 LVS-NAT http://www.linuxidc.com/Linux/2013-05/84774.htm

Linux 下群集服务之 LB 集群 -LVS-NAT 模式 http://www.linuxidc.com/Linux/2012-05/59839.htm

LVS-NAT+ipvsadm 实现 RHEL 5.7 上的服务集群 http://www.linuxidc.com/Linux/2012-04/58936.htm

Linux 虚拟服务器 LVS-NAT 和 LVS-DR 模型的实现 http://www.linuxidc.com/Linux/2011-09/42934.htm

集群分为:

    HA:High Availability 高可用集群

    LB:Load Balancing 高可拓展,伸缩集群

    HP:High Performance 高性能集群

LVS 的类型:nat,dr,tun

nat 类型的特性:

    1、RS 应用使用私有地址;RS 的网关必须指向 DIP;

    2、请求和响应都要经过 Director;高负载场景中,Director 易成为性能瓶颈;

    3、支持端口映射;

    4、RS 可以使用任意 OS;

dr 类型的特性:

    1、保证前端路由将目标地址为 VIP 的报文统统发往 Directory,而不能是 RS;

    解决方案:

      (1) 静态地址绑定:在前端路由器上操作

      问题:未必有路由操作权限

      (2) aprtables

      (3) 修改 RS 上内核参数,将 RS 上的 VIP 配置在 lo 接口的别名上,并限制其不能响应对 VIP 地址解析请求;

    2、RS 可以使用私有地址;但也可以使用公网地址,此时可通过互联网通过 RIP 对其直接访问;

    3、RS 跟 Directory 必须在同一物理网络中;

    4、请求报文经由 Director,但响应报文必须不能经过 Director;

    5、不支持端口映射;

    6、RS 可以是大多数常见的 OS;

    7、RS 的网关绝不允许指向 DIP;

tun 类型的特性:

    1、RIP、VIP、DIP 全部是公网地址;

    2、RS 的网关不会也不可能指向 DIP;

    3、请求报文经由 Director,但响应报文必须不能经过 Director;

    4、不支持端口映射;

    5、RS 的 OS 必须支持隧道功能;

下边我们讲一下 Load Balancing 的实现。LB 实现高拓展集群的方法有软件,硬件两种。由于条件限制而我们只作软件实验

LB 实验用到的软件为 LVS:Linux Virtual Server 虚拟服务器。

lvs 分为两部分,ipvsadm 和 ipvs,ipvs 是工作在内核上的。所以我们只需要安装 ipvsadm 即可。

实验环境准备:

host1:CentOS6.5 

网卡两个:eth0 工作在 172.16.249.138/16,是 VIP 是公网 IP;eth1 工作在 10.0.0.1/24 是 DIP 私网 IP

host2:CentOS6.5

单网卡,私网 IP:10.0.0.2

ipvsadm 版本:ipvsadm-1.26-2.el6

实验模型:nat 类型

LVS-NAT 实现 Discuz 负载均衡

实验内容:

对 web 服务请求做负载均衡,将请求的分发到不同的 web 服务器上去,降低对单个服务器的压力。

1,配置环境

host1 主机配置:

为两块网卡配置 IP:

ifconfig eth0 172.16.249.138/16       

ifconfig eth1 10.0.0.1/24 up

将 eth0 设为桥接。eth1 设为指定本地网络

yum install ipvsadm        #安装 ipvsadm 软件

host2 主机配置:

ifconfig eth0 10.0.0.2/24

eth0 设为本地网络

route add default gw 10.0.0.1

所以 host1 的 eth1 与 host2 的 eth0 都无法直接访问公网网络。

2,为 host2 主机提供 web 服务。

yum install httpd          #安装 httpd,有的就无需安装。

配置 httpd, 创建虚拟主机,模拟两台服务器模式工作。

#DocumentRoot “/var/www/html”                  #注销掉根目录

 

NameVirtualHost *:80                                  #启用

 

<VirtualHost 10.0.0.8:80>

ServerAdmin    aolens@aolens.com

DocumentRoot    /www/host1/

ServerName    www.aolens.com

ErrorLog    /www/host1_error.log

CustomLog    /www/host1_access.log

</VirtualHost>

 

<VirtualHost 10.0.0.9:80>

ServerAdmin    aolens@aolens.com

DocumentRoot    /www/host2/

ServerName    www.aolens.com

ErrorLog    /www/host2_error.log

CustomLog    /www/host2_access.log

</VirtualHost>

保存

httpd -t          #是否有语法错误。

service httpd reload

mkdir -pv /www/{host1,host2}              #创建文件的目录。为 web 服务提供两个不同的页面,方便可观察访问的是哪个服务器。

为两台虚拟主机提供访问页面:

vim  /www/host1/index.html

<h1> www.node1.com</h1>

vim  /www/host2/index.html

<h1> www.node2.com</h1>

3,添加一个集群服务

service ipvsadm start                                    #启动 ipvsadm 服务

ipvsadm -A -t 172.16.249.138:80 -s rr            #添加一个集群 VIP:Port=172.16.249.138:80      调度方式选择 rr 轮询,这样便于观察访问

ipvsadm -a -t 172.16.249.138:80 -r 10.0.0.8 -m  #为集群添加 RS1

ipvsadm -a -t 172.16.249.138:80 -r 10.0.0.9 -m  #为集群添加 RS2

[root@www ~]# cat /proc/sys/net/ipv4/ip_forward            #查看转发功能是否开启,开启为 1,关闭是 0

0           

[root@www ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

ipvsadm 的简单用法

添加一个集群服务:ipvsadm -A|E -t|u|f service-address [-s scheduler]

    service-address:

      -t|u: VIP:Port

向一个已经存在集群服务添加一个 RS:ipvsadm -a|e -t|u|f service-address -r server-address [options]

    -r RS-ADDR

    -w weight

    –gatewaying -g gatewaying (direct routing) (default)

    –ipip -i ipip encapsulation (tunneling)

    –masquerading -m masquerading (NAT) 

查看已经定义的集群服务及 RS:ipvsadm -L -n

清空所有的集群服务:ipvsadm -C   

删除集群服务:ipvsadm -D -t|u|f service-address

从集群服务中删除 RS:ipvsadm -d -t|u|f service-address -r server-address

保存集群服务定义:

    ipvsadm -S > /path/to/some_rule_file

    ipvsadm-save > /path/to/some_rule_file

让规则文件中的规则生效:

    ipvsadm -R < /path/from/some_rule_file

    ipvsadm-restore < /path/from/some_rule_file

在物理主机上访问 172.16.249.138.

当访问到的数据时 www.node2.com 是,下个访问数据将会是 www.node1.com  , 也可以刷新一个访问会不停变换显示结果,明显,每一次的访问到的服务器端都是不同。当两个服务器数据一样是。这就实现了负载均衡

LVS-NAT 实现 Discuz 负载均衡

但是如果同意用户访问同一数据,还不停的做轮询这样不但消耗资源而且缓存机制的作用被大大减小了。那么如何实现让同一用户访问同一数据去往同一服务器呢?实现此方法就要用到 Session 的持久机制。

Session 持久机制:

    1、session 绑定:始终将来自同一个源 IP 的请求定向至同一个 RS;没有容错能力;有损均衡效果;

    2、session 复制:在 RS 之间同步 session,每个 RS 拥有集群中的所有的 session;对规模集群不适用;

    3、session 服务器:利用单独部署的服务器来统一管理集群中的 session;

调度算法中的 sh 算法就可以实现 Session 绑定。

[root@www ~] # ipvsadm -E -t 172.16.249.138:80 -s sh                #修改集群调度算法为 sh

在物理主机上访问 172.16.249.138. 第一次访问到的是什么结果,那么往后一段时间内访问到的数据结果就是相同的。

LVS-NAT 实现 Discuz 负载均衡

后边的实现都将 172.16.249.138 改为 192.168.1.128.    ipvsadm 的集群定义也一样。

LVS-NAT 实现 Discuz 负载均衡

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-09/106174p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计9387字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中