近期,项目中用户对服务的高可用有需求,所以就接触到了Keepalived。刚听到这玩意,我还嗤之以鼻,我和同事说对外提供服务的物理机挂掉,你再怎么HA也没用啊,除非提供多个IP,或者通过前置路由来解决问题。
结果现实很打脸,Keepalived用到虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)完美的实现了HA。
工作原理先不写了,网上一搜很多,直接上离线安装的流程:
1、先下个源码:
链接:https://pan.baidu.com/s/1VyzPjd0HichRczgkGREUwg
提取码:7g70
2、编译安装zlib、openssl
源码包拷贝到/usr/local/src/目录下,
(1)先解压编译安装zlib
tar xvf zlib-1.2.8.tar.gz
cd /usr/local/src/zlib-1.2.8
构建静态库
.../zlib-1.2.8]# ./configure
.../zlib-1.2.8]# make test
.../zlib-1.2.8]# make install
构建共享库
.../zlib-1.2.8]# make clean
.../zlib-1.2.8]# ./configure --shared
.../zlib-1.2.8]# make test
.../zlib-1.2.8]# make install
.../zlib-1.2.8]# cp zutil.h /usr/local/include
.../zlib-1.2.8]# cp zutil.c /usr/local/include
完成
(2)再解压编译安装openssl
tar xvf openssl-1.1.0j.tar.gz
cd /usr/local/src/openssl-1.1.0j
编译安装
.../openssl-1.1.0j]# ./config shared zlib
.../openssl-1.1.0j]# make depend
.../openssl-1.1.0j]# make && make install
.../openssl-1.1.0j]# ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
.../openssl-1.1.0j]# ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
3、依赖组件安装完成后,开始安装Keepalived
tar xvf keepalived-2.1.0.tar.gz
cd keepalived-2.1.0
[[email protected] keepalived-2.1.0]# ./configure --prefix=/usr/local/keepalived
[[email protected] keepalived-2.1.0]# make && make install
完成后会在以下路径生成:
/usr/local/etc/keepalived/keepalived.conf
/usr/local/etc/sysconfig/keepalived
/usr/local/sbin/keepalived
4、配置启动Keepalived
# keepalived启动脚本变量引用文件,默认文件路径是/etc/sysconfig/,也可以不做软链接,直接修改启动脚本中文件路径即可(安装目录下)
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
# 将keepalived主程序加入到环境变量(安装目录下)
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
# keepalived启动脚本(源码目录下),放到/etc/init.d/目录下就可以使用service命令便捷调用
cp /usr/local/src/keepalived-2.1.0/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
# 将配置文件放到默认路径下
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
加为系统服务:chkconfig --add keepalived
开机启动:chkconfig keepalived on
启动、关闭、重启
systemctl start keepalived
systemctl stop keepalived
systemctl restart keepalived
配置启动keepalived
修改默认配置文件/etc/keepalived/keepalived.conf
A节点(需要注意的是,eth0 这个的网卡名称一定别弄错了,要弄成自己的。可以使用 ip a 命令查看)
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server localhost
smtp_connect_timeout 30
router_id NodeA
}
vrrp_instance VI_1 {
state BACKUP #指定A节点为主节点 备用节点上设置为BACKUP即可
interface em1 #绑定虚拟IP的网络接口
virtual_router_id 51 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
priority 100 #主节点的优先级(1-254之间),备用节点必须比主节点优先级低
advert_int 1 #组播信息发送间隔,两个节点设置必须一样
authentication { #设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #指定虚拟IP, 两个节点设置必须一样
192.168.1.100
}
}
B节点只需要修改三个地方:
router_id NodeB
state BACKUP
priority 99
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server localhost
smtp_connect_timeout 30
router_id NodeB
}
vrrp_instance VI_1 {
state BACKUP
interface em1
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
}
配置完成后,在A节点和B节点启动Keepalived就可以,
systemctl start keepalived
然后,可以通过查看服务状态来确定是否启动成功:
systemctl status keepalived
A节点作为主节点启动后,会在上面命令行查看状态中显示已绑定的虚拟IP的地址(也可以通过ip a命令查看虚拟ip是否绑定到网卡来确定);
B节点作为备用节点启动后,会在上面命令行查看状态中显示BACKUP节点初始化成功。
此时就可以通过虚拟IP来实现HA了,此时如果A节点挂掉,虚拟IP地址192.168.1.100会自动绑定到B节点的网卡上,可以通过 ip a命令查看。
(有搞不明白的可以留言沟通,觉得有帮助的可否一个个小小的赞 ^_^)