linux集群架构

时间:2022-09-08 19:18:16
Linux集群架构
 
根据功能划分为两大类:高可用和负载均衡
高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务
实现高可用的开源软件有:heartbeat、keepalived
负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2
实现负载均衡的开源软件有LVS、keepalived、haproxy、nginx,商业的有F5、Netscaler
 
 
 
keepalived介绍
 
在这里我们使用keepalived来实现高可用集群,因为heartbeat在centos6上有一些问题,影响实验效果
  keepalived通过VRRP(Virtual Router Redundancy Protocl)来实现高可用。
在这个协议里会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色和N(N>=1)个backup角色。
master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的mater。
Keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,check模块负责健康检查,vrrp模块是来实现VRRP协议的。
 
 
用keepalived配置高可用
 
 
准备两台机器130和132,130作为master,132作为backup
两台机器都执行yum install -y keepalived
两台机器都安装nginx,其中130上已经编译安装过nginx,132上需要yum安装nginx: yum install -y nginx
设定vip为100
 
> /etc/keepalived/keepalived.conf
[root@131 ~]# vim /etc/keepalived/keepalived.conf
 
global_defs {
notification_email {
}
notification_email_from root@aminglinux.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh"
interval 3
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {
192.168.0.100
}
track_script {
chk_nginx
}
}
 
 
 
 
vim /usr/local/sbin/check_ng.sh
 
#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        systemctl start nginx
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi
 
 
 
 
给脚本755权限
systemctl start  keepalived 130启动服务
 
测试:
 
[root@131 sbin]# systemctl stop nginx
[root@131 sbin]# ps aux|grep nginx
root     18517  0.0  0.0 112644   952 pts/0    R+   01:17   0:00 grep --color=auto nginx
[root@131 sbin]# ps aux|grep nginx
root     18518  0.0  0.1 122880  2100 ?        Ss   01:17   0:00 nginx: master process /usr/sbin/nginx
nginx    18519  0.0  0.1 123344  3120 ?        S    01:17   0:00 nginx: worker process
root     18524  0.0  0.0 112644   952 pts/0    R+   01:17   0:00 grep --color=auto nginx
 
主上 关闭 nginx服务后  会自动拉起 nginx 服务  
 
用keepalived配置高可用
 
 
[root@132 ~]# > /etc/keepalived/keepalived.conf
[root@132 ~]# vim /etc/keepalived/keepalived.conf
 
 
global_defs {
   notification_email {
   }
   notification_email_from root@aminglinux.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"
    interval 3
}
vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux>com
    }
    virtual_ipaddress {
        192.168.0.100
    }
    track_script {
        chk_nginx
    }
}
 
 
 
vim /usr/local/sbin/check_ng.sh
 
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        systemctl start nginx
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi
 
 
给脚本755权限
132上也启动服务 systemctl start keepalived
 
 
 
 
测试高可用
 
先确定好两台机器上nginx差异,比如可以通过curl -I 来查看nginx版本
测试1:关闭master上的nginx服务
测试2:在master上增加iptabls规则
iptables -I OUTPUT -p vrrp -j DROP
测试3:关闭master上的keepalived服务
 
[root@131 html]# systemctl stop keepalived
[root@131 html]# ps aux|grep keep
root     30693  0.0  0.0 112644   952 pts/0    R+   02:57   0:00 grep --color=auto keep
[root@131 html]# curl 192.168.0.100
this is a slave site.
 
虚拟ip  192.168.0.100  出现在从上
 
[root@132 html]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    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: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:2f:94:cf brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.132/24 brd 192.168.0.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 192.168.0.100/32 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe2f:94cf/64 scope link
       valid_lft forever preferred_lft forever
 
 
测试4:启动master上的keepalived服务
 
[root@131 html]# systemctl start keepalived
[root@131 html]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    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: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:48:59:eb brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.131/24 brd 192.168.0.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 192.168.0.100/32 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe48:59eb/64 scope link
       valid_lft forever preferred_lft forever
[root@131 html]# curl 192.168.0.100
this is a master nginx site
 
主上重新启动 keepalived 服务后,虚拟 ip  192.168.0.100  又恢复到 主上面   
 
