2018-07-23 第二十九次课

Linux集群架构(二)

目录

八、LVS DR模式搭建

九、keepalived + LVS

十、扩展

八、LVS DR模式搭建

1、实验环境:

四台机器:

client: 10.0.1.50

Director节点: (ens32 10.0.1.55 vip ens32:0 10.0.1.58)

Real server1: (ens32 10.0.1.56 vip lo:0 10.0.1.58)

Real server2: (ens32 10.0.1.57 vip lo:0 10.0.1.58)

2、安装

//两台real server需安装web服务。之前已经装过,略过
//在director安装ipvsadm软件包,可参考lvs nat部分
[[email protected] ~]# yum -y install ipvsadm

3、在director上配置脚本

[[email protected] ~]# vim /usr/local/sbin/lvs-dr.sh
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=10.0.1.58
rs1=10.0.1.56
rs2=10.0.1.57
ifconfig ens32:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev ens32:0
$ipv -C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 3
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

//赋予755权限,
[[email protected] ~]# chmod 755 /usr/local/sbin/lvs-dr.sh

//执行脚本
[[email protected] ~]# /usr/local/sbin/lvs-dr.sh

//查看状态
[[email protected] ~]# chmod 755 /usr/local/sbin/lvs-dr.sh^C
[[email protected] ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.1.58:80 rr
  -> 10.0.1.56:80                 Route   3      0          0
  -> 10.0.1.57:80                 Route   1      0          0         

4、在两台real server配置脚本

[[email protected] ~]# vim /usr/local/sbin/lvs-dr-rs.sh
#!/bin/bash
vip=10.0.1.58
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
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

//赋予755权限,然后执行
[[email protected] ~]# chmod 755 /usr/local/sbin/lvs-dr-rs.sh  

//执行
[[email protected] ~]# /usr/local/sbin/lvs-dr-rs.sh

5、测试

//当前采用的是rr调度算法
Last login: Mon Jul 23 14:47:55 2018
[[email protected] ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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 qlen 1000
    link/ether 00:0c:29:a2:07:b1 brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.50/24 brd 10.0.1.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fea2:7b1/64 scope link
       valid_lft forever preferred_lft forever
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# 

九、keepalived + LVS

LVS可以实现负载均衡,但是不能够进行健康检查,如一个rs出现故障,LVS 仍然会把请求转发给故障的rs服务器,这就会导致请求的无效性。keepalive 软件可以进行健康检查,而且能同时实现 LVS 的高可用性,解决 LVS 单点故障的问题,其实 keepalive 就是为 LVS 而生的。

1、实验环境

4台节点

Keepalived1 + lvs1(Director1):10.0.1.55

Keepalived2 + lvs2(Director2):10.0.1.59

Real server1:10.0.1.56

Real server2:10.0.1.57

VIP: 192.168.0.58

2.软件安装

//Keepalived + lvs两个节点安装
[[email protected] ~]# yum install ipvsadm keepalived -y

//两个read server安装nignx, 之前环境已经安装过,此处略

3.设置配置脚本

//两台real server节点建立脚本
[[email protected] ~]# vim /usr/local/sbin/lvs-dr-rs.sh
#!/bin/bash
vip=10.0.1.58
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
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

//赋予755权限,然后执行
[[email protected] ~]# chmod 755 /usr/local/sbin/lvs-dr-rs.sh  

//执行
[[email protected] ~]# /usr/local/sbin/lvs-dr-rs.sh

//两台keepalived节点配置
//master节点配置文件
[[email protected] ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    #备用服务器上为 BACKUP
    state MASTER
    interface ens32
    virtual_router_id 51
    #备用服务器上为90
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux
    }
    virtual_ipaddress {
        10.0.1.58
    }
}
virtual_server 10.0.1.58 80 {
    #(每隔10秒查询realserver状态)
    delay_loop 10
    #(lvs 算法)
    lb_algo wrr
    #(DR模式)
    lb_kind DR
    #(同一IP的连接60秒内被分配到同一台realserver)
    #实验环境注释掉,不然看不到rr的效果
    #persistence_timeout 60
    #(用TCP协议检查realserver状态)
    protocol TCP

    real_server 10.0.1.56 80 {
        #(权重)
        weight 1
        TCP_CHECK {
        #(10秒无响应超时)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 10.0.1.57 80 {
        weight 1
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

//backup节点
[[email protected] ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    #备用服务器上为 BACKUP
    state BACKUP
    interface ens32
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux
    }
    virtual_ipaddress {
        10.0.1.58
    }
}
virtual_server 10.0.1.58 80 {
    #(每隔10秒查询realserver状态)
    delay_loop 10
    #(lvs 算法)
    lb_algo rr
    #(DR模式)
    lb_kind DR
    #(同一IP的连接60秒内被分配到同一台realserver)
    #persistence_timeout 60
    #(用TCP协议检查realserver状态)
    protocol TCP

    real_server 10.0.1.56 80 {
        #(权重)
        weight 1
        TCP_CHECK {
        #(10秒无响应超时)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 10.0.1.57 80 {
        weight 1
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

4.在keepalived两个节点开启转发功能

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

5.在两个节点启动keepalive,

[[email protected] ~]# systemctl start keepalived.service
[[email protected] ~]# systemctl start keepalived.service

6.测试

//测试1:手动关闭10.0.1.56节点的nginx,在客户端上去测试访问

//在10.0.1.56上操作
[[email protected] ~]# /usr/local/nginx/sbin/nginx -s stop
[[email protected] ~]# lsof -i :80

//在10.0.1.50客户端上测试
Last login: Mon Jul 23 14:49:10 2018 from 10.0.1.229
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
//结果正常,不会出现访问10.0.1.56节点,一直访问的是10.0.1.57节点的内容。

//测试2 手动重新开启 10.0.1.56 节点的nginx, 在客户端上去测试访问
//在10.0.1.56上操作
[[email protected] ~]# lsof -i :80
[[email protected] ~]# /usr/local/nginx/sbin/nginx
[[email protected] ~]# lsof -i :80
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   2969  root    6u  IPv4  48805      0t0  TCP *:http (LISTEN)
nginx   2970 nginx    6u  IPv4  48805      0t0  TCP *:http (LISTEN)
nginx   2971 nginx    6u  IPv4  48805      0t0  TCP *:http (LISTEN)
//在10.0.1.50上测试
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
//结果正常,按照 rr 调度算法访问10.0.1.56节点和10.0.1.57节点内容。

//测试 keepalived 的HA特性
//ip addr查看,此时10.0.1.58的vip在主上
       valid_lft forever preferred_lft forever
[[email protected] ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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 qlen 1000
    link/ether 00:0c:29:85:24:8c brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.55/24 brd 10.0.1.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet 10.0.1.58/32 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe85:248c/64 scope link
       valid_lft forever preferred_lft forever
//停止master上的keepalived
[[email protected] ~]# systemctl stop keepalived.service
[[email protected] ~]# 

//在dr2上查看,vip抢占过来了
[[email protected] ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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 qlen 1000
    link/ether 00:0c:29:dd:53:4e brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.59/24 brd 10.0.1.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet 10.0.1.58/32 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::c388:e67a:4ac3:6566/64 scope link
       valid_lft forever preferred_lft forever

//在10.0.1.50上测试
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[[email protected] ~]# curl 10.0.1.58
I am lvs-backend2!!!
[[email protected] ~]# curl 10.0.1.58
//可以正常访问后端的网站,验证了keepalived的特性

//重新开启master上的keepalived
[[email protected] ~]# systemctl start keepalived.service
[[email protected] ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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 qlen 1000
    link/ether 00:0c:29:85:24:8c brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.55/24 brd 10.0.1.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet 10.0.1.58/32 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe85:248c/64 scope link
       valid_lft forever preferred_lft forever

十、扩展

heartbeat和keepalived比较

http://blog.csdn.net/yunhua_lee/article/details/9788433

DRBD工作原理和配置

http://502245466.blog.51cto.com/7559397/1298945

mysql+keepalived

http://lizhenliang.blog.51cto.com/7876557/1362313

lvs 三种模式详解

http://www.it165.net/admin/html/201401/2248.html

lvs几种算法

http://www.aminglinux.com/bbs/thread-7407-1-1.html

关于arp_ignore和 arp_announce

http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

lvs原理相关的

http://blog.csdn.net/pi9nc/article/details/23380589

haproxy+keepalived

http://blog.csdn.net/xrt95050/article/details/40926255

nginx、lvs、haproxy比较

http://www.csdn.net/article/2014-07-24/2820837

keepalived中自定义脚本 vrrp_script

http://my.oschina.net/hncscwc/blog/158746

lvs dr模式只使用一个公网ip的实现方法

http://storysky.blog.51cto.com/628458/338726

原文地址:https://www.cnblogs.com/minn/p/9355826.html

时间: 2024-10-10 22:19:14

2018-07-23 第二十九次课的相关文章

学习笔记第二十九节课

监控io性能 iostat iotop 在运维工作中是除了 cpu 内存外 也是一个重要的指标,是查看磁盘的问题. 有时候cpu 内存都有剩余,负载却很高,用vmstat 查看,发现 b 或者wa 比较大.说明磁盘有瓶颈. iostat 和sar是同一个包.用法是 直接回车 也可以加 数字 . 显示出来的东西就i是你的硬盘 的读写速度.这个看不出来什么 和sar -q 是差不多的. 主要的是 iostat -x 里面的%util 这个百分比表示io等待. 原文地址:http://blog.51c

NeHe OpenGL教程 第二十九课:Blt函数

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第二十九课:Blt函数 Blitter 函数: 类似于DirectDraw的blit函数,过时的技术,我们有实现了它.它非常的简单,就是把一块纹理贴到另一块纹理上. 这篇文章是有Andreas Lffler所写的,它写了一份原始的教

2018-07-06 第二十二次课

第二十二次课 LNMP(三) 目录 一.Nginx负载均衡 二.ssl原理 三.生成ssl密钥对 四.Nginx配置ssl 五.php-fpm的pool 六.php-fpm慢执行日志 七.open_basedir 八.php-fpm进程管理 九.扩展 一.Nginx负载均衡 nginx的负载均衡实现过程如下 1.在vhost下添加配置文件proxy.conf [[email protected] ~]# vim /usr/local/nginx/conf/vhost/proxy.conf //添

七月算法--12月机器学习在线班-第十九次课笔记-深度学习--CNN

七月算法--12月机器学习在线班-第十九次课笔记-深度学习--CNN 七月算法(julyedu.com)12月机器学习在线班学习笔记http://www.julyedu.com 1,卷积神经网络-CNN 基础知识 三个要点 1: 首先将输入数据看成三维的张量(Tensor) 2: 引入Convolution(卷积)操作,单元变成卷积核,部分连接共享权重 3:引入Pooling(采样)操作,降低输入张量的平面尺寸 ,1.1 张量(Tensor) 高,宽度,深度,eg:彩色图像:rgb,3个深度,图

centos LNMP第二部分nginx、php配置 第二十四节课

centos  LNMP第二部分nginx.php配置  第二十四节课 上半节课 下半节课 f

centos mysql 优化 第十九节课

centos mysql  优化  第十九节课 f

centos shell编程5LANMP一键安装脚本 第三十九节课

centos shell编程5LANMP一键安装脚本  第三十九节课 上半节课 下半节课 f

centos lamp/lnmp阶段复习 第二十五节课

centos  lamp/lnmp阶段复习   第二十五节课 上半节课 下半节课 f

centos LAMP第一部分-环境搭建 第十九节课

centos LAMP第一部分-环境搭建  Linux软件删除方式,mysql安装, 第十九节课 上半节课 Linux软件删除方式 mysql安装 下半节课 apache下面的一个软件httpd,大家会把httpd误认为是apache 搜狐镜像:http://mirrors.sohu.com 康盛镜像:http://www.aminglinux.com/study_v2/download.html Linux软件删除方式源码包删除:直接删除目录rpm删除:rpm -eyum 删除 yum rem