Linux&&LVS+Keepalived高可用群集
了解
用途:
判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。
官方网站:
http://www.keepalived.org/
实现功能:
- 双主热备
- DNS负载均衡
- keepalived跟踪服务(web)
- inotify+rsync数据同步
keepalived的热备方式
keepalived采用VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备功能。
VRRP是针对路由器的一种备份解决方案-----由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态,若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。
热备组内的每台路由器都可能成为主路由器,虚拟路由器的IP地址(VIP)可以在热备组内的路由器之间进行移动,所以也成为漂移IP地址。
使用keepalived时,漂移地址的实现不需要手动建立虚接口配置文件(如eth0:0),而是由keepalived根据配置文件自动管理。
部署
预安装内核开发支持库:
yum -y install kernel-devel openssl-devel popt-devel
yum -y ipvsadm
#编译安装keepalived
tar zxf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64
make && make install
#使用keepalived服务。执行make install操作以后,会自动生成/etc/init.d/keepalived脚本文件,但换需要手动添加为系统服务,这样就可以使用service、chkconfig工具来对keepalived服务程序进行管理了。
ls -l /etc/init.d/keepalived
chkconfig --add keepalived
chkconfig keepalived on
使用keepalived实现双机热备
基于VRRP协议的热备方式,keepalived可用作服务器的故障切换,每个热备组可以有多台服务器。
在双机热备方案中,故障切换主要针对虚拟IP地址的漂移来实现,so能够适用于各种应用服务器(web、ftp、mail、ssh、dns)
以下基于web服务进行部署、测试
主服务器配置
#编写httpd服务监控脚本
vim /opt/chk_httpd.sh
service httpd status &> /dev/null
if [ $? -ne 0 ];then
service httpd restart &> /dev/null
service httpd status &> /dev/null
if [ $? -ne 0 ];then
killall keepalived
fi
fi
chmod +x /opt/chk_httpd.sh
#进入keepalived服务的配置目录
cd /etc/keepalived/
#备份并编辑主配置文件
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
#指定全局参数
global_defs {
route_id HA_TEST_R1 //本路由器(服务器)的名称
}
#定义httpd服务监控脚本并设置别名为chk_http_port
vrrp_script chk_http_port {
script "/opt/chk_httpd.sh" //检测nginx状态的脚本路径
interval 2
}
#指定VRRP热备参数
vrrp_instance dfq { //定义VRRP热备实例
state MASTER //热备状态,MASTER表示主服务器
interface eth0 //承载VIP地址的物理网卡接口
virtual_route_id 1 //虚拟路由器的ID号,每个热备组保持一致
priority 100 //优先级,数值越大优先级越高
advert_int 1 //通告间隔秒数(心跳频率)
authentication { //认证信息,每个热备组保持一致
auth_type PASS //认证类型
auth_pass 123456 //密码字串
}
#调用监控别名
track_script {
chk_http_port
}
virtual_ipaddress { //指定漂移地址(VIP),可以有多个
172.16.16.172
}
}
#指定VRRP热备组2
vrrp_instance dfq2 { //定义VRRP热备实例2
state BACKUP //热备状态,MASTER表示主服务器
interface eth0 //承载VIP地址的物理网卡接口
virtual_route_id 2 //虚拟路由器的ID号,每个热备组保持一致
priority 90 //优先级,数值越大优先级越高
advert_int 1 //通告间隔秒数(心跳频率)
authentication { //认证信息,每个热备组保持一致
auth_type PASS //认证类型
auth_pass 123456 //密码字串
}
#调用监控别名
track_script {
chk_http_port
}
virtual_ipaddress { //指定漂移地址(VIP),可以有多个
172.16.16.173
}
}
#启动keepalived服务。实际状态为MASTER的主服务器将为eth0接口自动添加VIP地址,通过ip命令可以查看(ifconfig命令看不到)
service keepalived start
ip addr show dev eth0
#实现ssh免交互登录
ssh-keygen -t rsa
ssh-copy-id root@172.16.16.173
#安装inotify
tar zxf inotify-tools-3.14.tar.gz -C /usr/src
cd /usr/src/inotify-tools-3.14/
./configure && make && make install
vim /opt/rsync.sh
inotify_cmd="inotifywait -mrq -e create,delete,move,modify,attrb /var/www/html"
rsync_cmd="rsync -za --delete /var/www/html/ root@172.16.16.173:/var/www/html/"
#inotify_cmd | while read a b c
do
if [ $(pgrep ^rsync$| wc -l) -le 0 ];then
$rsync_cmd
done
chown a+x /opt/rsync.sh
/opt/rsync.sh &
priority 高的就是主服务器,即便state为MASTER
备用服务器配置
- router_id : 路由器名称,建议为相同热备组的不同服务器配置不同路由器(服务器)的名称
- state : 热备状态,至少存在一台状态为MASTER的主服务器,存在多台状态为BACKUP的备用服务器。
- priorit : 优先级,数值越大则取得VIP控制权的优先级越高,因此主服务器的优先级应设为最高;其他备用服务器的优先级可以依次递减,但不要相同,避免在争夺VIP控制权时发生冲突。
#预安装内核开发支持库:
yum -y install kernel-devel openssl-devel popt-devel
yum -y ipvsadm
#编译安装keepalived
tar zxf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64
make && make install
#使用keepalived服务。执行make install操作以后,会自动生成/etc/init.d/keepalived脚本文件,但换需要手动添加为系统服务,这样就可以使用service、chkconfig工具来对keepalived服务程序进行管理了。
ls -l /etc/init.d/keepalived
chkconfig --add keepalived
chkconfig keepalived on
service ipstables stop
#编写httpd服务监控脚本
vim /opt/chk_httpd.sh
service httpd status &> /dev/null
if [ $? -ne 0 ];then
service httpd restart &> /dev/null
service httpd status &> /dev/null
if [ $? -ne 0 ];then
killall keepalived
fi
fi
chmod +x /opt/chk_httpd.sh
cd /etc/keepalived
#备份并编辑主配置文件
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
#指定全局参数
global_defs {
route_id HA_TEST_R2 //本路由器(服务器)的名称
}
#定义httpd服务监控脚本并设置别名为chk_http_port
vrrp_script chk_http_port {
script "/opt/chk_httpd.sh" //检测nginx状态的脚本路径
interval 2
}
#指定VRRP热备参数
vrrp_instance dfq { //定义VRRP热备实例
state BACKUP //热备状态,MASTER表示主服务器
interface eth0 //承载VIP地址的物理网卡接口
virtual_route_id 1 //虚拟路由器的ID号,每个热备组保持一致
priority 99 //优先级,数值越大优先级越高
advert_int 1 //通告间隔秒数(心跳频率)
authentication { //认证信息,每个热备组保持一致
auth_type PASS //认证类型
auth_pass 123456 //密码字串
}
#调用监控别名
track_script {
chk_http_port
}
virtual_ipaddress { //指定漂移地址(VIP),可以有多个
172.16.16.172
}
}
#指定VRRP热备组2
vrrp_instance dfq { //定义VRRP热备实例2
state MASTER //热备状态,MASTER表示主服务器
interface eth0 //承载VIP地址的物理网卡接口
virtual_route_id 2 //虚拟路由器的ID号,每个热备组保持一致
priority 100 //优先级,数值越大优先级越高
advert_int 1 //通告间隔秒数(心跳频率)
authentication { //认证信息,每个热备组保持一致
auth_type PASS //认证类型
auth_pass 123456 //密码字串
}
#调用监控别名
track_script {
chk_http_port
}
virtual_ipaddress { //指定漂移地址(VIP),可以有多个
172.16.16.173
}
}
#启动keepalived服务。实际状态为MASTER的主服务器将为eth0接口自动添加VIP地址,通过ip命令可以查看(ifconfig命令看不到)
service keepalived start
ip addr show dev eth0
DNS负载均衡配置
yum clean all
yum -y install bind bind-chroot
vim /etc/named.rfc1912.zones
zone "test.com" in {
type master;
file "test.com";
}
cd /var/named
cp -p named.localhost test.com
vim test.com
$TTL 1D
@ IN SOA @ rname.invalid. (
0
1D
1H
1W
3H )
IN NS dns
dns in a 172.16.16.170
www in a 172.16.16.172
www in a 172.16.16.173
service named restart
测试双机热备功能
LVS+Keepalived高可用群集
优势:
对LVS负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。
配置主调度器
全局配置、热备配置:
为主、从调度器实现热备功能,漂移地址使用LVS群集的VIP地址
#加载ip_vs模块
modprobe ip_vs
#重复上个环境的安装
--snip--
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
sysctl -p
vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_HA_R1 //主调度器名称
}
vrrp_instance VI_1 {
state MASTER //主调度器的热备状态
interface eth0
virtual_router_id 1
priority 100 //主调度器的优先级
advert_int 1
authentication { //主、从热备认证信息
auth_type PASS //认证类型
auth_pass 123456 //密码字串
}
virtual_ipaddress { //指定漂移地址(VIP),可以有多个
172.16.16.172
}
}
web服务器池配置:
vim /etc/keepalived/keepalived.conf
--snip--
virtual_server 172.16.16.172 80 { //虚拟服务器地址(VIP)、端口
delay_loop 15 //健康检查的间隔时间(秒)
lb_algo rr //轮询(rr)调度算法
lb_kind DR //直接路由(DR)群集工作模式
!persistence 60 //连接保持时间(秒),若启用请去掉!号
protocol TCP //应用服务采用的是TCP协议
real_server 172.16.16.177 80 { //第一个web节点的地址、端口
weight 1 //节点的权重
TCP_CHECK { //健康检查方式
connect_port 80 //检查的目标端口
connect_timeout 3 //连接超时(秒)
nb_get_retry 3 //重试次数
delay_before_retry 4 //重试间隔(秒)
}
}
real_server 172.16.16.178 80 { //第二个web节点的地址、端口
weight 1 //节点的权重
TCP_CHECK { //健康检查方式
connect_port 80 //检查的目标端口
connect_timeout 3 //连接超时(秒)
nb_get_retry 3 //重试次数
delay_before_retry 4 //重试间隔(秒)
}
}
real_server 172.16.16.179 80 { //第三个web节点的地址、端口
weight 1 //节点的权重
TCP_CHECK { //健康检查方式
connect_port 80 //检查的目标端口
connect_timeout 3 //连接超时(秒)
nb_get_retry 3 //重试次数
delay_before_retry 4 //重试间隔(秒)
}
}
}
#重启keepalived服务
service keepalived restart
配置从调度器
全局配置、热备配置:
为主、从调度器实现热备功能,漂移地址使用LVS群集的VIP地址
#加载ip_vs模块
modprobe ip_vs
#重复上个环境的安装
--snip--
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
sysctl -p
vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_HA_R2 //从调度器名称
}
vrrp_instance VI_1 {
state BACKUP //从调度器的热备状态
interface eth0
virtual_router_id 1
priority 99 //从调度器的优先级
advert_int 1
authentication { //主、从热备认证信息
auth_type PASS //认证类型
auth_pass 123456 //密码字串
}
virtual_ipaddress { //指定漂移地址(VIP),可以有多个
172.16.16.172
}
}
web服务器池配置:
vim /etc/keepalived/keepalived.conf
--snip--
virtual_server 172.16.16.172 80 { //虚拟服务器地址(VIP)、端口
delay_loop 15 //健康检查的间隔时间(秒)
lb_algo rr //轮询(rr)调度算法
lb_kind DR //直接路由(DR)群集工作模式
!persistence 60 //连接保持时间(秒),若启用请去掉!号
protocol TCP //应用服务采用的是TCP协议
real_server 172.16.16.177 80 { //第一个web节点的地址、端口
weight 1 //节点的权重
TCP_CHECK { //健康检查方式
connect_port 80 //检查的目标端口
connect_timeout 3 //连接超时(秒)
nb_get_retry 3 //重试次数
delay_before_retry 4 //重试间隔(秒)
}
}
real_server 172.16.16.178 80 { //第二个web节点的地址、端口
weight 1 //节点的权重
TCP_CHECK { //健康检查方式
connect_port 80 //检查的目标端口
connect_timeout 3 //连接超时(秒)
nb_get_retry 3 //重试次数
delay_before_retry 4 //重试间隔(秒)
}
}
real_server 172.16.16.179 80 { //第三个web节点的地址、端口
weight 1 //节点的权重
TCP_CHECK { //健康检查方式
connect_port 80 //检查的目标端口
connect_timeout 3 //连接超时(秒)
nb_get_retry 3 //重试次数
delay_before_retry 4 //重试间隔(秒)
}
}
}
#重启keepalived服务
service keepalived restart
#查看双机热备运行情况
ipvsadm -ln
配置web节点服务器
#设置回环地址为VIP地址
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=172.16.16.172
NETMASK=255.255.255.255
ifup lo:0
#修改内核参数
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
#添加路由规则
route add -host 172.16.16.172 dev lo:0
service httpd restart