我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第12篇文章,点击查看活动详情
Keepalived
Keepalived概述
Keepalived由C编写,最初是专为LVS负载均衡软件设计的,Keepalived软件主要是通过
VRRP协议实现高可用功能。
VRRP(Virtual Route Redundancy Protocol)协议,译为虚拟路由冗余协议。
VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP在路由器组内部,实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,MASTER实现针对虚拟路由器IP的各种网络功能。其他设备不拥有该虚拟IP,状态为BACKUP,除了接收MASTER的VRRP状态通告信息以外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。
VRRP可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。其中的虚拟路由即Virtual路由是由VRRP路由群组创建的一个不真实存在的路由,这个虚拟路由也是有对应的IP地址。而且VRRP路由1和VRRP路由2之间会有竞争选择,通过选择会产生一个Master路由和一个Backup路由。
Master路由和Backup路由之间会有一个心跳检测,Master会定时告知Backup自己的状态,如果在指定的时间内,Backup没有接收到这个通知内容,Backup就会替代Master成为新的Master。Master路由有一个特权就是虚拟路由和后端服务器都是通过Master进行数据传递交互的,而备份节点则会直接丢弃这些请求和数据,不做处理,只是去监听Master的状态
官网地址:https://keepalived.org/
文档地址:https://keepalived.org/manpage.html
下载Keepalived
下载地址:keepalived.org/download.ht…
wget https://keepalived.org/software/keepalived-2.2.7.tar.gz
安装Keepalived
解压
tar -zxvf keepalived-2.2.7.tar.gz
对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,同时指定安装keepalived的位置,进行编译
cd keepalived-2.2.7
./configure --prefix=/usr/local/program/keepalived
编译和安装同时进行
make && make install
运行前配置
cp /usr/local/program/keepalived-2.2.7/keepalived/etc/init.d/keepalived /etc/init.d/
# keepalived的系统配置文件
mkdir /etc/keepalived
cp /usr/local/program/keepalived/etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf
cp /usr/local/program/keepalived-2.2.7/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# 启动和关闭keepalived
cp /usr/local/program/keepalived/sbin/keepalived /usr/sbin/
keepalived.conf配置介绍
keepalived.conf配置文件是系统配置文件,主要分三个部分。
global全局配置
第一部分是global全局配置
# global全局配置
global_defs {
# 邮件通知,当keepalived发送切换时需要发email给具体的邮箱地址
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
# 设置发件人的邮箱信息
notification_email_from Alexandre.Cassen@firewall.loc
# 指定smpt服务地址
smtp_server 192.168.200.1
# 指定smpt服务连接超时时间
smtp_connect_timeout 30
#运行keepalived服务器的一个标识,可以用作发送邮件的主题信息
router_id LVS_DEVEL
# 默认是不跳过检查。检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,
# 如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)
vrrp_skip_check_adv_addr
# 严格遵守VRRP协议
vrrp_strict
# 在一个接口发送的两个免费ARP之间的延迟。可以精确到毫秒级。默认是0
vrrp_garp_interval 0
# 在一个网卡上每组na消息之间的延迟时间,默认为0
vrrp_gna_interval 0
}
vrrp相关配置
第二部分是vrrp相关配置
# vrrp配置,包含四个子模块:1. vrrp_script 2. vrrp_sync_group 3. garp_group 4. vrrp_instance
# 设置keepalived实例信息,VI_1为VRRP实例名称
vrrp_instance VI_1 {
# 两个值可选MASTER主 BACKUP备,即主节点就选MASTER
state MASTER
# vrrp实例绑定的当前服务器使用的网卡名称,用于发送VRRP包,使用命令ifconfig查看
interface eth0
# 指定VRRP实例ID,范围是0-255
virtual_router_id 51
# 指定优先级,优先级高的将成为MASTER
priority 100
# 指定发送VRRP通告的间隔,单位是秒
advert_int 1
# vrrp之间通信的认证信息
authentication {
# 指定认证方式。PASS简单密码认证(推荐)
auth_type PASS
# 指定认证使用的密码,最多8位
auth_pass 1111
}
# 设置虚拟IP地址,供用户访问使用,可设置多个,一行一个
virtual_ipaddress {
192.168.200.16
192.168.200.17
192.168.200.18
}
}
LVS相关配置
第三部分是LVS相关配置
# 定义虚拟服务器
# 定义一个虚拟服务器,ip是virtual_address中定义的其中一个, 语法:ip+空格+服务端口
virtual_server 192.168.200.100 443 {
# 健康检查时间间隔,单位:秒
delay_loop 6
# 负载均衡调度算法,常用wlc或rr
lb_algo rr
# 负载均衡转发规则。包括DR、NAT、TUN 3种,一般使用路由(DR)转发规则
lb_kind NAT
# http服务会话保持时间,单位:秒
persistence_timeout 50
# 转发协议,分为TCP和UDP两种
protocol TCP
# 真实服务器IP和端口,可以定义多个
real_server 192.168.201.100 443 {
# 负载权重,值越大,转发的优先级越高
weight 1
# http get方式健康检查
HTTP_GET {
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
# 服务连接超时时长,单位:秒
connect_timeout 3
# 服务连接失败重试次数
retry 3
# 重试连接间隔,单位:秒
delay_before_retry 3
}
}
}
keepalived实现Mycat高可用
配置keepalived.conf
通过配置keepalived.conf实现Mycat高可用
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16
192.168.200.17
192.168.200.18
}
}
virtual_server 192.168.200.16 8086 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server mycat真实IP1 8086 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server mycat真实IP2 8086 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
查看网卡名称,通常名叫:eth0、ens33
[root@administrator ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.22.4.21 netmask 255.255.192.0 broadcast 172.22.63.255
ether 00:16:3e:02:73:19 txqueuelen 1000 (Ethernet)
RX packets 101391541 bytes 56887890390 (52.9 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 98759302 bytes 29273448927 (27.2 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
启动验证
启动Keepalived
service keepalived start
[root@administrator ~]# service keepalived start
Starting keepalived (via systemctl): [ OK ]
登录验证 注意:keepalived配置文件中真实服务地址不能是外网IP,必须是内网IP
[root@administrator keepalived]# mysql -u mycat -h 192.168.200.16 -P 8086 -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.6.29-mycat-1.6.7.6-release-20220524173810 MyCat Server (OpenCloudDB)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
测试高可用
将某台Mycat服务器实例停止,再次访问Keepalived的虚拟IP
mysql -umycat -p123456 -h 192.168.200.16 -P 8066