keepalived基于VRRP协议,用于解决单点故障,可以实现nginx的高可用,免费的软件。使用它可以实现高可用HA机制。
用于解决内网单机故障的路由协议,构建有多个路由器MASTER BACKUP,将几台提供相同服务的路由器组成路由器组,每个路由器绑定一个相同的VIP(虚拟IP)。
注意,一般使用keepalived实现高可用有个前提就是硬件配置需要一样,否则主备硬件差距过大,主的宕机,备机有可能因为硬件设备太差,导致因流量过大而直接崩溃,无法实现高可用,所以一般选择主备硬件一样。
一、在官网下载压缩文件https://www.keepalived.org/download.html:
这里我选择2.0.20。(刚开始选的2.1.5,安装各种报错,各种未发现函数名。无解,放弃了,就选了这个版本)
二、上传并解压文件,这里我放在:
2.1创建文件夹
#我放在了这个文件夹下,没有的话执行这个命令创建,或者自己定义
mkdir /home/software
2.2执行解压命令:
#进入上传的文件路径
cd /home/software
#解压,解压文件根据自己的
tar -zxvf keepalived-2.0.20.tar.gz
三、安装依赖包:
yum -y install libnl libnl-devel
四、使用configure配置安装目录与核心文件存在
#进入到解压目录下
cd /home/software/keepalived-2.0.20
#使用configure配置安装目录与核心文件存在
./configure --prefix=/usr/local/keepalived --sysconf=/etc
五、安装keepalived
make && make install
六、安装完成后进入到/etc/keepalived
cd /etc/keepalived/
可以看到这些keepalived.conf,表明安装成功。
七、查看网卡信息如下,获取网卡为ens33
[root@localhost sbin]# ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:b8:21:eb brd ff:ff:ff:ff:ff:ff
inet 192.168.235.101/24 brd 192.168.235.255 scope global noprefixroute ens33
七、修改配置文件如下:
vi keepalived.conf
! Configuration File for keepalived
global_defs {
#故障时,主备切换通知到的email
#notification_email {
#[email protected]
#[email protected]
#[email protected]
#}
#email配置
#notification_email_from [email protected]
#smtp_server 192.168.200.1
#smtp_connect_timeout 30
#路由ID,当前安装keepalived的节点主机标识符,需保证全局唯一
router_id keep_101
#vrrp_skip_check_adv_addr
#vrrp_strict
#vrrp_garp_interval 0
#vrrp_gna_interval 0
}
#基于vrrp协议的实例,可理解为一个服务器节点
vrrp_instance VI_1 {
#表示状态为主节点MASTER还是备用机BACKUP
state MASTER
#当前示例绑定的网卡,根据ip addr查出来的网卡
interface ens33
#虚拟路由id,保证主备节点该值一致
virtual_router_id 51
#优先级/权重,master权重一般高于backup,在master挂掉后谁的优先级高,谁就能成为master
priority 100
#主备之间同步检查的时间间隔(心跳),默认为1s
advert_int 1
#认证授权的密码,防止非法节点进入,主备需要一致
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟IP,可以有多个,根据自己实际情况修改
virtual_ipaddress {
192.168.235.150
}
}
八、启动keepalive:
/usr/local/keepalived/sbin/keepalived
九、查看keepalived进程信息及网卡信息:
ps -ef | grep keepalived
信息如下:
[root@localhost sbin]# ps -ef | grep keepalived
root 1550 1 0 23:01 ? 00:00:00 /usr/local/keepalived/sbin/keepalived -D
root 1551 1550 0 23:01 ? 00:00:00 /usr/local/keepalived/sbin/keepalived -D
root 1570 1486 0 23:11 pts/0 00:00:00 grep --color=auto keepalived
ip addr
可以看到虚拟ip生效
[root@localhost sbin]# ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:b8:21:eb brd ff:ff:ff:ff:ff:ff
inet 192.168.235.101/24 brd 192.168.235.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.235.150/32 scope global ens33 #这里多了配置虚拟ip
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feb8:21eb/64 scope link
valid_lft forever preferred_lft forever
十、再备机上执行上述同样的操作,修改配置文件如下即可
! Configuration File for keepalived
global_defs {
#故障时,主备切换通知到的email
#notification_email {
#[email protected]
#[email protected]
#[email protected]
#}
#email配置
#notification_email_from [email protected]
#smtp_server 192.168.200.1
#smtp_connect_timeout 30
#路由ID,当前安装keepalived的节点主机标识符,需保证全局唯一
router_id keep_103
#vrrp_skip_check_adv_addr
#vrrp_strict
#vrrp_garp_interval 0
#vrrp_gna_interval 0
}
#基于vrrp协议的实例,可理解为一个服务器节点
vrrp_instance VI_1 {
#表示状态为主节点MASTER还是备用机BACKUP
state BACKUP
#当前示例绑定的网卡,根据ip addr查出来的网卡
interface ens33
#虚拟路由id,保证主备节点该值一致
virtual_router_id 51
#优先级/权重,master权重一般高于backup,在master挂掉后谁的优先级高,谁就能成为master
priority 90
#主备之间同步检查的时间间隔(心跳),默认为1s
advert_int 1
#认证授权的密码,防止非法节点进入,主备需要一致
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟IP,可以有多个,根据自己实际情况修改
virtual_ipaddress {
192.168.235.150
}
}