12月19日
18.1集群介绍
Linux集群概述
· 根据功能划分为两大类:高可用和负载均衡
· 高可用集群通常为两台服务器,一台工作,另外一台作为 冗余 ,当提供服务的机器宕机,冗余将接替继续提供服务
· 实现高可用的开源软件有:heartbeat。Keepalived
· 负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2
· 实现负载均衡的开源软件有LVS,keepalived,haproxy,nginx。商业的有F5,Netscaler
18.2 keepalived介绍
Keepalived介绍
· 在这里我们使用keepalived来实现高可用集群,因为heartbeat在centos6上有一些问题,影响实验效果。
· keepalived 通过VRRP(Virtual router Redundancy Protocl)来实现高可用。
· 在这个协议里会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色和N(N>=1)个backup角色。
· master会通过组播的形式向各个backup发生VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的master。
· Keepalived要有三个模块,分别是core,check和vrrp。其中core模块为keepalived的核心,负责主进程的启动,维护以及全局配置文件的加载和解析,check模块负责健康检查,vrrp模块是来实现VRRP协议的。
18.3/18.4/18.5 用keepalived配置高可用
用keepalived配置高可用
· 准备两台机器130和132, 130作为master,132作为backup
· yum install -y keepalived 两台机器都执行
· 两台机器都安装nginx,其中130上已经编译安装过nginx,132上需要yum安装nginx;yum install -y nginx
· 设定vip为100
· 编辑130上keepalived配置文件,内容从
https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/aster/D21Z/master_keepalived.com获取
vim /etc/keepalived/keepalived.conf 编辑配置文件
> !$ 清空配置文件(快捷键)
global_defs { 作为全局定义参数
notification_email { 出现问题时给邮箱发邮件
}
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 {
state MASTER 定义master相关的
interface ens33 定义哪个网卡发广播
virtual_router_id 51 路由id
priority 100 权重(在有多台backup时,会选择权重偏高的优先)
advert_int 1
authentication { 认证相关信息
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress { vip 主从共有的ip
192.168.133.100
}
track_script {
chk_nginx 加载
}
}
· 130 编辑监控脚本,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh 获取
vim /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
/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
· chmod 755 /usr/local/sbin/check_ng.sh 给脚本755权限
· systemctl start keepalived 130启动服务
ps -aux |grep keep
ps -aux |grep nginx 查看keep和nginx服务是否启动
/etc/init.d/nginx stop 停止nginx服务,会自动启动
less /var/log/messages 日志文件
ip add 才能看到vip
Iptables -nvl 检查防火墙
systemctl stop firewalld 把防火墙关掉
getenforce
Setenforcce 0 临时关闭selinux
从上配置
· 132上编辑配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf 获取
> /etc/keepalived/keepalived.conf 清空配置文件
vim /etc/keppalived/keeplived.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.133.100
}
track_script {
chk_nginx
}
}
· 132上编辑监控脚本,内容从 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh 获取
vim /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
· chmod 755 /usr/local/sbin/check_ng.sh 给脚本755权限
· systemctl start keepalived 132上也启动服务
cat /usr/share/nginx/html/index.html 默认页路径
测试高可用
· 先确定好两台机器上nginx差异,比如可以通过curl -I来查看nginx版本
· 测试1: 关闭mastaer上的nginx服务
/etc/init.d/nginx stop 主从上关闭都能自动启动服务
· 测试2: 在master上增加iptables规则
iptables -I OUTPUT -p vrrp -j DROP 封掉vrrp协议,可以正常访问
· 测试3:关闭master上的keepalived服务
systemctl stop keepalived 停掉服务,vip到从上
· 测试4: 启动master上的keepalived服务
systemctl start keepalived 启动vip会马上回来