CentOS7---基于 CentOS 7 构建 LVS-DR 群集

Posted sre-chan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS7---基于 CentOS 7 构建 LVS-DR 群集相关的知识,希望对你有一定的参考价值。

一、对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势

NAT模式(地址转换)
原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址 并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP,将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器(原路返回,只改变了Mac地址)

优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址;

缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈 因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器,速度就会变慢!

2、 直接路由(DR模式)
原理:负载均衡器和RS都使用同一个IP对外服务,但只有DR对ARP请求进行响应。所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致),并将请求分发给这台RS这时RS收到这个数据包。处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端,由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域也可以简单的理解为在同一台交换机上

优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。

二、 基于 CentOS 7 构建 LVS-DR 群集

1、环境准备

主机名    IP              作用
node01   192.168.11.21  client
node02   192.168.11.22    LVS
node03   192.168.11.23    LVS
node04   192.168.11.24  RS-web1
node05   192.168.11.25  RS-web2

2、关闭防火墙和selinux

[root@node01 ~]# systemctl stop firewalld.service
[root@node01 ~]# systemctl disable firewalld.service
[root@node01 ~]# sed -i \'/^SELINUX=/ c SELINUX=disabled\' /etc/selinux/config

3、修改主机名和设置为静态IP

4、先在节点node04 node05准备俩个web服务器访问页面---4和5一样的配置

# 安装Apache软件,做web服务器
[root@node04 ~]# yum install httpd -y

# 提供测试页,为了区分用IP标识
[root@node04 ~]# echo "web test page...host is `hostname -I`." > /var/www/html/index.html

# 重启服务
[root@node04 ~]# systemctl start httpd.service 

# 本地测试访问
[root@node04 ~]# curl 192.168.11.24
web test page...host is 192.168.11.24 .

[root@node04 ~]# curl 192.168.11.25
web test page...host is 192.168.11.25 .

5、配置LVS负载均衡服务

第一种LVS配置方式:node02上配置

# 下载负载均衡工具
[root@node02 ~]# yum install ipvsadm.x86_64 -y

6、添加VIP地址,注意掩码

[root@node02 ~]# nmcli connection modify ens32 +ipv4.addresses 192.168.11.100/24
[root@node02 ~]# nmcli connection up ens32 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@node02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:3c:41:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.22/24 brd 192.168.11.255 scope global noprefixroute ens32
       valid_lft forever preferred_lft forever
    inet 192.168.11.100/24 brd 192.168.11.255 scope global secondary noprefixroute ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::9543:bb74:6781:68d6/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

7、配置LVS策略

# 清除策略
[root@node02 ~]# ipvsadm -C

# 对TCP80端口提供负载分流服务,使用的调度为轮询
[root@node02 ~]# ipvsadm -A -t 192.168.11.100:80 -s rr 

