集群部署之【lvs+keepalived高可用】

此部分内容是为了测试lvs的高可用,解决nginx本身的单点故障、负载均衡,而nginx对应用的负载均衡不在此处描叙。也就是下图中的第一层lvs负载均衡的部分,第二层nginx负载均衡不在此处介绍。
架构图


image.png

1、准备环境

根据需要修改成内网IP
LVS server1 (Master):192.168.2.18 虚拟IP为:192.168.2.25
LVS server2 (Slave):192.168.2.125 虚拟IP为:192.168.2.25
WEB server1(nginx): 192.168.2.13
WEB server2(nginx); 192.168.2.15
注意:所有集群服务器时间要一致

2、两台nginx的配置

1、webserver两台安装nginx服务

nginx安装配置略。

2、webserver两台配置路由

vim /etc/init.d/realserver

#!/bin/bash
#description : start realserver

SNS_VIP=192.168.2.25 #定义了一个VIP变量,必须跟真实服务在一个网段
#/etc/rc.d/init.d/functions

case "$1" in
    start)
        echo " start LVS of REALServer"
        ifconfig lo:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255 up #增加一个本地路由 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
        ;;
    stop)
        /sbin/ifconfig lo:0 down
        echo "close LVS Directorserver"
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac

给脚本赋权限

chmod +x /etc/init.d/realserver

启动脚本

/etc/init.d/realserver start

用ifconfig查看效果

root@node05:/opt/nginx/conf# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.2.25  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

3、lsv主备安装lvs

查看是否安装lvs

root@v:/etc/keepalived# lsmod | grep ip_vs
ip_vs                 151552  0
nf_defrag_ipv6         20480  1 ip_vs
nf_conntrack          135168  1 ip_vs
libcrc32c              16384  4 nf_conntrack,xfs,raid456,ip_vs

没有安装的时候,需要安装

#安装内核kernels
sudo apt-get install linux-kernel-headers kernel-package
# 安装lvs
apt install ipvsadm
#查看集群
ipvsadm -Ln

4、lvs主备安装keepalived

1、lvs主备安装keepalived

apt-get install gcc libssl-dev

wget http://www.keepalived.org/software/keepalived-1.2.24.tar.gz
tar xf keepalived-1.2.24.tar.gz         
cd keepalived-1.2.24
./configure --prefix=/usr/local/keepalived
make && make install
#将配置文件拷贝到系统对应的目录下:
mkdir /etc/sysconfig
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/lib/systemd/system/keepalived.service /lib/systemd/system/
#开机自启
sudo systemctl enable keepalived.service
#取消开机自启
sudo systemctl disable keepalived.service
#启动
service keepalived start
#关闭
service keepalived stop

keepalived日志配置

#keepalived查看日志
#在/etc/rsyslog.conf 末尾添加
vim /etc/rsyslog.conf 
local0.*  /var/log/keepalived.log

vim /etc/sysconfig/keepalived
把KEEPALIVED_OPTIONS="-D" 修改为
KEEPALIVED_OPTIONS="-D -d -S 0"
#重启日志记录服务
systemctl restart rsyslog 
systemctl status rsyslog 
#重启keepalived
systemctl restart keepalived

2、lvs主备keepalived配置

1、lvs主keepalived配置
global_defs {                       
#   notification_email {             
#   }
#   smtp_connect_timeout 30
    router_id LVS_DEVEL             
}
vrrp_instance VI_1 {            
    state MASTER     #配置LVS是主机的状态        
    interface ens160     #配置LVS机器对外开放的IP       
    virtual_router_id 51        
    priority 100                  
    advert_int 1           
    authentication {        
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {         
        192.168.2.25    #LVS的对内IP
    }
}
virtual_server 192.168.2.25 80 {
    delay_loop 6           
    lb_algo wrr            
    lb_kind DR         #使用LVSDR模式   DR直接路由模式 
    nat_mask 255.255.255.0   
    persistence_timeout 0    
    protocol TCP    
    real_server 192.168.2.13 80 {    #真实服务的IP 
        weight 1        #配置加权轮询的权重             
        TCP_CHECK {                     
            connect_timeout 10   
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 192.168.2.15 80 {
        weight 2
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
2、lvs备keepalived配置
global_defs {                       
#   notification_email {             
#   }
#   smtp_connect_timeout 30
    router_id LVS_DEVEL             
}
vrrp_instance VI_1 {            
    state BACKUP     #配置LVS是备机的状态        
    interface ens160     #配置LVS机器对外开放的IP       
    virtual_router_id 51        
    priority 100                  
    advert_int 1           
    authentication {        
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {         
        192.168.2.25    #LVS的对内IP
    }
}
virtual_server 192.168.2.25 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR         #使用LVSDR模式   DR直接路由模式            
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP                          
    real_server 192.168.2.13 80 {    #真实服务的IP 
        weight 1        #配置加权轮询的权重             
        TCP_CHECK {
            connect_timeout 10   
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 192.168.2.15 80 {
        weight 2
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

先启动主LVS用来测试,等LVS测试之后,再做LVS主备切换测试。

3、启动主LVS的keepalived

systemctl restart keepalived

查看LVS

root@v:/etc/keepalived# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  v:http wrr
  -> 192.168.2.13:http            Route   1      0          0         
  -> 192.168.2.15:http            Route   2      0          0  

3、LVS测试

1、访问虚拟IP,lvs负载均衡切换的时候会维持一段时间,才会切换

http://192.168.2.25
可以看到页面在2.15和2.13之间切换。

1、查看LVS状态
root@v:/etc/keepalived# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  v:http wrr
  -> 192.168.2.13:http            Route   1      0          0         
  -> 192.168.2.15:http            Route   1      0          0    

2、故障移除

故障移除,停其中一个服务,认为down掉了

/etc/init.d/nginx stop

1、查看LVS状态
root@v:/etc/keepalived# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  v:http wrr
  -> 192.168.2.15:http            Route   1      0          0   

root@v:/etc/keepalived# ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 13:20  ESTABLISHED 192.168.2.201:54031 192.168.2.25:80    192.168.2.15:80
TCP 06:05  ESTABLISHED 192.168.2.201:64717 192.168.2.25:80    192.168.2.15:80

3、故障恢复自动添加

/etc/init.d/nginx start

1、查看LVS状态
root@v:/etc/keepalived# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  v:http wrr
  -> 192.168.2.13:http            Route   1      1          0         
  -> 192.168.2.15:http            Route   1      2          0    

4、LVS主备测试

1、主LVS模拟挂掉
service keepalived stop
2、测试后,证明主备自动切换,LVS高可用

3、主LVS启动,自动上位
service keepalived start
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容