设为首页 收藏本站
查看: 960|回复: 0

[经验分享] Linux集群

[复制链接]

尚未签到

发表于 2019-1-2 12:38:49 | 显示全部楼层 |阅读模式
  一、Linux集群

    Linux集群系统保护集群管理器和集群节点两部分组成。集群节点简称为节点、服务器或服务器节点,是用来提供资源,进行集群的实际工作。一般来说,它必须进行配置后才能称为集群的一部分,同时也要运行集群用到的应用程序。Linux集群管理器再将各节点捆绑在一起,它用于将任务分解到所有的节点。简单的说,就是按照某种方式把服务器连起来来完成一种特定的任务,提高服务器的响应能力。 scale up 在单台主机上提高服务器性能, scale out 增加服务器的数量来提高,负载均衡的集群。
  

二、Linux集群类型
  集群类型有三种:
  1、 LB(Load Balancing) 负载均衡 前端有个调度器(Director)负责接收客户端的请求分发服务到后端的realserver上(或者dispatcher, balancer 都是调度器)
  2、 HA(Hight Availability) 高可用集群(7x24 99.999% ;时时在线的提供服务,只有一个在线服务,另外的做备份)
  3、 HP(hight Performance) 高性能集群,把任务分片发给集群服务器,然后把结果收集,计算速度非常快

三、负载均衡-lvs
4层负载均衡器----Linux Virtual Server ,工作在传输层,因此又被称为四层路由或四层交换

3.1、lvs工作方式:  ipvsadm / ipvs
               ipvsadm:用户空间的命令行工具,用于管理集群服务
            ipvs:工作内核上的netfilter的INPUT链上
            
3.2、lvs的术语:director/realserver
        调度器:director, dispatcher, balancer   
    VIP:Virtual IP   提供集群服务的ip地址,虚拟ip地址(公网ip)
    DIP: Director IP   作为负载均衡器与后端服务器通信的ip地址(director的ip)
    RIP: Real Server IP   后端真实服务器的ip地址
    CIP:Client IP   客户端ip地址


3.3、lvs的类型 :
          lvs-nat Network Address Translation : MASQUERADE
          lvs-dr  (Direct Routing) : GATEWAY
          lvs-tun  (IP tunneling) : IPIP
          lvs-fullnat


四、lvs类型介绍(图示:左侧为源ip,右侧为目标ip)

4.1、lvs-nat

