wordpress免费的模板,北京seo顾问服务公司,自己做的网站放到首页,网络营销系统官方网站Keepalived for Linux
1.keepalived简介 vrrp 协议的软件实现#xff0c;原生设计目的为了 高可用 ipvs 服务 功能#xff1a; 基于 vrrp 协议完成地址流动 为 vip 地址所在的节点生成 ipvs 规则 ( 在配置文件中预先定义 ) 为 ipvs 集群的各 RS 做健康状态检测 …官方网站Keepalived for Linux
1.keepalived简介 vrrp 协议的软件实现原生设计目的为了 高可用 ipvs 服务 功能 基于 vrrp 协议完成地址流动 为 vip 地址所在的节点生成 ipvs 规则 ( 在配置文件中预先定义 ) 为 ipvs 集群的各 RS 做健康状态检测 基于脚本调用接口完成脚本中定义的功能进而影响集群事务以此支持 nginx 、 haproxy 等服务 健康检查和失败切换是keepalived的两大核心功能 健康检查就是采用tcp三次握手icmp请求http请求udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活而失败切换主要是应用于配置了主备模式的服务器利用VRRP协议维持主备服务器的心跳当主服务器出现问题时由备服务器承载对应的业务从而在最大限度上减少损失并提供服务的稳定性 2.选举机制 既然有主备就会有选举机制那么我们keepalived的选举机制如下 非抢占模式默认只要Master不挂掉优先级高的路由器只能等待 vrrp_instance VI_1 {state MASTER #主服务器 BACKUP 对应是从服务器interface eth0 #对应网卡virtual_router_id 51 #每个虚拟路由器惟一标识,范围0-255每个虚拟路由器此值必须唯一priority 100 #当前物理节点在此虚拟路由器的优先级范围1-254#值越大优先级越高,每个keepalived主机节点此值不同advert_int 1 #vrrp通告的时间间隔默认1sauthentication {auth_type PASS #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)auth_pass 1111 #预共享密钥仅前8位有效#同一个虚拟路由器的多个keepalived节点必须一样}virtual_ipaddress {#虚拟IP,生产环境可能指定上百个IP地址192.168.200.16192.168.200.17192.168.200.18}
} 抢占模式一旦有优先级高的路由器加入立即成为Master
priority 100 #优先级高
nopreempt #非抢占模式 加入3.配置解析 3.1全局配置 #全局配置
global_defs {notification_email { #keepalived 发生故障切换时邮件发送的目标邮箱acassenfirewall.locfailoverfirewall.locsysadminfirewall.loc}notification_email_from Alexandre.Cassenfirewall.loc #发邮件地址smtp_server 192.168.200.1#邮件服务器地址smtp_connect_timeout 30 #邮件服务器连接timeoutrouter_id LVS_DEVEL #每个keepalived主机唯一标识vrrp_skip_check_adv_addr #对所有通告报文都检查会比较消耗性能收到的通告报文和上一个路由器一样则跳过检查vrrp_strict#严格遵循vrrp协议#启用此项后以下状况将无法启动服务:#1.无VIP地址#2.配置了单播邻居#3.在VRRP版本2中有IPv6地址#建议不加此项配置vrrp_garp_interval 0 #报文发送延迟0表示不延迟vrrp_gna_interval 0 #消息发送延迟
#vrrp_mcast_group4 224.0.0.18 #指定组播IP地址范围
} 3.2 虚拟路由配置 vrrp_instance VI_1 {
state MASTER
interface eth0 #绑定为当前虚拟路由器使用的物理接口如eth0,可以和VIP不在一
个网卡
virtual_router_id 51 #每个虚拟路由器惟一标识,范围0-255每个虚拟路由器此值必须唯一#否则服务无法启动#同属一个虚拟路由器的多个keepalived节点必须相同#务必要确认在同一网络中此值必须唯一
priority 100 #当前物理节点在此虚拟路由器的优先级范围1-254#值越大优先级越高,每个keepalived主机节点此值不同
advert_int 1 #vrrp通告的时间间隔默认1s
authentication { #认证机制
auth_type AH|PASS #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
auth_pass 1111 #预共享密钥仅前8位有效#同一个虚拟路由器的多个keepalived节点必须一样}
virtual_ipaddress { #虚拟IP,生产环境可能指定上百个IP地址IPADDR/MASK brd IPADDR dev STRING scope SCOPE label LABEL172.25.254.100 #指定VIP不指定网卡默认为eth0,注意不指定/prefix,默认32172.25.254.101/24 dev eth1172.25.254.102/24 dev eth2 label eth2:1}
} 4.keepalived 单主架构 4.1 配置环境 后面环境通用 主机ip服务client172.25.254.10客户端keepalived1172.25.254.20keepalived2172.25.254.30web1 rs1172.25.254.40web2 rs2172.25.254.50 4.2 keepalived1 配置 为了美观性和方便理解我们采用子配置书写 cd /etc/keepalived/conf.d vim router.conf 添加虚拟路由并作为我们的VIP虚拟访问IP systemctl restart keepalived 重启服务后查看虚拟IP是否添加成功 同理对keepalived2做相同操作 由于是单骨架我们的BACKUP服务器不会启动也就不会有虚拟路由当我们关闭keepalived1上的服务时我们的服务才会转移到keepalived2上去 5.keepalived 双主架构 cp -p router.conf router1.conf 为了方便我们直接复制即可 也就是配置两个虚拟路由IP一人当一个虚拟IP的master 6.组播传输和单波传输 vrrp_mcast_group4 IP#指定组播IP地址范围 测试tcpdump -i ens33 -nn host 224.0.0.18 # 启用 vrrp_strict 时不能启用单播 , 否则服务无法启动 , 并在 messages 文件中记录下面信息 unicast_src_ip 172.25.254.20 # 本机 IP unicast_peer { 172.25.254.30 # 指向对方主机 IP # 如果有多个 keepalived, 再加其它节点的 IP } 组播如下配置 测试 tcpdump -i ens33 vrrp -n tcpdump -i eth0 -nn host 224.0.0.18 测试: 单波 默认 keepalived 主机之间利用多播相互通告消息会造成网络拥塞可以替换成单播减少网络流量 unicast_src_ip IPADDR # 指定发送单播的源 IP unicast_peer { IPADDR # 指定接收单播的对方目标主机 IP ...... } 测试 7.实现双主架构下的LVS-DR 7.1 虚拟服务器配置 virtual_server IP port { #VIP 和 PORT delay_loop INT # 检查后端服务器的时间间隔 lb_algo rr|wrr|lc|wlc|lblc|sh|dh # 定义调度方法 lb_kind NAT|DR|TUN # 集群的类型 , 注意要大写 persistence_timeout INT # 持久连接时长 protocol TCP|UDP|SCTP # 指定服务协议 , 一般为 TCP sorry_server IPADDR PORT # 所有 RS 故障时备用服务器地址 real_server IPADDR PORT { #RS 的 IP 和 PORT weight INT #RS 权重 notify_up STRING|QUOTED-STRING #RS 上线通知脚本 notify_down STRING|QUOTED-STRING #RS 下线通知脚本 HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... } # 定义当前主机健康状 态检测方法 } } # 注意 : 括号必须分行写 , 两个括号写在同一行 , 如 : }} 会出错 7.2 检测服务存活方法 TCP监测 传输层检测 TCP_CHECK TCP_CHECK { connect_ip IP ADDRESS #向当前 RS 的哪个 IP 地址发起健康状态检测请求 connect_port PORT #向当前 RS 的哪个 PORT 发起健康状态检测请求 bindto IP ADDRESS #发出健康状态检测请求时使用的源地址 bind_port PORT #发出健康状态检测请求时使用的源端口 connect_timeout INTEGER #客户端请求的超时时长 #等于 haproxy 的 timeout server } 应用层检测 HTTP_GET|SSL_GET HTTP_GET|SSL_GET { url { path URL_PATH #定义要监控的URL status_code INT #判断上述检测机制为健康状态的响应码一般为 200 } connect_timeout INTEGER #客户端请求的超时时长 , 相当于haproxy的timeout server nb_get_retry INT #重试次数 delay_before_retry INT #重试之前的延迟时长 connect_ip IP ADDRESS #向当前 RS 哪个 IP 地址发起健康状态检测请求 connect_port PORT #向当前 RS 的哪个 PORT 发起健康状态检测请求 bindto IP ADDRESS #向当前 RS 发出健康状态检测请求时使用的源地址 bind_port PORT #向当前 RS 发出健康状态检测请求时使用的源端口 } virtual_server 172.25.254.100 80 {delay_loop 6lb_algo wrrlb_kind DRprotocol TCP#sorry_server 172.25.254.30real_server 172.25.254.40 80 {weight 1TCP_CHECK {connect_timeout 5nb_get_retry 3delay_before_retry 3connect_port 80}
}
real_server 172.25.254.50 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 1nb_get_retry 3delay_before_retry 1}}
}
virtual_server 172.25.254.200 80 {delay_loop 6lb_algo wrrlb_kind DRprotocol TCP#sorry_server 172.25.254.30real_server 172.25.254.40 80 {weight 1TCP_CHECK {connect_timeout 5nb_get_retry 3delay_before_retry 3connect_port 80}
}
real_server 172.25.254.50 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 1nb_get_retry 3delay_before_retry 1}}
} 写入子配置文件 vim /etc/keepalived/lvs.conf 7.3 配置web服务器 ip addr add 172.25.254.100/32 dev lo systemctl restart ipvsadm.service systemctl restart keepalived 测试 8.实现HAProxy高可用 8.1 配置环境 RS1和RS2 vim /etc/sysctl.d/arp.conf keepalive1和keepalive2 将lvs里面的虚拟主机配置文件删掉或者替换 将 由于我们haproxy需要监控vip但本机没有需要开启一个内核参数让其能监控不在本机的Ip 在两个 ka1 和 ka2 两个节点启用内核参数 vim /etc/sysctl.conf net.ipv4.ip_nonlocal_bind 1 8.2 配置基础haproxy 在keepalived上下载haproxy 写入基本配置 listen webserverbind 172.25.254.100:80server web1 172.25.254.101:80 checkserver web2 172.25.254.102:80 check 8.3 keepalived启用脚本 为了保证我们haproxy的高可用我们需要写一个脚本去检测haproxy服务的存活 我们采用killall -0 haproxy 来检查haproxy服务是否运行当然也可采用其他方法 mkdir /etc/keepalived/conf.d/scripts vim /etc/keepalived/conf.d/scripts/haproxy.sh #haproxy 内容
#!/bin/bash
/usr/bin/killall -0 haproxy 赋予脚本可执行权限 keepalived 调用脚本 track_script {SCRIPT_NAME_1SCRIPT_NAME_2
} 定义脚本 vrrp_script SCRIPT_NAME {script STRING|QUOTED-STRING #此脚本返回值为非0时会触发下面OPTIONS执行OPTIONS
} vrrp_script SCRIPT_NAME { #定义一个检测脚本在global_defs 之外配置 script STRING|QUOTED-STRING #shell 命令或脚本路径 interval INTEGER # 间隔时间单位为秒默认 1 秒 timeout INTEGER # 超时时间 weight INTEGER:-254..254 # 默认为 0, 如果设置此值为负数 # 当上面脚本返回值为非 0 时 # 会将此值与本节点权重相加可以降低本节点权重 # 即表示 fall. # 如果是正数当脚本返回值为 0 # 会将此值与本节点权重相加可以提高本节点权重 # 即表示 rise. 通常使用负值 fall INTEGER # 执行脚本连续几次都失败 , 则转换为失败建议设为 2 以上 rise INTEGER # 执行脚本连续几次都成功把服务器从失败标记为成功 user USERNAME [GROUPNAME] # 执行监测脚本的用户或组 init_fail # 设置默认标记为失败状态监测成功之后再转换为成功状态 } 操作实例 vim /etc/keepalived/conf.d/haproxy.conf
vrrp_script check_haproxy {script /etc/keepalived/conf.d/scripts/haproxy.shinterval 1weight -30fall 2rise 2timeout 2
} vim /etc/keepalived/conf.d/router.conf
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 20priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.100/24 dev ens33 label ens33:0}unicast_src_ip 172.25.254.20unicast_peer {172.25.254.30}track_script{ #新加入的作用是调用check_haproxy}
}测试