5分钟教你看大神操作keepalived服务
第11章
高可用服务(keepalived)的配置
11.1 高可用服务的概念
11.1.1 高可用服务总体概念
- 为了解决单点故障
- 减轻服务器的压力
11.1.2 高可用keepalived的概念
- 为了管理lvs服务
- 由于lvs没有健康检查功能,keepalived可以进行健康检查
- keepalived路由冗余协议
11.1.3 路由冗余协议
- 利用vrrp协议进行相互之间的通信
- 利用vrrp协议进行主备竞选
- 发送组播包来告诉其他服务器我还正常的
- 发送的时候使用的明文发送
11.2
安装高可用服务(172.16.1.5,172.16.1.6)
[root@lb01 conf.d] # yum -y install keepalived
11.3 高可用服务的原理
11.3.1 图示讲解
11.3.2 文字讲解
11.4
编辑配置文件
11.4.1 主配置文件编辑(172.16.1.5)
[root@lb01 ~] # cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
router_id lb01 定义一个高可用的集群名称
}
}
vrrp_instance oldboy { 设置一个实例(可以说是创建一个家族)
state MASTER 指定这台服务器在家族的身份
interface eth0 指定vip地址出现在哪台服务器的网卡上
virtual_router_id 66 指定家族的标识
priority 150 指定服务器的优先级(优先级越高,越有可能是主服务器)
advert_int 1 主服务器发送组播包的间隔
authentication {
auth_type PASS
auth_pass 1234 指定认证密码信息
}
virtual_ipaddress {
10.0.0.3 指定vip地址信息
}
}
11.4.2 副配置文件编辑(172.16.1.6)
[root@lb02 ~] # cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
router_id lb02 定义一个高可用集群名称
}
}
vrrp_instance oldboy { 定义一个实例(家族)
state BACKUP 定义这台服务器在家族中的身份地位
interface eth0 定义vip出现哪个网卡上
virtual_router_id 66 家族的标识
priority 100 定义服务器的级别信息
advert_int 1 接收主服务器发送的组播信息间隔时间
authentication {
auth_type PASS
auth_pass 1234 定义指证密码信息
}
virtual_ipaddress {
10.0.0.3 定义vip地址信息
}
}
11.5
重启keepalived服务(172.16.1.5,6都需要)
systemctl restart keepalived.service
11.6
测试是否搭建成功
11.6.1 将主服务器的高可用服务停止
[root@lb01 ~] # systemctl stop keepalived.service
11.6.2 在其他高可用服务器上查看vip地址是否已经切换成功
[root@lb02 ~] # ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:35:bd:57 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.6/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 10.0.0.3/32 scope global eth0 切换成功
valid_lft forever preferred_lft forever
inet6 fe80::69eb:971b:2ae0:23cc/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
11.7
高可用服务企业常见的问题说明
11.7.1 脑裂问题
11.7.1.1 啥叫脑裂问题
简单的说就是其他服务器在主服务器正常的时候出现了vip地址信息
11.7.1.2 脑裂问题出现的原因
11.7.1.2.1 物理原因
- 主和其他服务器连接的网线不通了,导致接收不到主发送的组播信息
- 去往其他服务器的防火墙可能已经打开了,导致主服务器发送的信息不能正常的发送给其他服务器
11.7.1.2.2 逻辑原因
服务器的配置出现了问题
11.7.1.3 脑裂问题出现怎么解决
- 写脚本进行监控,当出现了脑裂问题就进行发送邮件来进行解决
11.7.1.3.1 脚本的编写
- 判断其他服务器是不是出现了vip地址信息
ip a s eth0 | grep -c "10.0.0.3" !=0 && 就进行发送邮件给运维人员
- 开始编写(在其他服务器使用定时任务+脚本)
[root@lb02 scripts] # vim monitor_vip.sh
#!/bin/bash
VIP_COUNT=`ip a s eth0 | grep -c "10.0.0.3"` 验证vip地址是否存在
if [ "$VIP_COUNT" != 0 ]
then
echo "check vip addr" | mail -s "move vip" 460523471@qq.com 发送邮件信息
fi
11.7.2 实现监控nginx的服务状态进行主备切换
11.7.2.1 在主服务器上面进行监控
11.7.2.1.1 在主服务器上编写监控脚本
- 思路:nginx服务停止以后,就将keepalived服务也给停止掉
netstat -anptu | grep -c nginx ==0 && systemctl stop keepalived
- 脚本开始编写
[root@lb01 scripts] # vim monitor_nginx.sh
#!/bin/bash
count_nginx=`netstat -anptu | grep -c nginx` 判断nginx进程有几行
if [ "$count_nginx" == 0 ] 行,则将keepalived服务停止
then
systemctl stop keepalived
else
exit 0
fi
[root@lb01 scripts] # sh -x monitor_nginx.sh 脚本执行过程
++ grep -c nginx
++ netstat -anptu
+ count_nginx=0
+ '[' 0 == 0 ']'
+ systemctl stop keepalived
[root@lb01 scripts] # systemctl is-active keepalived.service 发现keepalived服务已经停止
inactive
[root@lb01 scripts] #
- 实时监控,一旦nginx挂了,立马将keepalived服务停止
- 使用while死循环做
[root@lb01 scripts] # vim monitor_nginx.sh
#!/bin/bash
count_nginx=`netstat -anptu | grep -c nginx`
when true 当为真的时候,进行下面的查看
do
if [ "$count_nginx" == 0 ]
then
systemctl stop keepalived
fi
sleep 1; 秒进行一次循环判断
done
- 使用主配置文件进行编辑(确认你的脚本有执行权限)
[root@lb01 scripts] # vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
router_id lb01
}
}
vrrp_script check_web { 设置脚本的项目名称
script "/server/scripts/monitor_nginx.sh" 指定你要监控的脚本
interval 2 秒进行一次监控
#weight 2
}
vrrp_instance oldboy {
state MASTER
interface eth0
virtual_router_id 66
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
10.0.0.3
}
track_script { 调用上面的项目名称信息函数
check_web
}
}
11.7.2.2 在其他服务器上面进行监控
11.7.2.2.1 使用权重值来进行vip地址的切换
- 使用停止keepalived的方式虽然可以成功,但是是一次性的,可能nginx恢复以后,keepalived不会进行恢复,为了解决这个问题,我们可以使用权重值来进行解决
- 权重值的概念
- 权重值为正数的时候
- 返回为0的时候,实际值为权重值+默认优先级,权重值会进行增加操作
- 返回为非0的时候,实际值等于默认优先级
- 权重值为负数的时候
- 返回为0的时候,实际值等于默认优先级
- 返回为非0的时候,实际值等于默认优先级+权重值
- 编写脚本
- 判断你访问的网站是不是200,如果是返回为真,如果不是返回为假
- 使用curl -I -w "%{http_code}\n" -o /dev/null -s www.oldboy.com
- 具体编写
[root@lb02 scripts] # vim monitor_nginx.sh
#!/bin/bash
code_info="$(curl -I -w "%{http_code}\n" -o /dev/null -s www.oldboy.com)"
if [ $code_info -ne 200 ]
then
exit 0
else
exit 1
fi
[root@lb02 scripts] # vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
router_id lb02
}
}
vrrp_script check_web {
script "/server/scripts/monitor_nginx.sh"
interval 2
weight 60
}
vrrp_instance oldboy {
state BACKUP
interface eth0
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
10.0.0.3
}
track_script {
check_web
}
}
5分钟教你看大神操作keepalived服务的更多相关文章
- JavaScript的运行机制!!!很重要很重要!!!!!!请看大神操作!
https://juejin.im/post/59e85eebf265da430d571f89
- ScrollView嵌套ListView的滑动冲突问题,是看大神的方法的,作为学习以后用的到
在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollView嵌套ListView结 ...
- 10分钟教你Python+MySQL数据库操作
欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 本文介绍如何利用python来对MySQL数据库进行操作,本文将主要从以下几个方面展开介绍: 1.数据库介绍 2.MySQL数据库安装和设置 ...
- 日常推荐大神操作,如何再oracle中delete数据后恢复
http://blog.csdn.net/wangdinghai365/article/details/8593869
- 【leetcode】Wildcard Matching(hard) ★ 大神太牛了
Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...
- PS大神的作品,每张都是科幻大片!
相信大家在网上一定见过 各种PS的作品 但是要想成为“PS大神”, 不仅仅要会P图, 最关键的就是脑洞! 同样的马路破坏效果 在大神操作后变成了大片! 摩托车换成了骏马 这效果果然不一般! 这个绝对牛 ...
- 7天教你精通变大神,学CAD关键还要掌握方法,纯干货新手要看
接触CAD初期是“痛苦”的,“煎熬”的,也是充满“成就”的. 痛苦是初学者怎么都不懂,需要学习的东西很多,整个过程是有些痛苦的. 煎熬也是每个求学阶段都会遇到的状态,眼睛会了,手不会,这个状态很难受. ...
- JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力。。
JS高级群的日常!写一个从10到0的倒计时,用console.log打印,不可以用 setInterval!本来说好的研究avalonJS最后演变成了看着大神在那边互相比拼实力.. 小森执行一 ...
- C语言简单实现链栈基本几个功能(适合新手看,大神可指正)
接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...
随机推荐
- 【Flume】Flume基础之安装与使用
1.Flume简介 (1) Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集.聚集.移动的服务,Flume只能在Unix环境下运行. (2) Flume基于流式架构,容错性强, ...
- ndk编译出来的executable动态库入口函数的参数错乱
早些时间用ndk编译带main入口函数的动态库,测试可运行.今天要作它用时,发现在这个入口函数并没有传入正确的参数. hello.cpp有main函数,用ndk分别编译成可执行文件和动态库文件,使两者 ...
- pdf 在线预览之 vue-pdf插件
vue-pdf 支持到ie11npm安装:npm install --save vue-pdf 组件template: <div class="show-pdf"> ...
- 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人
蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...
- JavaScript笔记六
1.对象(Object) - 对象是JS中的引用数据类型 - 对象是一种复合数据类型,在对象中可以保存多个不同数据类型的属性 - 使用typeof检查一个对象时,会返回object - 创建对象 - ...
- linux字符集修改
首先介绍一下变量. 1.变量类型:本地变量.环境变量.局部变量.特殊变量(内置).参数变量.只读变量. 2.bash的配置文件:profile类和bashrc类 profile类:为交互式登录的she ...
- linux bash编程之算数运算和测试类型(第二篇)
写在最前边:在bash中数据类型有两种,分别是数值型和字符型.其中字符型是默认的. 1.算数运算 · 运算符 · 语法 1.1.运算符:+.-.*./.%.** 注意:有些时候 *(乘号)需要转义 1 ...
- 附011.Kubernetes-DNS及搭建
一 Kubernetes DNS介绍 1.1 Kubernetes DNS发展 作为服务发现机制的基本功能,在集群内需要能够通过服务名对服务进行访问,因此需要一个集群范围内的DNS服务来完成从服务名到 ...
- Java 理论与实践: 处理 InterruptedException【转】
这样的情景您也许并不陌生:您在编写一个测试程序,程序需要暂停一段时间,于是调用Thread.sleep().但是编译器或 IDE 报错说没有处理检查到的InterruptedException.Int ...
- telnet指令研究—以网络聊天程序为例
一.telnet指令 Telnet取名自Telecommunications和Networks的联合缩写,是早期个人计算机上连接到服务器主机的一个网络指令,由于存在安全问题,现在已经很少被使用.在wi ...