负载均衡集群介绍
 
主流开源软件LVS、keepalived、haproxy、nginx等
其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做7层使用
keepalived的负载均衡功能其实就是lvs
lvs这种4层的负载均衡是可以分发除80外的其他端口通信的,比如MySQL的,而nginx仅仅支持http,https,mail,haproxy也支持MySQL这种
相比较来说,LVS这种4层的更稳定,能承受更多的请求,而nginx这种7层的更加灵活,能实现更多的个性化需求
 
 
 
LVS介绍
 
LVS是由国人章文嵩开发
流行度不亚于apache的httpd,基于TCP/IP做的路由和转发,稳定性和效率很高
LVS最新版本基于Linux内核2.6,有好多年不更新了
LVS有三种常见的模式:NAT、DR、IP Tunnel
LVS架构中有一个核心角色叫做分发器(Load balance),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称rs)
 
 
 
 
LVS NAT模式
 
linux集群架构
linux集群架构
 
这种模式借助iptables的nat表来实现
用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去
rs需要设定网关为分发器的内网ip
用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器成为瓶颈
在nat模式中,只需要分发器有公网ip即可,所以比较节省公网ip资源
 
 
 
LVS IP Tunnel模式
 
linux集群架构
linux集群架构
 
这种模式,需要有一个公共的IP配置在分发器和所有rs上,我们把它叫做vip
客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为rs的IP,这样数据包就到了rs上
rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己
 
 
 
 
LVS DR模式
 
 linux集群架构
linux集群架构
 
这种模式,也需要有一个公共的IP配置在分发器和所有rs上,也就是vip
和IP Tunnel不同的是,它会把数据包的MAC地址修改为rs的MAC地址
rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己
 
 
LVS调度算法
 
轮询 Round-Robin  rr
加权轮询 Weight Round-Robin wrr
最小连接 Least-Connection lc
加权最小连接 Weight Least-Connection wlc
基于局部性的最小连接 Locality-Based Least Connections lblc
带复制的基于局部性最小连接 Locality-Based Least Connections with Replication  lblcr
目标地址散列调度 Destination Hashing dh
源地址散列调度 Source Hashing  sh
 
 
NAT模式搭建 – 准备工作
 
 
三台机器
分发器,也叫调度器(简写为dir)
内网:133.130,外网:147.144(vmware仅主机模式)
 
rs1
内网:133.132
 
rs2
内网:133.133
 
 
三台机器
分发器,也叫调度器(简写为dir)
内网:133.130,外网:142.147(vmware仅主机模式)
 
rs1
内网:133.132,设置网关为133.130
 
rs2
内网:133.133,设置网关为133.130
 
三台机器上都执行执行
systemctl stop firewalld; systemc disable firewalld
systemctl start  iptables-services; iptables -F; service iptables save
 
 
 
在dir上安装ipvsadm
yum install -y ipvsadm
在dir上编写脚本,vim /usr/local/sbin/lvs_nat.sh//内容如下
 
#! /bin/bash
# director 服务器上开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意区分网卡名字,阿铭的两个网卡分别为ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.133.0/24  -j MASQUERADE
# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.147.144:80 -s wlc -p 3
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1
 
 
 
sh  /usr/local/sbin/lvs_nat.sh   执行下脚本
 
 
 
NAT模式效果测试
 
 
两台rs上都安装nginx
设置两台rs的主页,做一个区分,也就是说直接curl两台rs的ip时,得到不同的结果
浏览器里访问192.168.142.147,多访问几次看结果差异
 
[root@131 sbin]# sh lvs_nat.sh
[root@131 sbin]# 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.142.128:80 rr
  -> 192.168.0.132:80             Masq    1      1          0         
  -> 192.168.0.133:80             Masq    1      0          1         
[root@131 sbin]# !curl
curl 192.168.142.128
this is 133  site
[root@131 sbin]# curl 192.168.142.128
this is a slave site.
[root@131 sbin]# curl 192.168.142.128
this is 133  site
[root@131 sbin]# curl 192.168.142.128
this is a slave site.
[root@131 sbin]# curl 192.168.142.128
this is 133  site
 
 
 
DR模式搭建 – 准备工作
 
 
三台机器
 