# 查看本地规则
[root@node02 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.11.100:80 rr

# 添加节点服务器RS
[root@node02 ~]# ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.24:80 -g
[root@node02 ~]# ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.25:80 -g
[root@node02 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.11.100:80 rr
  -> 192.168.11.24:80             Route   1      0          0         
  -> 192.168.11.25:80             Route   1      0          0 

8、保存配置,重启服务即失效

[root@node02 ~]# ipvsadm-save 
-A -t node02:http -s rr
-a -t node02:http -r 192.168.11.24:http -g -w 1
-a -t node02:http -r 192.168.11.25:http -g -w 1

9、配置说明

[删除方法]
# ipvsadm -D -t 192.168.11.100:80-s wrr
# ipvsadm -d -t 192.168.11.100:80 -r 192.168.11.24:80
[相关参数说明]
[root@node02 ~]# ipvsadm –help
-A 添加虚拟服务器
-t 设置群集地址(VIP,Virtual IP)
-s 指定负载调度算法
-a 添加真实服务器
-d 删除真实服务器
-r 指定真实服务器(Real Server)的地址
-m 使用NAT模式;-g、-i分别对应DR、TUN模式
-w 为节点服务器设置权重,默认为1

10、手工在RS端绑定VIP,添加本机访问VIP的路由信息

[root@node04 ~]# ifconfig lo:110 192.168.11.100 netmask 255.255.255.255 up
[root@node04 ~]# route add -host 192.168.11.100 dev lo

11、手工在RS端抑制ARP响应

[root@node05 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node05 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@node05 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node05 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

PS:也可以使用arptables实现抑制arp

arptables -A INPUT -d $VIP -j DROP
arptables -A OUTPUT -s $VIP -j mangle --mangle-ip-s $RIP
# arptables-save > /etc/sysconfig/arptables
# systemctl enable --now arptables

12、测试

# 在LVS上监控 
[root@node02 ~]# watch  ipvsadm -Ln

# 在客户端上测试
[root@node01 ~]# for ((i=1;i<=10;i++)); do curl 192.168.11.100; done
web test page host is 192.168.11.25 
web test page host is 192.168.11.24 
web test page host is 192.168.11.25 
web test page host is 192.168.11.24 
web test page host is 192.168.11.25 
web test page host is 192.168.11.24 
web test page host is 192.168.11.25 
web test page host is 192.168.11.24 
web test page host is 192.168.11.25 
web test page host is 192.168.11.24 

LVS调度器上动态监控

13、开发脚本实现LVS-DR模式配置


Mono 3.0.0 基于 CentOS 6 构建

【中文标题】Mono 3.0.0 基于 CentOS 6 构建【英文标题】:Mono 3.0.0 build on CentOS 6 【发布时间】:2012-10-22 11:19:26 【问题描述】:

我最近发现自己需要为 CentOS 6 构建 Mono 3.0,我的基础架构人员要求我尽可能让系统尽可能接近 CentOS(即,如果可能,不要使用第 3 方软件包)。

因为目前我找不到 Mono 3.0 RPM,所以我在 CentOS 6.3 的全新最小安装上完成了从头开始构建它的练习。

可以在 CentOS 6.3 上构建没有外部软件包的 Mono 3.0。

【问题讨论】:

【参考方案1】:

执行 CentOS 6.3 最小安装

ifup eth0

yum -y update
yum -y install glib2-devel
yum -y install libpng-devel
yum -y install libjpeg-devel 
yum -y install giflib-devel 
yum -y install libtiff-devel 
yum -y install libexif-devel 
yum -y install libX11-devel 
yum -y install fontconfig-devel 
yum -y install gettext 
yum -y install make 
yum -y install gcc-c++

# amusing hack to @987654321@

export echo=echo

# build libgdiplus
curl -O http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.9.tar.bz2
bunzip2 libgdiplus-2.10.9.tar.bz2
tar xvf libgdiplus-2.10.9.tar
cd libgdiplus-2.10.9
./configure --prefix=/usr/local
make
make install

# build mono
curl -O http://download.mono-project.com/sources/mono/mono-3.0.0.tar.bz2
bunzip2 mono-3.0.0.tar.bz2
tar xvf mono-3.0.0.tar
cd mono-3.0.0
./configure --prefix=/usr/local
make
make install

# tell binfmt how to launch CLR executables
echo ':CLR:M::MZ::/usr/local/bin/mono:' > /proc/sys/fs/binfmt_misc/register

【讨论】:

【参考方案2】:

Timotheus Pokorra Mono 存储库

在 Centos 6.x(和其他发行版)中使用 tpokorra repository 和 mono 3.2.5

yum 仓库配置

将文件mono.repo 放入目录/etc/yum.repos.d/ 中,内容如下:

[home_tpokorra_mono]
name=mono and monodevelop (CentOS_CentOS-6)
type=rpm-md
baseurl=http://download.opensuse.org/repositories/home:/tpokorra:/mono/CentOS_CentOS-6/
gpgcheck=1
gpgkey=http://download.opensuse.org/repositories/home:/tpokorra:/mono/CentOS_CentOS-6/repodata/repomd.xml.key
enabled=1

安装

yum install mono-opt

更多

http://software.opensuse.org/download/package?project=home:tpokorra:mono&package=mono-opt

【讨论】:

以上是关于CentOS7---基于 CentOS 7 构建 LVS-DR 群集的主要内容,如果未能解决你的问题,请参考以下文章

基于Docker构建CentOS7_Java8_Tomcat8.5 的镜像及Web应用的部署

使用Docker构建基于centos7镜像的python环境

CentOS7.4—构建最新版haproxy高可用群集

CentOS 7.4——Apache应用之二,构建Web虚拟主机

centos7发行版号对应基于RHEL Source(版本)对照表

CentOS7构建虚拟Web主机(基于域名端口IP地址)