linux keepalived的安装
前面几篇
1-MyEclipse新建单个Maven web工程2-MyEclipse创建Maven web项目名后缀会有Maven Webapp3-My Eclipse创建多模块Maven依赖项目4-从写项目到部署linux服务器全过程-linux(CentOS 6.5)安装篇5- 从写项目到部署linux服务器全过程-linux固定IP配置篇6-从写项目到部署linux服务器全过程-linux下安装JDK篇7-从写项目到部署linux服务器全过程-linux下tomcat的安装篇8-从写项目到部署linux服务器全过程-linux下tomcat的集群配置篇9-从写项目到部署linux服务器全过程-linux防火墙端口配置篇10-从写项目到部署linux服务器全过程-linux部署web项目篇
步骤:
主要以截图为主,复杂的操作,会以文字说明。按照步骤一步一步来操作就可以了。
1. 使用winscp把keepalived-1.2.15.tar.gz传到linux的/usr/local/src/目录下
2. 使用Putty远程登录,输入用户名密码,登录linux。进入目录,解压
cd /usr/local/src #进入目录
ls #查看
tar -zxvf keepalived-1.2.15.tar.gz #解压
3. 进入解压过的目录keepalived-1.2.15录,运行配置
cd keepalived-1.2.15.tar.gz #进入目录
#keepalived所需要的安装环境
yum -y install kernel-devel*
yum -y install openssl-*
yum -y install popt-devel
yum -y install lrzsz
yum -y install openssh-clients
yum -y install libnl libnl-devel popt
#执行安装配置
./configure --prefix=/usr/local/keepalived
#编译
make
#安装
make install
6.配置环境变量,开机启动,软连接等
#5、拷贝执行文件
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
#6、将init.d文件拷贝到etc下,加入开机启动项
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
#7、将keepalived文件拷贝到etc下,加入网卡配置
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
#8、创建keepalived文件夹
mkdir -p /etc/keepalived
#9、将keepalived配置文件拷贝到etc下
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
#10、添加可执行权限
chmod +x /etc/init.d/keepalived
#11. 加入开机启动
chkconfig --add keepalived #添加时必须保证/etc/init.d/keepalived存在
chkconfig keepalived on
#添加完可查询系统服务是否存在:
chkconfig --list
7.测试命令
启动:service keepalived start
停止:service keepalived stop
重启:service keepalived restart
8 后续Nginx+keepalived配合使用,CentOS7添加虚拟IP(VIP)
后续Nginx+keepalived使用
vi /etc/sysconfig/network-scripts/ifcfg-eth0 编辑文本参考
DEVICE=eth0
BOOTPROTO=static
IPV6INIT=yes
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
IPADDR=xxx.xxx.xxx.xxx
#在此处添加一个ip
IPADDR1=xxx.xxx.xxx.xxx
NETMASK=255.255.255.0
DNS1=xxx.xxx.xxx.xxx
9.Nginx+keepalived检测脚本
修改主nginx下/etc/keepalived/keepalived.conf文件
修改主nginx下/etc/keepalived/keepalived.conf文件
! Configuration File for keepalived
#全局配置
global_defs {
notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
XXX@XXX.com
}
notification_email_from XXX@XXX.com #指定发件人
#smtp_server XXX.smtp.com #指定smtp服务器地址
#smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_instance VI_1 {
state MASTER #标示状态为MASTER 备份机为BACKUP
interface eth0 #设置实例绑定的网卡
virtual_router_id 51 #同一实例下virtual_router_id必须相同
priority 100 #MASTER权重要高于BACKUP 比如BACKUP为99
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置认证
auth_type PASS #主从服务器验证方式
auth_pass 8888
}
virtual_ipaddress { #设置vip
192.168.101.100 #可以多个虚拟IP,换行即可
}
}
修改备份nginx下/etc/keepalived/keepalived.conf文件
global_defs {
notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
XXX@XXX.com
}
notification_email_from XXX@XXX.com #指定发件人
#smtp_server XXX.smtp.com #指定smtp服务器地址
#smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_instance VI_1 {
state BACKUP #标示状态为MASTER 备份机为BACKUP
interface eth0 #设置实例绑定的网卡
virtual_router_id 51 #同一实例下virtual_router_id必须相同
priority 99 #MASTER权重要高于BACKUP 比如BACKUP为99
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置认证
auth_type PASS #主从服务器验证方式
auth_pass 8888
}
virtual_ipaddress { #设置vip
192.168.101.100 #可以多个虚拟IP,换行即可
}
}
添加自动检测代码配置
#全局配置
global_defs {
notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
XXX@XXX.com
}
notification_email_from miaoruntu@itcast.cn #指定发件人
#smtp_server XXX.smtp.com #指定smtp服务器地址
#smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh" ##监控脚本
interval 2 ##时间间隔,2秒
weight 2 ##权重
}
vrrp_instance VI_1 {
state MASTER #标示状态为MASTER 备份机为BACKUP
interface eth0 #设置实例绑定的网卡
virtual_router_id 51 #同一实例下virtual_router_id必须相同
priority 100 #MASTER权重要高于BACKUP 比如BACKUP为99
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置认证
auth_type PASS #主从服务器验证方式
auth_pass 8888
}
track_script {
check_nginx #监控脚本
}
virtual_ipaddress { #设置vip
192.168.101.100 #可以多个虚拟IP,换行即可
}
}
将check_nginx.sh拷贝至/etc/keepalived下,
脚本测试:
将nginx停止,将keepalived启动,执行脚本:sh /etc/keepalived/check_nginx.sh
#!/bin/bash
# 如果进程中没有nginx则将keepalived进程kill掉
A=`ps -C nginx --no-header |wc -l` ## 查看是否有 nginx进程 把值赋给变量A
if [ $A -eq 0 ];then ## 如果没有进程值得为 零
service keepalived stop ## 则结束 keepalived 进程
fi
观察日志
tail -f /var/log/messages
nginx+keepalived高可用,keepalived守护进程无法自动执行脚本问题解决
2、问题分析
nginx_check.sh脚本手动执行没有问题。keepalived、nginx、nginx_check.sh 配置文件都检查了很久没问题。
通过百度查找,发现keepalived配置文件里写了这个vrrp_script,大括号需要换行执行,否则不起作用。
keepalived.conf配置文件改为:
vrrp_script check_nginx
{
script “/etc/keepalived/check_nginx.sh” ##监控脚本
interval 2 ##时间间隔,2秒
weight -5 ##权重
}
重启keepalived测试,发现VIP仍然没有切换到备份机上。
后来想一下,会不会是nginx_check.sh脚本的编码格式出现问题?
使用:set ff 查看nginx_check.sh脚本格式,发现当前脚本格式是dos。
使用:set fileformat=unix修改脚本格式,再查看脚本格式为:
再重启keepalived,测试发现问题解决。
注意:如果使用Notepad++的NppFTP插件修改服务器的sh文件时,要注意文件的编码格式。