分发器,也叫调度器(简写为dir)
133.130
 
rs1
133.132
 
rs2
133.133
vip
133.200
 
 
DR模式搭建
 
 
dir上编写脚本 vim /usr/local/sbin/lvs_dr.sh //内容如下
 
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=192.168.133.200
rs1=192.168.133.132
rs2=192.168.133.133
#注意这里的网卡名字
ifdown ens33
ifup ens33
ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev ens33:2
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
 
 
两台rs上也编写脚本 vim /usr/local/sbin/lvs_rs.sh//内容如下
 
#/bin/bash
vip=192.168.133.200
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
 
分别在dir上和两个rs上执行这些脚本
测试
 
再开启一台linux 服务器 用 curl来测试
 
 
[root@centos6 ~]# curl 192.168.0.200
this is 133  site
[root@centos6 ~]# curl 192.168.0.200
this is a slave site.
[root@centos6 ~]# curl 192.168.0.200
this is 133  site
[root@centos6 ~]# curl 192.168.0.200
this is a slave site.
[root@centos6 ~]# curl 192.168.0.200
this is 133  site
[root@centos6 ~]# curl 192.168.0.200
this is a slave site.
[root@centos6 ~]# curl 192.168.0.200
this is 133  site
 
 
 
Keepalived+LVS DR
 
 
完整架构需要两台服务器(角色为dir)分别安装keepalived软件,目的是实现高可用,但keepalived本身也有负载均衡的功能,所以本次实验可以只安装一台keepalived
keepalived内置了ipvsadm的功能,所以不需要再安装ipvsadm包,也不用编写和执行那个lvs_dir的脚本
三台机器分别为:
 
dir(安装keepalived)133.130
rs1 133.132
rs2 133.133
vip 133.200
 
 
 
编辑keepalived配置文件 vim /etc/keepalived/keepalived.conf//内容请到https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/lvs_keepalived.conf 获取
需要更改里面的ip信息
 
