集群介绍,keepalived介绍,使用keepalived配置高可用集群
笔记内容:[*] 18.1 集群介绍
[*] 18.2 keepalived介绍
[*] 18.3 用keepalived配置高可用集群(上)
[*] 18.4 用keepalived配置高可用集群(中)
[*] 18.5 用keepalived配置高可用集群(下)
笔记日期:2017-11-10
18.1 集群介绍
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE0216497FE46747B58D26E0A43996472A/4647
集群或者说是群集:其目的是为了实现将多台计算机组合以来完成特定的任务,比如天气预报,大型网络游戏,这些都需要很大的运算量,单台计算机实现成本太高,而且不现实。那么就需要通过集群的方式,将闲置的或者正在使用的计算机联合起来,结合整体的力量来解决这些问题,其实就是多个计算机组合成一个大的计算机罢了。
集群的类型大致分为三类:
1.LB Load Balancing(负载均衡集群)
2.HA High Availability(高可用性集群)
3.HP High Performance(高性能集群)
简单说明下这三种类型的集群:
1. 负载均衡型的集群目的是为了提高服务的并发能力,比如三台WEB服务器组合成一个集群,我们就需要用这种类型的集群来实现负载均衡,既让这三台WEB服务器的负载平均一些,不至于有很空闲的服务器。
2. 高可用性的集群目的是为了提供7*24小时服务的能力,通过提供冗余服务器,来防止宏机造成的服务中断
3. 高性能集群目的是为了在短期内解决大量复杂的计算,常见的天气预报系统,科学勘探,人口普查等等
同时,集群提供了非常好的扩展/缩减性非常,可以方便的增加或者减少服务器。
18.2 keepalived介绍
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICEFC118BA4AF7C4443B1F51E292099455A/4648
Keepalived是Linux下一个轻量级别的高可用解决方案。高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是之主机的冗余和接管,
它与HeartBeat RoseHA 实现相同类似的功能,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦,
与HeartBeat相比,Keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成,
Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。
后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA cluster功能。
Keepalived体系结构图:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE9AF5DD14B84D41509C70D0996A39CEA9/4649
18.3 用keepalived配置高可用集群(上)
想要使用Keepalived做这个集群的实验,需要准备两台机器,一台作为master,另一台作为backup。
我这里示例使用的master机器的IP是192.168.77.130
backup机器的IP是192.168.77.128
1. 并且两台机器都需要安装Keepalived,安装命令如下:
yum install -y keepalived
2. 然后就是安装Nginx(两台机器都需要安装),在这里我使用Nginx作为一个负载均衡器,因为在许多的企业中用Nginx作为负载均衡的也不少,所以使用Nginx来作为演示会更接近在企业中的应用。安装命令如下:
yum install -y nginx
提示:我这里为了减少步骤和降低搭建过程的复杂度,所以使用yum来安装,一般在企业中是使用二进制或者源码包来安装Nginx的。
如果你的机器没有安装epel扩展源,需要先安装扩展源,命令如下:
yum install -y epel-release
[*] 编辑master机器上的keepalived配置文件,配置文件模板可以从以下网址获得:
https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_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//检测的间断为3秒钟
}
vrrp_instance VI_1 {//定义master相关的信息
state MASTER//定义角色为master
interface ens33//定义网卡名称(你机器上能够正常通信的网卡名称)
virtual_router_id 51//定义路由器的id
priority 100//定义权重,主角色和从角色的权重是不一样的
advert_int 1//
authentication {//定义认证相关的信息
auth_type PASS//定义认证的形式为使用密码认证
auth_pass 123456//定义密码
}
virtual_ipaddress {//定义vip,这是一公有ip,也就是从和主都共同使用这个ip
192.168.77.100
}
track_script {//加载检测脚本
chk_nginx
}
}
使用以下命令清空keepalived的配置文件里的内容:
> /etc/keepalived/keepalived.conf
然后编辑keepalived配置文件:
vim /etc/keepalived/keepalived.conf
把模板内容复制粘贴进去,注意:最好是检查一下粘贴后的内容和模板的内容是否一致,确保没有复制少了,如果这个配置文件有问题的话,keepalived就启动不起来了。粘贴完了之后,要修改一下,将几个配置修改为你机器上的信息:
[*] 网卡名称,要定义你自己的网卡名称。
[*] global_defs那一段可以自定义,可以自己根据实际情况修改
[*] 可以定义一个自己的密码
[*] vip地址,最好是你虚拟机的ip段的地址
[*] 在master机器上定义监控脚本,脚本的内容可以从以下网址获得:
https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_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
/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
这是检查Nginx是否正常的一个shell脚本。
编辑脚本文件(这个脚本文件的路径是可以在keepalived.conf文件中自定义的):
vim /usr/local/sbin/check_ng.sh
将复制的内容粘贴进去:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICED71869212146444B81AD12F09E62DA64/4650
注意: 如果你的nginx是yum安装的,那么就要把/etc/init.d/nginx start那行,改为systemctl start nginx。
[*] 编辑完脚本后,给这个脚本文件设置755权限(不设置这个权限的话,就无法自动加载这个脚本):
chmod 755 /usr/local/sbin/check_ng.sh
18.4 用keepalived配置高可用集群(中)
上一部分我们就已经在master机器上配置好了keepalived,配置好之后就是启动keepalived服务,并且需要查看一下进程是否存在:
systemctl startkeepalived
ps aux |grep keepalived
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICEEF1C94BAF2E747FDB76088839E724925/4651
如图,则是没有问题,服务启动成功了。
如果你的机器上启动了nginx服务的话,先关闭nginx:
service nginx stop
然后再查看nginx的进程:
ps aux |grep nginx
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE49D71C99F5B64DDAB65A9A34693C782C/4652
会发现nginx自动启动了,这就证明检测脚本没问题。
关于keepalived的日志记录,我们可以在/var/log/messages日志文件中查看:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE4B668CEA8A2B439184EE123E3E3332CE/4653
使用ip add 命令查看vip是否存在:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE1B4F48C9F9AA4FE1A627AB1386C76493/4654
使用ifconfig命令是查看不到vip的,需要使用ip add 命令。
在搭建集群的时候,需要先把selinux给关闭,防火墙的规则也要清空,两台机器都需要关闭和清空规则:
清空防火墙规则:
iptables -F
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE4B6AD142EA2B40C0AA5B1F8B5A7E11A7/4655
关闭selinux:
setenforce 0
配置backup机器:
master机器配置完后,就需要到backup机器上进行配置了。同样的在backup机器上第一件要做的事情就是配置keepalived配置文件:
1. 清空keepalived.conf文件:
> /etc/keepalived/keepalived.conf
2. 然后编辑keepalived配置文件:
vim /etc/keepalived/keepalived.conf
[*] 复制模板内容(模板内容同样的在上面那个网址获得),粘贴进去。然后修改以下几个地方:
[*] 网卡名称,要定义你自己的网卡名称。
[*] state参数要改为backup
[*] priority(权重)参数改为90
[*] global_defs那一段可以自定义,可以自己根据实际情况修改
[*] 可以定义一个自己的密码
[*] virtual_ipaddress(vip地址)参数,定义和master机器同样的地址
4. 同样的要编辑检测脚本,脚本的内容可以从以下网址获得,我这里的脚本和master机器的配置有些差别,因为我backup机器的nginx是yum安装的,而master机器的nginx则是源码包安装的,所以在启动命令上不一样,可以根据实际情况更改启动方式:
https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh
编辑脚本文件:
vim /usr/local/sbin/check_ng.sh
将复制的内容粘贴进去:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE2E2B292A27E44E3B98F3838AE877683F/4656
5. 编辑完脚本后,给这个脚本文件设置755权限(不设置这个权限的话,就无法自动加载这个脚本):
chmod 755 /usr/local/sbin/check_ng.sh
[*] 启动keepalived服务,并查看进程:
systemctl startkeepalived
ps aux |grep keepalived
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE93FE061181CE41A780620E8040014527/4658
[*] 修改一下master机器的nginx的默认访问页的内容(默认页的路径在nginx的默认虚拟主机配置文件中查看):
vim /data/wwwroot/default/index.html
修改内容如下:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICEAEF8D3FB38B54A0880FCB5CB618730C6/4659
[*] 使用浏览器访问master机器的ip地址,看看是否会显示修改后的内容:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE488E86F5EC9C48329AD56F746E81CC60/4660
如图,则是没问题。
[*] 这次修改backup机器的nginx默认访问页内容,因为是yum安装的,所以路径不一样:
vim /usr/share/nginx/html/index.html
因为是yum安装的,所以会自带有内容,需要先清空一下:
> /usr/share/nginx/html/index.html
接着修改内容如下:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE0B55379DA66547A99902BE6E18F868C7/4661
[*] 使用浏览器访问backup机器的ip地址,看看是否会显示修改后的内容:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE79CDB0CF246D4B238FE55F3BEAFE9AD5/4662
如图,则是没问题。
以上这几个步骤是为了确认nginx能够被正常访问。
接下来我们需要访问vip,确认vip也能够被访问:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE1A6D5C0B7AA04C49A37E800BCB9337B7/4663
如图,可以看到能够被正常访问,而且默认就是访问master机器的。
18.5 用keepalived配置高可用集群(下)
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE13BDE9471112444C92A3A736813B4F56/4664
完成上述步骤之后,我们的高可用集群就搭建好来了,接下来我们需要测试一下这个高可用集群:
测试1:关闭master上的nginx服务
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICED7D403CA159A46A6B2F846ACC373B775/4665
关闭之后任然会被keepalived服务启动,代表没问题。
测试2:在master机器上增加iptabls规则:
iptables -I OUTPUT -p vrrp -j DROP
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE59E0AF0592644DA792117D9943FE2C8B/4666
依旧能够被访问,这种情况就不属于master宕机:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICE84BBBA6DCA874E7E90833F9A836E1964/4667
测试完之后清空规则:
iptables -F
测试3:关闭master机器上的keepalived服务
systemctl stop keepalived
然后可以看到master机器上的vip被释放了,不存在了:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICEA27D762175A042E98947A0B687AFE97C/4668
这时vip被backup机器所监听了,这就类似于生产环境中,master机器宕机了,然后backup机器就会顶替master机器:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICEE95E574912D34B3A9661F9031E727FB9/4669
现在再去访问vip地址,会发现变成了backup机器上默认页里的内容:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICEAE3F2F890AEF4907B3330E50A5CA7770/4670
这种情况就是master宕机了,这一步测试就是为了模拟master宕机的情况。
测试4:启动master上的keepalived服务
systemctl start keepalived
同样的去浏览器访问vip,访问页面的内容恢复成master上的默认页内容就没问题了:
https://note.youdao.com/yws/public/resource/3612d0c034fe72ecadeeb21c9e4e79af/xmlnote/OFFICED0BD51662CDF474B975DAD022D33527E/4671
扩展
heartbeat和keepalived比较
http://blog.csdn.net/yunhua_lee/article/details/9788433
DRBD工作原理和配置
http://502245466.blog.运维网.com/7559397/1298945
mysql+keepalived
http://lizhenliang.blog.运维网.com/7876557/1362313
页:
[1]