18.1 集群介绍
18.2 keepalived介绍
18.3 用keepalived配置高可用集群(上)
准备两台机器
一个为mater 另一个为backup
两台机器都关闭防火墙
两台机器都安装上nginx,为了下一步实验用
两台机器都安装keepalived
•yum install -y keepalived
设定vip为100
master上的配置文件
cat /etc/keepalived/keepalived.conf
global_defs {
notification_email {
aming@aminglinux.com
}
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 ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {
192.168.93.100
}
track_script {
chk_nginx
}
}
master上监控脚本
/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 启动服务
18.4 用keepalived配置高可用集群(中)
backup 配置文件
/etc/keepalived/keepalived.conf
global_defs {
notification_email {
aming@aminglinux.com
}
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 ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {
192.168.93.100
}
track_script {
chk_nginx
}
}
监控脚本
/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
/etc/init.d/nginx start
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 启动服务
18.5 用keepalived配置高可用集群(下)
18.6 负载均衡集群介绍
18.7 LVS介绍
18.8 LVS的调度算法
18.9 LVS NAT模式搭建(上)
centos1安装 ipvsdam
yum install -y ipvsdam
centos1 网卡配置
dir 编写配置脚本
/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.93.0/24 -j MASQUERADE
# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.188.110:80 -s rr
$IPVSADM -a -t 192.168.188.110:80 -r 192.168.93.128:80 -m -w 1
$IPVSADM -a -t 192.168.188.110:80 -r 192.168.93.130:80 -m -w 1
18.10 LVS NAT模式搭建(下)
centos2的网关设为dir
centos3的网关设为dir
课堂串讲
18.1 集群介绍
18.2 keepalived介绍
18.3/18.4/18.5 用keepalived配置高可用集群
18.1 集群介绍
- 集群根据功能划分为两大类:
高可用
和负载均衡
高可用集群
通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务
实现高可用的开源软件有:heartbeat
、keepalived
负载均衡集群
,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2。实现负载均衡的开源软件有LVS
、keepalived
、haproxy
、nginx
,商业的有F5
、Netscaler
18.2 keepalived介绍
在这里我们使用keepalived
来实现高可用集群,因为heartbeat
在centos6上有一些问题,不太稳定。建议以后使用高可用使用keepalived实现。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协议的。
18.3/18.4/18.5 用keepalived配置高可用集群
先准备两台机器做高可用集群 一般使用高可用都是针对机器上的服务的 这里以Nginx服务为例子,就是针对Nginx来实现高可用 企业上一般会让Nginx
作为负载均衡
来使用,当他出现单点故障时,就会导致后端的web机器访问不了, Nginx使用高可用是很有必要的。
192.168.80.102为master 192.168.80.104为backup
步骤
1.两台机器上分别安装keepalived
| |
2.两台机器上分别安装好针对的服务,这里是Nginx
master上之前编译安装过Nginx
backup为了区别用master 这里使用yum安装
| |
3.master上编辑keepalived配置文件
我们可以先把自动的配置文件清空 才自定义编辑
| |
输入下面内容
| |
内容在 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf
keepalived配置文件路径在/etc/keepalived/keepalived.conf
参数 | 含义 |
---|---|
global_defs | 全局定义 |
notification_email | 出现问题时给邮箱发邮件 |
notification_email_from | 又哪个邮箱发邮件 |
vrrp_script chk_nginx | 检查Nginx服务是否正常 指定检查脚本的路径 |
interval 3 | 检查间断为3秒 |
state MASTER | 定义master |
interface | 指定网卡发送VRRP包 |
virtual_router_id | 定义路由群的id |
priority | 定义权重 |
authentication | 定义认证 |
auth_type | 认证类型 |
auth_pass | 认证密码 |
virtual_ipaddress | 定义虚拟ip(vip)此IP用来访问此虚拟路由群的,就是把master和backup看作一台机器单个IP |
chk_nginx | 加载检查脚本 |
4.master上编写检查Nginx脚本
| |
输入下面内容
| |
内容在 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh
脚本上systemctl stop keepalived
关闭keepalived服务是为了启动backup上的keepaliveed时候 不会出现“脑裂
”现象。即master和backup的keepaliveed各自抢占资源,如VIP,外部访问时候出现两台机器同个ip。
5.更改检查脚本的权限
| |
6.master上启动keepalived服务
| |
测试
master上停止Nginx服务看是否自动开启
| |
发现没有启动Nginx,这里是防火墙问题
| |
现在看到Nginx是自动开启的
| |
ip add
查看VIP
keepalived日志在/var/log/messages
中看到
7.为了让实验成功 两台机器都关闭防火墙
| |
8.backup上编辑keepalived配置文件
| |
输入下面内容
| |
内容在 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf
这里和master上的不一样的地方是state BACKUP
和priority 90
backup的权重比主少
9.backup上编写检查Nginx脚本
| |
输入下面内容
| |
内容在 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh
和主上的区别在于 systemctl start nginx
是由于从机器上使用yum安装的
10.修改backup上的脚本权限并启动keepalived服务
| |
测试
master上之前设置了默认虚拟主机 更改主页内容
backup主页的地址在/usr/share/nginx/html/index.html
并更改主页内容
同时查看vip是加载maser的主页的
模拟master机器宕机,直接把maser上的keepalied服务给停掉 早看看vip是否给了backup
| |
留意backup
| |
看到vip已经来到了backup上,再用浏览器看看
再把maser上的keepalived启动 发现vip又回到了主上
| |
18.6 负载均衡集群介绍
18.7 LVS介绍
18.8 LVS调度算法
18.9/18.10 LVS NAT模式搭建
18.6 负载均衡集群介绍
负载均衡主流开源软件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这种。但是nginx可以实现根据目录来区分后端的服务器等更为灵活的功能。
相比较来说,LVS这种4层的更稳定,能承受更多的请求,而nginx这种7层的更加灵活,能实现更多的个性化需求。
18.7 LVS介绍
LVS
是由国人章文嵩开发的。其流行度不亚于apache的httpd,是基于TCP/IP做的路由和转发,稳定性和效率很高。
LVS最新版本基于Linux内核2.6,有好多年不更新了。
LVS有三种常见的模式:NAT
、DR
、IP Tunnel
LVS架构中有一个核心角色叫做分发器
(Load balance),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称rs
)
NAT模式
这种模式借助iptables的nat表来实现
用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去
rs需要设定网关为分发器的内网ip
用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器成为瓶颈,一般请求量在10台以下。
在nat模式中,只需要分发器有公网ip即可,所以比较节省公网ip资源。
IP Tunnel模式
这种模式,需要有一个公共的IP配置在分发器和所有rs上,我们把它叫做vip
客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为rs的IP,这样数据包就到了rs上
rs接收数据包后,会还原原始数据包,这样目标IP又变回为vip,因为所有rs上配置了这个vip,此时它会认为用户请求的就是它自己。
这个模式下的rs都会独立的公网IP来回复用户的请求,可以减少分发器的压力。
DR模式
这种模式,也需要有一个公共的IP配置在分发器和所有rs上,也就是vip
和IP Tunnel不同的是,它会把数据包的MAC地址修改为rs的MAC地址
rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己。
此模式下rs配置公网IP来返回用户请求。
总结
综上所述,nat模式
就是做iptables路由转发
IP Tunnel模式
实际上是更改目标IP
DR模式
是更改目标MAC地址
18.8 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 |
18.9/18.10 LVS NAT模式搭建
准备工作
准备三台机器 一台作分发器,两台作rs
分发器:kun03 内网:192.168.80.102 外网:192.168.218.128
rs1:kun05 内网:192.168.80.104 网关:192.168.80.102
rs2:kun06 内网:192.168.80.105 网关:192.168.80.102
kun03上添加外网网卡 选择仅主机模式
编辑外网网卡配置
| |
| |
| |
可以ping通
kun05和kun06上设置网关为192.168.80.102
| |
| |
三台机器上关闭firewalld
| |
各自下载iptables 并清空规则和保存
| |
步骤
1.在分发器上安装ipvsadm工具
在kun03上
| |
ipvsadm
工具实现lvs功能
2.在分发器上编辑脚本
| |
| |
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -j MASQUERADE
让同网段的网实现上网ipvsadm -C
清除lvs规则-A
增加规则-t
指定分发器外网IP-s
指定算法-p
指定rs上的超时时间-m
指NAT模式-w
指定权重
3.执行脚本
| |
测试
两台rs上安装Nginx
之前在kun05机器上yum了安装过Nginx 现在在kun06上安装
| |
设置两台rs的主页,做一个区分
| |
| |
| |
在分发器上使用curl命令访问公网ip
| |
使用浏览器访问
ipvsadm -ln 可以查看ipvsadm分发数据的情况
[root@kun03 ~]# 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.218.128:80 rr
-> 192.168.80.104:80 Masq 1 0 6
-> 192.168.80.105:80 Masq 1 1 4
扩展:
VRRP协议
https://blog.csdn.net/u013920085/article/details/21184143
keepalived邮件告警
http://blog.51cto.com/6764097/1954158
https://blog.csdn.net/HzSunshine/article/details/62052398
LVS 三种模式图解
http://blog.51cto.com/jiekeyang/1839583
LVS算法 DH
http://blog.51cto.com/lovvvve/1141713
arp_ignore和arp_announce
https://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html