Keepalived实现高可用
Keepalived实现高可用
参考文档:
1. keepaliveduser guide:http://www.keepalived.org/pdf/UserGuide.pdf
2. 安装文档:源码解压包中的INSTALL文档
本文涉及keepalived的安装,简单配置,为haproxy做高可用。
一.环境准备
1. 操作系统
CentOS-7-x86_64-Everything-1511
2. Keepalived版本
截至2017-03-22,keepalived版本是1.3.5:
http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
3. 拓扑图

1) 采用VMware ESXi虚拟出的2台服务器node1/2,前端访问地址10.11.4.151/152,后端地址192.168.4.151/2;
2) Web1服务器为采用docker技术生成的1台服务器,已安装并启动nginx与php服务,ip地址192.168.4.171;
3) Web2/3同Web1服务器,ip地址192.168.4.172/173;
4) 计划在node1/2两台服务器上部署keepalive&haproxy,利用keepalived虚拟出vip:10.11.4.150做高可用;
5) Haproxy相关配置请参考:http://blog.chinaunix.net/uid-26168435-id-5761429.html,调整后将静态网页指向web1/2服务器的index.html,将动态网页指向web1/2服务器的index.php,其他指向web3服务器;
6) 以web1为例,设置测试页面,以方便后续查看验证结果。
二.Keepalived安装配置
以下流程均在node1节点完成,node2节点请参考node1做适当修改。
1. 依赖软件
- [root@elk-node1 ~]# yum install openssl-devel libnl3-devel ipset-devel iptables-devel libnfnetlink-devel popt popt-static popt-devel gcc kernel-headers kernel-devel net-snmp-devel -y
#升级或者安装相关软件,不是必需都安装一次,但一般libnl3-devel ipset-develiptables-devel libnfnetlink-devel popt popt-static popt-devel等并没有预安装到系统中,net-snmp-devel是需要开启相关功能才需要。
2. 下载
- [root@elk-node1 ~]# cd /usr/local/src/
- [root@elk-node1 src]#wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
3. 编译安装
- [root@elk-node1 src]# tar -zxvf keepalived-1.3.5.tar.gz
- [root@elk-node1 src]# cd keepalived-1.3.5
- [root@elk-node1 keepalived-1.3.5]# ./configure --prefix=/usr/local/keepalived
- [root@elk-node1 keepalived-1.3.5]# make
- [root@elk-node1 keepalived-1.3.5]# make install
#编译前可通过”./configure --help”查看相关编译参数;
#此编译未带“--with-kernel-dir”参数,一般认为采用”--with-kernel-dir=/usr/src/kernels/(version)”指定到内核效果更好,可能本人环境比较简单,实际使用后并没有明显的问题;这里未指定是因为centos7在编译使用参数之后找不到”linux/netlink.h”头文件,即使在相应目录下能找到相应头文件,搜了一下也没有找到对应的解决方案。
4. 配置开机启动
1) 启动相关命令
- [root@elk-node1 ~]# cd /usr/local/keepalived/
- [root@elk-node1 keepalived]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
- [root@elk-node1 keepalived]# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
#软链接。
2) 配置文件
- [root@elk-node1 keepalived]# mkdir -p /etc/keepalived
- [root@elk-node1 keepalived]# ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
#软链接。
3) 开机启动
- [root@elk-node1 keepalived]# touch /etc/rc.d/init.d/keepalived
- [root@elk-node1 keepalived]# chmod +x /etc/rc.d/init.d/keepalived
- [root@elk-node1 keepalived]# vim /etc/rc.d/init.d/keepalived
- #!/bin/sh
- #
- # keepalived High Availability monitor built upon LVS and VRRP
- #
- # chkconfig: - 86 14
- # description: Robust keepalive facility to the Linux Virtual Server project \
- # with multilayer TCP/IP stack checks.
- ### BEGIN INIT INFO
- # Provides: keepalived
- # Required-Start: $local_fs $network $named $syslog
- # Required-Stop: $local_fs $network $named $syslog
- # Should-Start: smtpdaemon httpd
- # Should-Stop: smtpdaemon httpd
- # Default-Start:
- # Default-Stop: 0 1 2 3 4 5 6
- # Short-Description: High Availability monitor built upon LVS and VRRP
- # Description: Robust keepalive facility to the Linux Virtual Server
- # project with multilayer TCP/IP stack checks.
- ### END INIT INFO
- # Source function library.
- . /etc/rc.d/init.d/functions
- exec="/usr/sbin/keepalived"
- prog="keepalived"
- config="/etc/keepalived/keepalived.conf"
- [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
- lockfile=/var/lock/subsys/keepalived
- start() {
- [ -x $exec ] || exit 5
- [ -e $config ] || exit 6
- echo -n $"Starting $prog: "
- daemon $exec $KEEPALIVED_OPTIONS
- retval=$?
- echo
- [ $retval -eq 0 ] && touch $lockfile
- return $retval
- }
- stop() {
- echo -n $"Stopping $prog: "
- killproc $prog
- retval=$?
- echo
- [ $retval -eq 0 ] && rm -f $lockfile
- return $retval
- }
- restart() {
- stop
- start
- }
- reload() {
- echo -n $"Reloading $prog: "
- killproc $prog -1
- retval=$?
- echo
- return $retval
- }
- force_reload() {
- restart
- }
- rh_status() {
- status $prog
- }
- rh_status_q() {
- rh_status &>/dev/null
- }
- case "$1" in
- start)
- rh_status_q && exit 0
- $1