(1)通过网络地址转换的方法来实现调度的。首先调度器(director)接收到客户的请求数据包时(请求的目标ip为vip)
(2)根据调度算法决定将请求发送给哪个后端的真实服务器(realserver)。然后调度器就把客户端发送的请求数据包的目标ip地址及端口改成后端真实服务器的ip地址(rip),这样真实服务器(realserver)就能够接收到客户的请求数据包了
(3)realserver响应完请求后,查看默认路由(NAT模式下需要把realserver的默认路由设置为director服务器的dip,realserver把响应后的数据包发送给director,这时候的源ip为rip,目标ip为cip
(4)director接收到响应包后,把包的源地址改成虚拟地址(vip)然后发送回给客户端。


4.2、lvs-dr
     dr模式是通过改写请求报文的目标mac地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同tun模式一样,dr模式可以极大的提高集群系统的伸缩性。而且DR模式没有ip隧道的开销,对集群中的真实服务器也没有必要必须支持ip隧道协议的要求。

要点:
director要配置2个ip地址,1个是vip(公网地址),另1个是dip(负责和realserver进行通信)
realserver也要配置2个ip地址,1个是rip,另一个是vip
director主机和realserver都要配置vip地址
客户端发出请求的时候,realserver不能响应,而只能有director进行响应
一般来讲,dip和rip要在同一物理网络中,为了方便可以在同一网段中,保证director发出的对rip的arp请求,能够正常取得realserver的mac地址,即只要能够保证在同一路由器中就可以
路由器的某个接口要是vip的网关
各realserver与外部通信所使用的ip地址必须是rip,因此它的网关必须要跟rip在同一个网段中,如果rip是公网的ip,那么rip的网关要指向路由器的另外的某个接口上,或者是指向其他的路由器(要能到互联网)

对linux内核而言,响应报文从哪块网卡出去,那么源ip地址就是这个网卡的ip地址




(1)客户端发起请求,源ip地址为cip,目标地址为vip(提供某个服务的ip地址)
(2)假设客户端的请求经过层层路由,已经进入本地网络,而本地通信靠的是mac地址,这时候路由器就要做arp广播,交换机是不会隔离广播报文的,所以这个时候director主机发现自己的mac地址是路由器广播的,做出回应,路由器收到回应后,封装源mac,目标mac(director的mac地址),发给交换机
(3)收到请求报文后,交换机内部有mac地址表,通过某个接口发给director主机
(4),director转发客户端的请求报文,但是不能改源ip和目标ip,因此只能改目标mac,通过调度算法挑一个realserver进行响应,得到这个realserver对ip地址,然后再通过arp广播的方式得到这个realserver的mac地址,调度的时候源ip(cip)和目标ip(vip)都没变,而重新封装mac报文,源mac为director的mac,目标mac为挑选出的realserver的mac,封装后通过交换机发送给realserver
(5)realserver收到请求报文,拆封后,发现源ip(cip)和目标ip(vip),vip是本机的ip地址,要提供客户端所请求的服务
(6)响应客户端的请求,将其请求的结果发送给客户端


4.3、lvs-tun

采用NAT模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求的报文通过ip隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端,这样调度器就只处理请求入站报文。
(1)调度器(director)接收到客户的请求数据包时(请求的目的ip为vip)
(2)不修改请求报文的ip首部,而是通过在原有的ip首部之外(cip,vip),再封装1个ip首部(dip,rip)
(3)realserver收到调度器发来的报文后,解封装,直接响应给客户端(vip,cip)


4.4、lvs-fullnat



原理: director通过同时修改请求报文的目标地址和源地址进行转发
(1)调度器(Director)接收到客户的请求数据包时(请求的目的IP为VIP)
(2)根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度器就把客户端发送的请求数据包的源ip和目标IP地址及端口改成director的dip及后端真实服务器的ip地址(rip)
(3)这样真实服务器(realserver)就能够接收到director发来的请求数据包。真实服务器响应请求
(4)realserver把响应后的数据包发送给director,director接收到响应包后,把包的源地址改成虚拟地址(vip),目标ip改成客户端ip(cip)后再发送回给客户端。


五、lvs调度算法
  LVS调度方法,算法10种:
  1、rr:Round-robin(轮询),客户端请求到达的时候,director会按照realserver在集群服务中从上至下的顺序循环分配请求
  2、wr:Weighted Round-Robin(加权轮询),按照realserver的性能分配一个权重,确定请求发给谁,权重越大分到请求越多
  3、sh:Source Hash(源地址hash),相当于SNAT,表示来源于同一个cip的请求将始终被定向至同一个realserver上去,保证源地址不变
  4、dh:Destination Hashing(目标地址hash)相当于DNAT,不管来自哪个客户端都始终被定向至同一个主机,保证目标地址不变
  5、lc(最少连接) 新的连接请求将被分配至当前连接数最少的realserver上;缺陷是如果一个realserver的性能足够好,那么很有可能客户端的所有请求都会分配给它,而性能差的realserver没有任何请求出现
  6、wlc(加权最少连接) 在原有的最少连接的基础上给realserver一个权重,计算方法为:overload=(active*256+inactive)/weight ,缺陷:请求很有可能是从RS列表自上而下进行响应,很有可能是权重最小的
  7、sed:最短期望延迟,对wlc的改进,可以让前几个请求使用让权重大的来响应
  8、nq :永不排队,对sed简单改进,还检查当前服务器有没有连接
  9、lblc:基于本地的最少连接,动态的DH,不仅检查是不是请求是不是同一个ip还检查当前有没有连接
  10、lblcr:带复制的最少连接,对lblc的改进,当第二个realserver上的全部请求断开,允许第一个realserver上的请求复制到第二个realserver上响应,减轻第一个realserver上的负担




六、lvs-nat类型实现http和https的方法

6.1、测试环境:
director和realserver的操作系统为:centos 6.6
web1和web2的httpd:使用操作系统提供的httpd
配置好3台服务器的ip地址


6.2、http
director:提供简单的脚本来实现

[root@localhost shell]# vim lvs-nat.sh      
#!/bin/bash
# auto install lvm-nat
# date 2015-10-9
# ip_forward=1
sed -i "s@net.ipv4.ip_forward = 0@net.ipv4.ip_forward = 1@" /etc/sysctl.conf && sysctl -p &>/dev/null               //开启转发功能
# install ipvsadm
rpm -q ipvsadm
if [ $? -eq 1 ]; then
    yum install -y ipvsadm &> /dev/null              //安装ipvsadm
fi
# define variable
IPVSADM=`which ipvsadm`
VIP=172.16.16.2
RS1=192.168.1.2
RS2=192.168.1.3
# define lvs-nat                                   
$IPVSADM -C                       //清空规则
$IPVSADM -A -t $VIP:80 -s rr            //添加httpd集群服务,使用轮询调度算法      
$IPVSADM -a -t $VIP:80 -r $RS1:80 -m -w 1      //向httpd集群服务添加节点
$IPVSADM -a -t $VIP:80 -r $RS2:80 -m -w 1[root@localhost ~]# ipvsadm -L -n         
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.16.2:80 rr
  -> 192.168.1.2:80               Masq    1      0          0         
  -> 192.168.1.3:80               Masq    1      0          0

web1
[root@node1 ~]# vim realserver.sh
#!/bin/bash
# lvs-nat node define
#
# define hostname
name=node1.bengbengtu.com
hostname $name
sed -i "s/HOSTNAME=localhost/HOSTNAME=$name/" /etc/sysconfig/network
# define ip and gateway
ipaddr=192.168.1.2
gateway=192.168.1.4
sed -i -e "s/ONBOOT=.*/ONBOOT=yes/; s/BOOTPROTO=.*/BOOTPROTO=static/; s/IPADDR=.*/IPADDR=$ipaddr/; s/GATEWAY=.*/GATEWAY=$gateway/; /NETMASK=.*/d" /etc/sysconfig/network-scripts/ifcfg-eth0
service network restart
# yum install httpd
rpm -q httpd
if [ $? -eq 1 ];then
    yum install -y httpd &> /dev/null
fi
chkconfig httpd on
service httpd start &> /dev/null && ss -tanl | grep 80
if [ $? -eq 0 ]; then
   echo -e "httpd start \033[32m[OK]\033[0m"
   echo $name > /var/www/html/index.html
else
   echo -e "httpd start \033[31m[fail]\033[0m"
   exit 2
fi

web2
[root@node2 ~]# vim realserver.sh
#!/bin/bash
# lvs-nat node define
#
# define hostname
name=node2.bengbengtu.com
hostname $name
sed -i "s/HOSTNAME=localhost/HOSTNAME=$name/" /etc/sysconfig/network
# define ip and gateway
ipaddr=192.168.1.3
gateway=192.168.1.4
sed -i -e "s/ONBOOT=.*/ONBOOT=yes/; s/BOOTPROTO=.*/BOOTPROTO=static/; s/IPADDR=.*/IPADDR=$ipaddr/; s/GATEWAY=.*/GATEWAY=$gateway/; /NETMASK=.*/d" /etc/sysconfig/network-scripts/ifcfg-eth0
service network restart
# yum install httpd
rpm -q httpd
if [ $? -eq 1 ];then
    yum install -y httpd &> /dev/null
fi
chkconfig httpd on
service httpd start &> /dev/null && ss -tanl | grep 80
if [ $? -eq 0 ]; then
   echo -e "httpd start \033[32m[OK]\033[0m"
   echo $name > /var/www/html/index.html
else
   echo -e "httpd start \033[31m[fail]\033[0m"
   exit 2
fi测试即可~~



5.3、https
为了简化过程,在web1上直接创建CA,并签发证书(www.bengbengtu.com)
director

# ipvsadm -t 172.16.16.2:443 -s rr
# ipvsadm -t 172.16.16.2:443 -r 192.168.1.2:443 -m
# ipvsadm -t 172.16.16.2:443 -r 192.168.1.2:443 -mweb1
[root@node1 ~]# mkdir /etc/httpd/ssl/
[root@node1 ~]# touch /etc/pki/CA/{serial,index.txt}
[root@node1 ~]# echo 01 > /etc/pki/CA/serial
[root@node1 ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
[root@node1 ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:bengbengtu
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:ca.lvs.bengbengtu.com
Email Address []:ca@bengbengtu.com
[root@node1 ~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
Generating RSA private key, 2048 bit long modulus
..........+++
.......................................................................+++
e is 65537 (0x10001)
[root@node1 ~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:bengbengtu
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:www.bengbengtu.com
Email Address []:admin@bengbengtu.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@node1 ~]# openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/pki/CA/certs/www.bengbengtu.com.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Oct 10 01:21:31 2015 GMT
            Not After : Oct  9 01:21:31 2016 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = Beijing
            organizationName          = bengbengtu
            organizationalUnitName    = IT
            commonName                = www.bengbengtu.com
            emailAddress              = admin@bengbengtu.com
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                1C:6A:9C:33:06:C9:66:00:31:2D:FD:01:0E:12:81:15:16:D2:D7:1B
            X509v3 Authority Key Identifier:
                keyid:80:9F:80:C7:D0:9C:3F:E0:CA:B1:53:ED:6E:9F:3D:B3:3F:30:69:64
Certificate is to be certified until Oct  9 01:21:31 2016 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@node1 ~]# yum install mod_ssl
[root@node1 ~]# cp /etc/pki/CA/certs/www.bengbengtu.com.crt /etc/httpd/ssl/
[root@node1 ~]# vim /etc/httpd/conf/httpd.conf
ServerName 192.168.1.2
[root@node1 ~]# vim /etc/httpd/conf.d/ssl.conf

#DocumentRoot "/var/www/html"
ServerName www.bengbengtu.com
SSLCertificateFile /etc/httpd/ssl/www.bengbengtu.com.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
[root@node1 ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]拷贝https需要用到的证书及配置文件ssl.conf 到web2
[root@www ~]# scp /etc/httpd/ssl/www.bengbengtu.com.crt root@192.168.1.3:/etc/httpd/ssl/
root@192.168.1.3's password:
www.bengbengtu.com.crt                                            100% 4659     4.6KB/s   00:00   
[root@www ~]# scp /etc/httpd/conf.d/ssl.conf root@192.168.1.3:/etc/httpd/conf.d/
root@192.168.1.3's password:
ssl.conf                                                          100% 9474     9.3KB/s   00:00   
[root@www ~]# scp /etc/httpd/ssl/httpd.key root@192.168.1.3:/etc/httpd/ssl/
root@192.168.1.3's password:
httpd.key                                                         100% 1679     1.6KB/s   00:00

web2
[root@node2 ~]# mkdir /etc/httpd/ssl
[root@node2 ~]# yum install mod_ssl -y
[root@node2 ~]# vim /etc/httpd/conf/httpd.conf
ServerName 192.168.1.3
[root@node2 ~]# service httpd start测试结果




下次讲解lvs-dr类型实现过程!!!






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-658652-1-1.html 上篇帖子: Linux学习之路 下篇帖子: LVS负载均衡之lvs高可用实例部署(案例篇)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表