keepalived
傲然君
这个作者很懒,什么都没留下…
展开
-
keepalived 单播部署
1、gcc 安装server01 与 server03 安装 gcc,否则 keepalived 在执行 configure 命令时,会提示“no acceptable C compiler found in $PATH”错误。解决方法:https://packages.debian.org/jessie/build-essential2、libssl-dev 安装server01 与 ...原创 2020-03-02 15:17:56 · 3123 阅读 · 2 评论 -
VMware 搭建跨网段虚拟机环境
1、修改 VMware 虚拟网络编辑器添加2个网络:2、设置 ip修改各机器“/etc/network/interfaces”文件,其中server01处于网段1,server03处于网段2,server02同时处于网段1和网段2。3、修改主机名并设置永久生效以 server01 为例:1)echo “192.168.255.128 server01” >>/etc/h...原创 2020-03-02 14:31:32 · 5418 阅读 · 0 评论 -
debian9 Keepalived 按日期写文件并自定义日志格式
keepalived 日志默认是存储在系统日志文件:/var/log/messages 中:一、修改 keepalived 启动参数vim /lib/systemd/system/keepalived.service将红线部分由 “-D” 改成 “-D -d -S 0”。-D:详细日志信息-d:导出配置数据-S:设置本地的syslog设备,编号0-70:指定为local0设...原创 2020-02-28 14:26:34 · 553 阅读 · 0 评论 -
keepalived 邮件告警
为方便运维,我们需要及时掌握线上 keepalived的运行状态。本文以163邮件为例,讲述当 keepalived 发生状态切换时,如何进行邮件告警。设置163邮箱的SMTP服务器登录163邮箱:系统会提示输入授权码,即为第三方客户端的登录密码。编写脚本此处采用python脚本:#coding:utf -8import sysimport socketimport s...原创 2020-02-27 11:32:35 · 1266 阅读 · 1 评论 -
keepalived + nginx 高可用集群
环境由于测试条件有限,只开启了三台虚拟机(均在同一台宿主机上):server01:192.168.255.128,keepalived + 1个 nginx 负载均衡 + 2个 nginx 后台 web 测试工具。server02:192.168.255.130、192.168.177.130,仅作为 server01 与 server02 的通信网关。server03:192.168.1...原创 2020-02-25 16:35:51 · 223 阅读 · 0 评论 -
单机部署多个 nginx
为方便测试,单机部署多个 nginx,监听不同端口,响应不同页面。以其中一个为例:1、新建目录:/root/nginx/8571//root/nginx/8571/html//root/nginx/8571/log/2、将文件:/usr/sbin/nginx 拷贝至 /root/nginx/8571/3、修改默认 html 内容:/root/nginx/8571/html/inde...原创 2020-02-24 20:27:42 · 4555 阅读 · 0 评论 -
Keepalived 双机互为主备配置
两台服务器:server01:192.168.255.128server01:192.168.177.128两个vip(各网段一个):vip_1:192.168.255.222vip_2:192.168.177.222server01 配置:root@server01:~# cat /etc/keepalived/keepalived.conf! Configuration Fil...原创 2020-02-24 15:37:34 · 616 阅读 · 0 评论 -
keepalived + nginx 主备与负载均衡 之 Error exec-ing command '/etc/keepalived/nginx_check.sh'
在使用 keepalived 定期执行 sh 脚本时,出现如下错误:一开始看见其他博主说是权限问题:但是,按照上面的解决方法,执行 chmod 命令后,问题并没有解决。后面直接在终端执行脚本:“/etc/keepalived/nginx_check.sh”,终端提示错误:一查,才知道是格式问题,因为这个 .sh 脚本是我在windows下编辑,然后复制到linux系统里执行的。所以 .s...原创 2020-02-21 18:19:45 · 3887 阅读 · 0 评论 -
keepalived + nginx 主备与负载均衡 之 BACKUP ping vip 不通
server01 (192.168.255.128,MASTER)与 server02(192.165.177.128,BACKUP),vip:192.168.0.100 在server01上。结果只有 server01 ping vip 成功,宿主机和 server02 ping vip 都不通?这是因为跨网段需要路由,而交换机没有配置相关路由。解决方法:将 vip 配置成 server01...原创 2020-02-21 15:46:01 · 739 阅读 · 0 评论 -
keepalived源码解析 —— master 是如何实现定时发送 vrrp 通告
1、vrrp 线程在创建 IPV4(224.0.0.18)或 IPV6(ff02::12) vrrp 组播接收 socket 后,首先会初始化 vrrp instances 超时时间,并根据超时时间将 vrrp->rb_sands 放入 rb tree 中。/* Thread functions */static voidvrrp_register_workers(list l){...原创 2020-02-13 22:24:44 · 1232 阅读 · 2 评论 -
keepalived源码解析 —— vrrp_dispatcher_read_timeout
当 vrrp socket 发生 读超时时,会调用函数:vrrp_dispatcher_read_timeout()。1、依据当前 master/back 状态,进行处理。若 back 发生读超时,则尝试将本端 vrrp 切换到 master;/* Handle dispatcher read timeout */static intvrrp_dispatcher_read_timeout...原创 2020-02-12 14:08:03 · 1155 阅读 · 0 评论 -
keepalived源码解析 —— socket 超时
vrrp 线程与 main() 主线程一致,首先会在 start_vrrp_child() 创建一个 master,然后在 launch_thread_scheduler() 中对 epoll 事件、双向链表进行循环监控。此外,vrrp 线程首先会将所有接收 socket,如 ipv4/ipv6 组播地址注册到 master->epoll_fd,回调函数:vrrp_read_dispatc...原创 2020-02-11 14:56:31 · 627 阅读 · 0 评论 -
keepalived源码解析 —— main()
1、入口函数/* keepalived/main.c */int main(int argc, char **argv){ return keepalived_main(argc, argv);}/* ./keepalived/core/main.c *//* Entry point */intkeepalived_main(int argc, char **argv){...原创 2020-02-10 14:25:36 · 1704 阅读 · 0 评论 -
keepalived源码解析 —— vrrp_send_adv()
vrrp_send_adv() 发送 vrrp 通告:1、构造 vrrp 通告消息,存储在 vrrp->send_buffer;2、使用 sendmsg,向 单播地址、IPV4 组播地址:224.0.0.18 或 IPV6 组播地址:ff02::12 发送 vrrp 通告。/* send VRRP advertisement */voidvrrp_send_adv(vrrp_t *...原创 2020-02-10 10:42:53 · 500 阅读 · 0 评论 -
keepalived源码解析 —— vrrp_state_leave_master()
/*master 切换到 back*/voidvrrp_state_leave_master(vrrp_t * vrrp, bool advF){#ifdef _WITH_LVS_ if (VRRP_VIP_ISSET(vrrp)) { /* Check if sync daemon handling is needed */ if (global_data->lvs_...原创 2020-02-08 18:48:45 · 466 阅读 · 0 评论 -
keepalived源码解析 —— vrrp_state_backup()
功能:1、分析收到的 vrrp 包。若包分析返回结果:VRRP_PACKET_OK,则直接返回 false;2、若未开启抢占模式(抢占模式只在 back 状态下有效) 或 对端 vrrp 优先级 >= 本端 vrrp 优先级,则将对端 vrrp address 与优先级标记为为 master address 与优先级,同时本端 vrrp 继续保持 back 状态;3、若开启了抢占模式...原创 2020-02-08 15:09:05 · 837 阅读 · 0 评论 -
keepalived源码解析 —— vrrp_state_master_rx()
功能:1、分析收到的 vrrp 包;2、若包分析返回结果:VRRP_PACKET_OK,则直接返回 false;3、若满足以下任一条件:1、master 收到一个 priority = 0 的通告;2、配置文件指定了:higher_prio_send_advert(若 master 收到一个更高优先级的 vrrp,则自身在变成 backup 之前发送一个通告)且 对端 vrrp 的优先...原创 2020-02-07 18:21:12 · 2650 阅读 · 0 评论 -
keepalived源码解析 —— vrrp_dispatcher_read()
vrrp 线程会不断调用 vrrp_dispatcher_read() 获取 vrrp 通告:1、调用 recvmsg(),获取 vrrp 通告;2、获取 vrrp 头;3、根据 vrrp 头中的 VRID,判断本端 vrrp 与 对端 vrrp 是否处于同一个虚拟路由;4、若两端不处于同一个虚拟路由下,则丢弃该通告;5、根据本端 vrrp 当前状态(master/back),对通告进行...原创 2020-02-07 18:16:38 · 585 阅读 · 0 评论 -
keepalived源码解析 —— start_vrrp()
/*启动 vrrp1、清除配置2、初始化全局对象 global_data3、创建 vrrp_data_t *vrrp4、读取配置文件5、创建 event(vrrp_dispatcher_init为回调函数),并添加至 master->event 所指向的双向链表中*/static voidstart_vrrp(data_t *prev_global_data){ /*...原创 2020-02-05 14:47:42 · 991 阅读 · 0 评论 -
keepalived源码解析 —— parser.c
1、strspn 与 strcspn:size_t strspn(const char *str1, const char *str2):查找 str1 中第一个不出现在 str2 的字符的下标。size_t strcspn(const char *s, const char * reject):从字符串 s 的第一个字符开始,计算连续多少个字符不在 reject 所指的字符串中。返回值:连续...原创 2020-02-04 19:54:43 · 832 阅读 · 0 评论 -
keepalived源码解析 —— alloc_global_data()
alloc_global_data() 用于初始化全局对象:struct data_t global_data。(global_data.c)其中,包括 set_default_mcast_group() 设置 vrrp 使用的IPV4(224.0.0.18)与 IPV6(ff02::12)组播地址。(global_data.c, data_t.vrrp_mcast_group4、data_t....原创 2020-02-03 15:59:00 · 409 阅读 · 0 评论 -
keepalived源码解析 —— start_vrrp_child()
/* 创建vrrp子进程,实现vrrp协议,负责keepalived主要的事件的调度。*/int start_vrrp_child(void){#ifndef _ONE_PROCESS_DEBUG_ pid_t pid; const char *syslog_ident; /* Initialize child process */#ifdef ENABLE_LOG_TO_FILE...原创 2020-02-03 15:37:17 · 1103 阅读 · 0 评论