前言
最近这段时间在看分布式以及高可用集群架构方式,也在部署高可用的集群,在此总结一下这些经验。
总所周知,在公司的业务开始发展的时候我们的承受的流量也会相应增加,从一开始的一台nginx服务器作为代理请求转发已经不足够应付我们日常的流量了,因此我们需要去扛更大的流量。
虽然有人会讲,现在都上云产品了,哪还需要自己搭建服务器集群,或者loadbalance但还是那句,发展肯定是让技术越来越容易上手,精通难,也许你会点几个按钮就能设置好整个集群的入口,当别人一问到其原理的时候该怎么办?
Keepalived
前提,为了VRRP协议能够成功绑定VIP,
建议大家先关闭掉iptables服务
什么是keepalived? keepalived 是一款服务器健康检测工具,如果有服务器死机/故障等问题的时候需要将此机器从整个集群中踢出出去, 而当服务器恢复的时候 还需要把服务器加回集群中。这就是keepalived的主要功能, 把这些工作全部交由机器完成。
关于负载均衡的4层以及7层概念 就不在此简述了。因为这一次主要还是总结部署方式。
对于keepalived有2种方案主从模式 主主模式
两者的区别也就是一前者备用机不工作,后者备用机一起工作。
在配置KeepAlived之前我们先准备2台linux虚拟机作例子
- 192.168.1.100 master
- 192.168.1.101 salve
配置keepalived-主从模式
首先我们需要先安装一下keepalived, 在这边我就用最简单的方式去安装了,编译安装的话大家可以参考其他的方式。只不过我贪方便
yum install keepalived
记得两台主机都需要安装一下,然后进入到配置文件中
vim /etc/keepalived/keepalive.conf
进入到配置后你会看到很多配置,在这边我有很多功能我都不需要用到 比如健康检测到通知邮件等。因此这边就skip掉这part,我们可以把那些内容都删掉保留一下这些。
global_defs {
# 路由id, 當前安裝keepalived節點主機的標識符
router_id keep_100
}
# 計算機節點
vrrp_instance VI_1 {
# 狀態,當前的
state MASTER
# 當前實例綁定的網卡
interface eth0
# 需要保證主備節點一致
virtual_router_id 51
# 優先級/權重
# 誰的優先級高 當master掛了以後,就能成為master
# 當前為master節點 因此為最高
priority 100
# 主備之間同步檢查時間間隔
advert_int 1
# 認證授權的密碼,防止非法節點的進入
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# VIP
192.168.1.161
}
}
这样就基本上完成了主节点的配置,接下来配置一下salve的配置,基本上都一样
global_defs {
# 路由id, 當前安裝keepalived節點主機的標識符
router_id keep_101
}
# 計算機節點
vrrp_instance VI_1 {
# 这里需要为BACKUP
state BACKUP
# 當前實例綁定的網卡
interface eth0
# 需要保證主備節點一致
virtual_router_id 51
# 優先級/權重
# 这边设置成50 因为是salve
priority 50
# 主備之間同步檢查時間間隔
advert_int 1
# 認證授權的密碼,防止非法節點的進入
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# VIP
192.168.1.161
}
}
完成以后别忘记重启
systemctl restart keepalived.service
然后我们在master节点上面输入
ip addr
此时我们应该可以看到我们配置的网卡上会把 192.168.1.161 绑定在此网卡上了,很简单吧?
配置服务心跳检测
接下来我们需要配置一下检测 nginx 服务器状态,写一个简单的脚本帮我们检测一下nginx
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
# 判斷nginx是否宕機了,並嘗試重啟
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 3
# 等待一下,再次檢查,如果沒有啟動成功 就關閉 keepalive 讓它啟動備用機器
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
我们把它保存在 /etc/keepalived/check_nginx_alive.sh
保存完毕后,记得要给该文件设置可执行权限
chmod +x check_nginx_alive.sh
然后我们再回到master节点上的keepalived.conf中配置一下这个脚本定时执行,打开配置文件在内添加
// 添加腳本到master keepalive.conf
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive.sh"
interval 2 // 每兩秒執行一次
weight 10 #如果腳本運行成功,則當前節點的權重 +10
}
再把该脚本配置到我们的instance当中
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 添加心跳检测脚本
track_script {
# 这里的名字需要根上方的名字应对
check_nginx_alive
}
virtual_ipaddress {
192.168.1.161
}
}
我们配置完成以后也可以试试,把master节点都keepalived stop掉,然后再回到salve的机器上面 ip addr一下你会发现192.168.1.161这个ip地址被绑定到了salve机器的网卡上,这个也就是大家声称的 IP漂移
这样就完成了主从模式的配置。但是你会发现就是所有的请求都只会打在master节点上,salve就完全是个备用机。我们怎么能允许这么浪费呢?因此这个备用机也要加入进来一起服务用户才可以啊
配置keepalived-主主模式(双主热备)
配置完主从模式后,我们再来配置双主模式就非常简单了。就字面上的意思双主模式其实就是两台机器,同时为master,又同时为salve这是什么意思呢? 我们来配置一下你就很快明白了
我们先打开master节点的配置文件, 在下方加入备用机的配置文件
# 这里的instance 记得改成 vi_2
vrrp_instance VI_2 {
state BACKUP
interface eth0
# 改成52
virtual_router_id 52
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# VIP
192.168.1.161
}
}
然后我们再去salve节点配置一个master的conf
# 修改一下 instance名字
vrrp_instance VI_2 {
state MASTER
interface eth0
# 改成52
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# VIP
192.168.1.161
}
}
这样就配置完了。 其实很简单 也就是在master上配置salve,在salve上配置master这样就成为了双向节点。互为master,并且也成功的把salve机器也应用了起来。
那么其实现在不会单独的去使用keepalived通常都是搭配lvs一起使用,容我下次再出一片单独讲解 keepalived+LVS的总结。