vrrp_instance VI_1 {
    #备用服务器上为 BACKUP
    state MASTER
    #绑定vip的网卡为ens33,你的网卡和阿铭的可能不一样,这里需要你改一下
    interface eno16777736
    virtual_router_id 51
    #备用服务器上为90
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux
    }
    virtual_ipaddress {
        192.168.0.200
    }
}
virtual_server 192.168.0.200 80 {
    #(每隔10秒查询realserver状态)
    delay_loop 10
    #(lvs 算法)
    lb_algo wlc
    #(DR模式)
    lb_kind DR
    #(同一IP的连接60秒内被分配到同一台realserver)
    persistence_timeout 0
    #(用TCP协议检查realserver状态)
    protocol TCP
    real_server 192.168.0.132 80 {
        #(权重)
        weight 100
        TCP_CHECK {
        #(10秒无响应超时)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.0.133 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}
 
 
 
执行ipvsadm -C  把之前的ipvsadm规则清空掉
systemctl restart network 可以把之前的vip清空掉
两台rs上,依然要执行/usr/local/sbin/lvs_rs.sh脚本
keepalived有一个比较好的功能,可以在一台rs宕机时,不再把请求转发过去
测试
 
[root@centos6 ~]# curl 192.168.0.200
this is 133  site
[root@centos6 ~]# curl 192.168.0.200
this is a slave site.
[root@centos6 ~]# curl 192.168.0.200
this is 133  site
[root@centos6 ~]# curl 192.168.0.200
this is a slave site.
 
 
若关闭 rs2   
测试:
[root@centos6 ~]# curl 192.168.0.200
this is a slave site.
[root@centos6 ~]# curl 192.168.0.200
this is a slave site.
[root@centos6 ~]# curl 192.168.0.200
this is a slave site.
[root@centos6 ~]# curl 192.168.0.200
this is a slave site.
[root@centos6 ~]# curl 192.168.0.200
this is a slave site.

linux集群架构的更多相关文章

  1. Linux集群架构(二)

    Linux集群架构(二) 目录 八.LVS DR模式搭建 九.keepalived + LVS 十.扩展 八.LVS DR模式搭建 1.实验环境: 四台机器: client: 10.0.1.50 Di ...

  2. Linux集群架构(一)

    第二十八课 Linux集群架构(一) 目录 一. 集群介绍 二. keepalived介绍 三. 用keepalived配置高可用集群 四. 负载均衡集群介绍 五. LVS介绍 六. LVS调度算法 ...

  3. Linux 集群架构

    集群介绍 Keepalived 配置高可用集群

  4. Linux centosVMware Linux集群架构LVS DR模式搭建、keepalived &plus; LVS

    一.LVS DR模式搭建 三台机器 分发器,也叫调度器(简写为dir) davery :1.101 rs1 davery01:1.106 rs2 davery02:11.107 vip 133.200 ...

  5. Linux Web集群架构详细&lpar;亲测可用&excl;&excl;&excl;&rpar;

    注意:WEB服务器和数据库需要分离,同时WEB服务器也需要编译安装MySQL. 做集群架构的重要思想就是找到主干,从主干区域向外延展. WEB服务器: apache nginx  本地做三个产品 de ...

  6. Linux集群

    集群的起源: 集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发.由于主要用于科学工程计算,所以这些系统并不为大家所熟知.直到Linux集群的出现,集群的概念 ...

  7. Linux集群服务 LVS

    linux虚拟服务器(LVS)项目在linux操作系统上提供了最常见的负载均衡软件. 集群定义: 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性 ...

  8. 网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync&plus;Inotify全网备份、Zabbix自动注册全网监控)--技术流ken

    前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高 ...

  9. MySQL集群架构:MHA&plus;MySQL-PROXY&plus;LVS实现MySQL集群架构高可用&sol;高性能-技术流ken

    MHA简介 MHA可以自动化实现主服务器故障转移,这样就可以快速将从服务器晋级为主服务器(通常在10-30s),而不影响复制的一致性,不需要花钱买更多的新服务器,不会有性能损耗,容易安装,不必更改现有 ...

随机推荐

  1. 软件工程(C编码实践篇)课程总结

    课程内容来自网易云课堂中科大孟宁老师的软件工程(C编码实践篇)课程. 课程页面 我觉得本门课程的设置非常科学,每一周课程都是基于上一周课程的进一步抽象,使得学习者能够循序渐进,逐渐加深对软件工程的理解 ...

  2. NOIP2012pj文化之旅&lbrack;floyd&rsqb;

    描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次,即如果他学习了某种文化,则他就不能到达其他有这种文化的国家.不同的国家可能有相同的文化.不同文化的国家 ...

  3. JAVA基础学习day25--Socket基础二-多线程

    一.上传图片 1.1.示例 /* 上传图片 */ import java.net.*; import java.io.*; import java.util.*; import java.text.* ...

  4. 【读书笔记《Android游戏编程之从零开始》】1&period;Android 平台简介与环境搭建

    简单的记录下笔记,具体可百度! Android SDK (Software Development Kit)- Android 软件开发工具包,用于辅助Android 操作系统软件开发,是开发Andr ...

  5. 【Linux高频命令专题&lpar;2&rpar;】awk

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  6. 武汉科技大学ACM :1001&colon; 零起点学算法34——继续求多项式

    Problem Description 输入1个正整数n, 计算1+(1+2)+(1+2+3)+...+(1+2+3+...+n) Input 输入正整数n(多组数据) Output 输出1+(1+2 ...

  7. 小步快跑的公司可以最简化操作直接通过log4net将日志写入ElasticSearch

     很多小步快跑的公司,开发人员多则3-4个,面对巨大业务压力,日连夜的赶着上线,快速试错,自然就没时间搭建一些基础设施,比如说logCenter,但初期 项目不稳定,bug又多,每次都跑到生产去找日志 ...

  8. centos Install Mrtg

    安装支持软件包yum –y install gcc perl gd libpng zlib net-snmp mrtg配置snmpd编辑/etc/snmp/snmpd.conf文件备份snmpd.co ...

  9. 5213 Exp3 免杀原理与实践

    5213 Exp3 免杀原理与实践 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧 使用msf编码器 ...

  10. TagsView&period;vue

    1.TagsView.vue <template> <div class="tags-view-container"> <scroll-pane cl ...