第十七章 Linux集群架构(一)
一、 集群介绍
二、 keepalived介绍
三、 用keepalived配置高可用集群
四、 负载均衡集群介绍
五、 LVS介绍
六、 LVS调度算法
七、 LVS NAT模式搭建
一、 集群介绍
集群功能划分:
1:高可用:
高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务。
实现高可用的开源软件有:heartbeat、keepalived
2:负载均衡
负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2。
实现负载均衡的开源软件有LVS、keepalived、haproxy、nginx
商业的有F5、Netscaler
二、 keepalived介绍
keepalived是实现高可用的一种轻量级的技术手段,主要用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。
1.keepalived通过VRRP(Virtual Router Redundancy Protocl)来实现高可用。
2.在VRRP协议里会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色和N(N>=1)个backup角色。
3.master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的mater。
4.Keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,check模块负责健康检查,vrrp模块是来实现VRRP协议的。
三、 用keepalived配置高可用集群
实验环境准备:
需要准备两台虚拟机,分别都装上nginx。 注意:克隆的虚拟机需要将网卡配置文件中的UUID删除掉,否则会有冲突。
此次实验的环境是两台CentOS7.3系统的虚拟机
主(Master):
是之前做LNMP实验时的系统,里面已经装好了nginx
主机名:Linux01
IP:192.168.239.128
关闭防火墙和selinux
从(Backup) :
克隆的主系统,CentOS7.3系统
主机名:mysql-slave
IP:192.168.239.138
关闭防火墙和selinux
nginx+keepalived高可用安装过程:
主(Master)配置:
1. 在主(Master)和从(Backup)上都安装nginx和keepalived
[[email protected] ~]# yum install -y keepalived
[[email protected] ~]# yum install -y keepalived
2. 编辑主(Master)上keepalived的配置文件
内容参考:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf
[[email protected] ~]# vim /etc/keepalived/keepalived.conf //删除之前的内容,或者备份,把参考里的复制进来,修改虚拟IP为100
3. 新建监控脚本
内容参考:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh
[[email protected] ~]# vim /usr/local/sbin/check_ng.sh
授予脚本755权限
[[email protected] ~]# chmod 755 /usr/local/sbin/check_ng.sh
[[email protected] ~]# ls -l /usr/local/sbin/check_ng.sh
4. 启动主(Master)上的keepalived
[[email protected] ~]# systemctl start keepalived.service
[[email protected] ~]# ps aux | grep keepalived
keepalived配置文件说明:
# 1:全局定义 global definitions 部分
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
#前面是定义邮件相关的配置,当出现故障时可以给指定的邮箱发送邮件
#下面这一行是定义服务器的路由标识的,在同一局域网内这个表示是唯一的
router_id LVS_DEVEL
} #大括号用来分隔去看,需要成对出现,如果漏掉了也不会出错,但是得不到想要的结果
# 2:检测模块,可以通过制定的脚本来检测对应的服务是否正常
vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh" # 指定自定义检测nginx服务的脚本
interval 3 # 检测的间隔时间
}
# 3:VRRP实例定义区块
# 这部分主要用来定义具体服务去实例配置,包括Keepalived主备状态、接口、优先级、认证方式和IP等信息。
vrrp_instance VI_1 {
# 上面这行定义了一个vrrp_instance实例,名字是VI_1,MASTER和BACKUP的实例名必须相同,可以定义多个实例
state BACKUP
# state表示当前实例的状态,MASTER为正式工作状态,BACKUP为备用状态。
interface ens33
# interface :指定网卡名称,CentOS一般都是ens开头
virtual_router_id 51
# virtual_router_id 表示虚拟路由ID表示,这个表示最好是一个数字,
# 如果一个配置文件中有多个vrrp_instance实例,则不能出现相同的vrtual_router_id,
# 但是MASTER和BACKUP配置中相同实例的virtual_router_id必须一致,否则会出现脑裂问题。
priority 90
# priority 为优先级,指定的数字越大,表示实例的优先级越高,
# 在同一个vrrp_instance实例中 MASTER的优先级配置要高于BACKUP
advert_int 1
# advert_int 为同步通知间隔。MASTER与BACKUP之间通信检查的时间间隔,单位为妙,默认为1
authentication {
# authentication 为权限认证配置块,包含认证类型,和认证密码
auth_type PASS
# auth_type 为认证类型,有PASS和AH两种认证类型,一般使用PASS,验证密码为明文的方式
auth_pass wenyang>com
# auth_pass 指定认证的密码, BACKUP必须和MASTER一致才能通信
}
virtual_ipaddress {
# virtual_ipaddress 虚拟IP地址配置,通常称之为VIP。可以配置多个IP
# 每个IP占一行,这里的虚拟IP就是在工作中需要和域名绑定的IP。
# 即和配置对应的高可用服务监听的ip要保持一致(这里的高可用服务是Nginx 也可以是其他服务)
192.168.239.100
# 指定的虚拟ip
}
track_script { #加载指定的服务检测区块。
chk_nginx
}
}
从(Backup)配置:
1. 编辑从(Backup)上的配置文件
内容参考:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf
[[email protected] ~]# vim /etc/keepalived/keepalived.conf
//删除之前的内容,或者备份,把参考里的复制进来,修改虚拟IP为100
2. 新建监控脚本
内容参考:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh
[[email protected] ~]# vim /usr/local/sbin/check_ng.sh
授予脚本755权限
[[email protected] ~]# chmod 755 /usr/local/sbin/check_ng.sh
[[email protected] ~]# ls -l /usr/local/sbin/check_ng.sh
4. 启动从(Backup)上的keepalived
[[email protected] ~]# systemctl start keepalived
[[email protected] ~]# ps aux | grep keepalived
测试:
将nginx默认主页的内容修改为各自的ip,便于在做实验时区分是哪台机器在工作
主:
[[email protected] ~]# cat /usr/local/nginx/conf/vhost/aaa.com.conf //在nginx虚拟主机里查看默认主机及默认页面
[[email protected] ~]# echo '192.168.239.138'>/data/wwwroot/www.default.com/index.html
从:
[[email protected] ~]# cat /data/wwwroot/www.default.com/index.html
[[email protected] ~]# echo '192.168.239.138'>/data/wwwroot/www.default.com/index.html
测试1.关闭主(master)上的nginx服务
[[email protected] ~]# /etc/init.d/nginx stop
因为监控脚本有写自动重启的指令,所以手工重启后监控脚本又自动把nginx服务开启了。
测试2. 在主(master)上增加iptabls规则(开启防火墙,添加规则,主备上都做)
[[email protected] ~]# systemctl start firewalld
[[email protected] ~]# iptables -I OUTPUT -p vrrp -j DROP
此时keepalived是正常的,虚拟ip(公有IP)在主、从上都有绑定,但是访问到的还是主的默认页面,不能达到切换资源的目的。
测试3. 关闭主(master)上的keepalived服务
[[email protected] ~]# systemctl stop keepalived.service
达到资源切换的目的。
测试4. 重新启用主(master)上的keepalived服务
[[email protected] ~]# systemctl start keepalived.service
查看主从的日志:
[[email protected] ~]# tail /var/log/messages
[[email protected] ~]# tail /var/log/messages
在切换过程存在延时,并且VIP在主、从之间漂移。