安装
安装过程缺少组件
安装keepalived的时候发现需要OpenSSL组件,在官网下了,后来,发现在make的时候有“ ‘SYS_setns’未声明”的异常,网调是因为glib不是最新导致;安装glib需要libffi包支持;需要到官网下载;安装完成后还要在/etc/profile中进行配置:
glib下载地址:
/blfs/view/svn/general/
或者ftp:///pub/gnome/sources/glib/
libffi下载地址:
/blfs/view/svn/general/
export LIBFFI_CFLAGS=/usr/lib/libffi-3.2.1/include/
export LIBFFI_LIBS=/usr/lib64/
其实这两个参数可以直接敲命令行,也可以直接附加在glib安装时候的./configure 的后面
发现还少libmount
需要./configure --disable-libmount即可
发现缺少大于等于8.13版本的PCRE
/pub/pcre/下载
./configure && make && make install
但是发现还是没有找到:
./configure --disable-libmount PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
configure终于成功了(但是这种写法有个问题就是PKG只是临时设置,未来make可能还是有问题)
make又出现错误:‘PCRE_INFO_MAXLOOKBEHIND’未声明(在此函数内第一次使用)
于是尝试(不再使用PKG_CONFIG_PATH):
export PCRE_LIBS=/usr/local/lib/
export PCRE_CFLAGS=/usr/local/include/
却发现./config根本过不去,因为报错PCRE不支持UTF8
原来PCRE在安装的时候需要,安装完成后使用pcretest -C指令进行测试
./configure --enable-utf8 --enable-unicode-properties
但是glib在config的时候依然报错。
但是如果清理掉PCRE_LIBS以及PCRE_CFLAGS之后则没有问题;但是清理掉之后,在make就有会出现之前的问题:‘PCRE_INFO_MAXLOOKBEHIND’未声明(在此函数内第一次使用)
使用yum进行安装
发现还需要安装gettext组件。安装了getttext之后还是报错,于是最后:
Yum install keepalived
让人震惊的是:虚拟机的操作系统的yum不好使了,就把/etc/下面文件下面的baseUrl修改为/centos/5/os/i386,总算yum能够上网了。但是还是不够的,可能是因为我装的麒麟是非完全安装,导致了很多问题。于是我毅然决定换系统,搞了一个很靠谱老版CentOS,安装yum keepalived一切顺利(注,即使是编译安装的方式,在阿里云上面也是可行的。
配置
之后的内容:
配置内容
! Configuration File for keepalived
global_defs {
notification_email {
acassen@
failover@
sysadmin@
}
notification_email_fromAlexandre.Cassen@
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth2
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.108.20/24
}
}
对于热备,state值改为BACKUP,priority改为90,OK了。这里有一点,就是interface是你的网卡的名字,这个要看好,大部分都是eth0/eth1,但是我的设备确实eth2,这个问题困扰了我一段时间。
安装完毕后,通过ip –a或者ip –addr来查看,对于MASTER或者没有MASTER的BACKUP都会在既有的IP列表中增加添加virtual_ipaddress(vip)信息。
曾经有一度发现切换不好用,于是打来了keepalived日志:
Vi /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -d -S 0"
/etc/在最后面添加上
# keepalived -S 0
local0.* /var/log/
/etc//rsyslog restart
后来发现如果在虚拟机中仅仅是讲网络断开,并不足以发生选举,当BACKUP发现了MASTE不通知后,将会尝试进入到MASTER状态,并进行广播,但是马上就收到了一个消息告知已经有MASTER了,于是又回退到了BACKUP状态,原因不详,但是如果直接把虚拟机给关闭了,却可以重新选举成功。Keepalived做成服务
参看 Linx下Keepalived做成服务
使用过程发生的问题
就在这个老版的CentOS,我放到上面一个jdk7,在里面指定了export了指定jdk但是报错无法找到:
java: cannot execute binaryfile
后来发现是因为jdk是64位,但是操作系统是32位导致的。Uname –a来看是否是32,如果没有64字样,就是32位的。
后来在本机的虚拟机上面那个tomcat总是报莫名其妙的异常:
可能是因为配置了jmx,但是并没有在中进行配置;不纠结了,换了一套tomcat,完美解决。
可以通过/etc//keepalivedrestart的方式来实现service keepalived restart即可
error while loading shared libraries: .1.1: cannot open shared object file: No such file or directory
默认.1.1(openssl组件)会安装在/usr/local/lib64下面;需要通过软连接放置到/usr/lib64下面:
ln -s /usr/local/lib64/.1.1 /usr/lib64/.1.1
ln -s /usr/local/lib64/.1.1 /usr/lib64/.1.1
ln是软链接,软链接代表寓意和windows的快捷方式很类似,软链接并不和数据块相连,只是一个符号,和真实的数据库的一个名称相连;与之相对应的是硬链接,直接和数据块(node)相连,相当于一个数据块的别名。
后记
其实当时麒麟系统版本比较老,通过find -name glib*发现其实原始的安装包(rpm)是2.22版本的,晚上睡觉的时候我也在想这个问题,后来想明白了,其实我当时下载的是新版的keepalive,的,需要新版的glib,如果我选择版本稍低一些的keepalive,其实就可以和系统兼容,也就避免了当前这些问题。
于是在keepalived的官网上选择了稍早一些版本进行尝试,后来发现1.2.23的版本是最后一个使用glib2.22的(之后都升级到了glib2.5)。发布时间2016年的七月,时间其实也是可以接受的,于是就使用了这个版本,./configure && make && make install非常顺利。