Linux集群架构(二)
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部分
[root@lvs-dr ~]# yum -y install ipvsadm
3、在director上配置脚本
[root@lvs-dr1 ~]# 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权限,
[root@lvs-dr1 ~]# chmod 755 /usr/local/sbin/lvs-dr.sh
//执行脚本
[root@lvs-dr1 ~]# /usr/local/sbin/lvs-dr.sh
//查看状态
[root@lvs-dr1 ~]# chmod 755 /usr/local/sbin/lvs-dr.sh^C
[root@lvs-dr1 ~]# 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配置脚本
[root@lvs-backend1 ~]# 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权限,然后执行
[root@lvs-backend1 ~]# chmod 755 /usr/local/sbin/lvs-dr-rs.sh
//执行
[root@lvs-backend1 ~]# /usr/local/sbin/lvs-dr-rs.sh
5、测试
//当前采用的是rr调度算法
Last login: Mon Jul 23 14:47:55 2018
[root@localhost ~]# 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
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]#
九、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两个节点安装
[root@localhost ~]# yum install ipvsadm keepalived -y
//两个read server安装nignx, 之前环境已经安装过,此处略
3.设置配置脚本
//两台real server节点建立脚本
[root@lvs-backend1 ~]# 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权限,然后执行
[root@lvs-backend1 ~]# chmod 755 /usr/local/sbin/lvs-dr-rs.sh
//执行
[root@lvs-backend1 ~]# /usr/local/sbin/lvs-dr-rs.sh
//两台keepalived节点配置
//master节点配置文件
[root@lvs-dr1 ~]# 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节点
[root@lvs-backend2 ~]# 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两个节点开启转发功能
[root@lvs-dr1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
5.在两个节点启动keepalive,
[root@lvs-dr1 ~]# systemctl start keepalived.service
[root@lvs-dr2 ~]# systemctl start keepalived.service
6.测试
//测试1:手动关闭10.0.1.56节点的nginx,在客户端上去测试访问
//在10.0.1.56上操作
[root@lvs-backend1 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@lvs-backend1 ~]# lsof -i :80
//在10.0.1.50客户端上测试
Last login: Mon Jul 23 14:49:10 2018 from 10.0.1.229
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
//结果正常,不会出现访问10.0.1.56节点,一直访问的是10.0.1.57节点的内容。
//测试2 手动重新开启 10.0.1.56 节点的nginx, 在客户端上去测试访问
//在10.0.1.56上操作
[root@lvs-backend1 ~]# lsof -i :80
[root@lvs-backend1 ~]# /usr/local/nginx/sbin/nginx
[root@lvs-backend1 ~]# 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!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# 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
[root@lvs-dr1 ~]# 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
[root@lvs-dr1 ~]# systemctl stop keepalived.service
[root@lvs-dr1 ~]#
//在dr2上查看,vip抢占过来了
[root@lvs-dr2 ~]# 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!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
I am Lvs-backend1!!!
[root@localhost ~]# curl 10.0.1.58
I am lvs-backend2!!!
[root@localhost ~]# curl 10.0.1.58
//可以正常访问后端的网站,验证了keepalived的特性
//重新开启master上的keepalived
[root@lvs-dr1 ~]# systemctl start keepalived.service
[root@lvs-dr1 ~]# 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
Linux集群架构(二)的更多相关文章
- Linux集群架构(一)
第二十八课 Linux集群架构(一) 目录 一. 集群介绍 二. keepalived介绍 三. 用keepalived配置高可用集群 四. 负载均衡集群介绍 五. LVS介绍 六. LVS调度算法 ...
- linux集群架构
Linux集群架构 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heart ...
- Linux 集群架构
集群介绍 Keepalived 配置高可用集群
- Linux centosVMware Linux集群架构LVS DR模式搭建、keepalived + LVS
一.LVS DR模式搭建 三台机器 分发器,也叫调度器(简写为dir) davery :1.101 rs1 davery01:1.106 rs2 davery02:11.107 vip 133.200 ...
- Linux 笔记 - 第十八章 Linux 集群之(二)LVS 负载均衡集群
一.前言 Linux 集群从功能上可以分为两大类:高可用集群和负载均衡集群.上一篇已经讲解了 HA 高可用集群,此节讲解负载均衡集群. 负载均衡集群(Load Balance Cluseter,简称 ...
- 二、ELKStack集群架构设计
一.ELKStack介绍与入门实践 二.Elasticsearch 集群架构图 服务器配置:Centos6.6 x86_64 CPU:1核心 MEM:2G (做实验,配置比较低一些) 注:这里配置el ...
- Linux Web集群架构详细(亲测可用!!!)
注意:WEB服务器和数据库需要分离,同时WEB服务器也需要编译安装MySQL. 做集群架构的重要思想就是找到主干,从主干区域向外延展. WEB服务器: apache nginx 本地做三个产品 de ...
- [转]搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
- 搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
随机推荐
- 【GO】【LiteIDE】
https://blog.csdn.net/qq_32034593/article/details/82986311 下载地址:https://www.golangtc.com/download/li ...
- 201806 数据处理 SQL、python、shell 哪家强...速度PK(上篇)
最近在工作中,进行大量的数据处理,使用的是mysql5.7.22,发现当数据量级达到几十万之后,SQL执行速度明显变慢.尤其是当多个表join时,于是就尝试用python pandas进行数据处理,发 ...
- CSS之垂直水平居中方法
//居中方法1 position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto; width: 346px; height ...
- rtf乱码解决办法
首先,阐述下rtf,富文本格式文档,目前常用来做模板: 我遇到的问题是rtf中替换后的文本显示是正常的,rtf直接转pdf就不正常了,通过notpad++ 打开后发现rtf本身内容编码是我没有见过的( ...
- python 学习笔记 4 ----> dive into python 3
解析 列表解析.字典解析.集合解析 浏览本地文件系统的模块: 1 os 2 os.path 3 glob os模块:获取(和修改)本地目录.文件进程.环境变量等信息 os.path模块:包含了操作路径 ...
- Nginx缓存
一.基于proxy_cache的缓存 worker_processes ; events { worker_connections ; } http { include mime.types; def ...
- LRU算法的Java实现
LRU全称是Least Recently Used,即最近最久未使用的意思. LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小.也就是说,当限定的空间已 ...
- 【转】所有版本chrome、chromedriver、firefox下载链接
所有版本chrome.chromedriver.firefox下载链接 1. 所有版本chrome下载 是不是很难找到老版本的chrome?博主收集了几个下载chrome老版本的网站,其中哪个下载的是 ...
- Table的两种处理方法记录
简单记录一下,方便以后参考:基于JQuery实现 一种是滚轮,一种是翻页 滚轮的代码实现: <div class="col-md-12" style="width: ...
- javascript高级程序设计第3版——第6章 面向对象的程序设计
第六章——面向对象的程序设计 这一章主要讲述了:面向对象的语言由于没有类/接口情况下工作的几种模式以及面向对象语言的继承: 模式:工厂模式,构造函数模式,原型模式 继承:原型式继承,寄生式继承,以及寄 ...