keepalived高可用集群学习以及实验总结
HA Cluster实现方案:
vrrp协议的实现
keepalived
ais: 完备HA集群
RHCS(cman)
heartbeat
corosync + pacemaker :corosync是集群框架引擎程序,pacemaker是集群资源管理器,crmsh是pacemaker命令行管理工具
stonish : shooting the other node in the header 节点爆头,比如硬件设备方面的电源交换机,代理调度器节点都可以向其发送信号切断故障一方的电源,从而使得明确退出服务,而不会因判定失误导致竞争,导致集群崩溃
keepalived : HA集群软件实现,为 ipvs 而生
vrrp协议:Virtual Redundant Routing Protocol术语:虚拟路由器: Virtual Router虚拟路由器标识:VRID(0-255)物理路由器:master : 主设备backup: 备用设备priority : 优先级VIP :Virtual IPVMAC : Virtual MACGraciousARP通告:心跳,优先级等; 周期性;抢占式,非抢占式;安全工作:认证:无认证、简单字符认证、MD5工作模式:主/备:单虚拟路径器;主/主 :主/备(虚拟路径器1) , 备/主(虚拟路径器2)
keealived:
vrrp协议的软件实现,原生设计的目的为了高可用ipvs服务
基于vrrp协议完成地址流动;
为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
为ipvs集群的各个RS做健康状态监测:
基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事物;
组件:核心组件:vrrp stackcheckersipvs wrapper控制组件:配置文件分析器IO复用器内存管理组件HA Cluster的配置前提:(1)各个节点时间必须同步:ntp, chrony :注意使用vim /etc/chrony.conf,可以比ntpdate时间精度更好,并且时效更快 systemctl restart chronyd.service(2) 确保iptables以及selinux不会成为阻碍;(3) 各个节点之间可通过主机名互相通信(对KA并非必须)建议使用/etc/hosts文件实现; ip node1.com node1...;exec bash --> 重新启动一个bash进程取代之前的进程,从而实现环境配置文件重新加载生效;(4) 确保各个节点的用于集群服务的接口支持MULTICAST通信; D类IP 224-239;(5) 各个集群节点之间ssh基于key登陆实现 ssh-keygen -t rsa -N '';ssh-copy-id -i .ssh/id_rsa_pub root@localhost(本机拷贝后实现自己连自己也不需要密码), scp -rp .ssh/ user@remotename:root/
keepalived安装配置:
centos7.4 随base仓库提供:
程序环境:主配置文件: /etc/keepalived/keepalived.conf主程序文件: /usr/sbin/keepalivedUnit File : keepalived.serviceUnit File的环境配置文件: /etc/sysconfig/keepalived配置文件组件部分:TOP HIERACHYGLOBAL CONFIGURATIONGlobal definitionsStatic routes/addressVRRPD CONFIGURATIONvrrp synchronization group(s) :vrrp 同步组vrrp instance(s) : 每个vrrp instance即一个vrrp路由器;LVS CONFIGURATIONVirtual server groupVirtual server :ipvs集群的vs和rs;单主配置示例:!Configuration File for keepalivedglobal_defs {notification_email {root@localhost}notification_emali from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id node1vrrp_mcast_group4 224.0.100.19}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 14priority 98advert_int 1authentication {auth_type PASSauth_pass 2525fs}virtual_ipaddress {172.18.0.100/16 dev ens33# 172.18.0.101/16 dev ens33 label ens33:1}track_interface {ens33ens34}}配置要监控的网络接口,一旦接口出现故障,则转为FAULT状态;nopreempt: 定义工作模式为 非抢占式模式;preempt_delay 300 :抢占式模式下,节点上线后触发新选举操作的延迟时长;定义通知脚本:notify_master <STRING> 传递的参数字符;当前节点成为主节点时触发的脚本;notify_backup <STRING> :当前节点转为备用节点时触发的脚本;notify_fault <STRING> : 当前节点转为失败状态时触发脚本;notify <STRING> :通用格式的通知触发机制,一个脚本可以完成以上三种状态的转换时的通知;双主模型示例:! Configuration File for keepalivedglobal_defs {notification_email {root@localhost}notification_email_from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id node1vrrp_mcast_group4 224.0.100.19 :使用ipv4地址组播,如一主多备模式,通告检测心跳线检测,一个vrrp虚拟路由器所在网络中的集群中,有可能只有少数服务器是负载均衡集群服务器,使用特定的组播地址可以使得心跳线检测时广播指定组中的集群服务器,从而不影响其他主机}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 11priority 100adver_int 1authentication {auth_type PASSauth_pass 4234sdf}virtual_ipaddress {172.18.0.100/16 dev ens33}}vrrp_instance VI_2 {state BACKUPinterface ens33virtual_router_id 12priority_router_id 98advert_int 1authentication {auth_type PASSauth_pass sg1234}virtual_ipaddress {172.18.0.101/16 dev ens33 label ens33:0}notify_master "/etc/keepalived/notify.sh master"notify_backup "/etc/keepalived/notify.sh backup"notify_fault "/etc/keepalived/notify.sh fault"}通知脚本的使用方式:示例通知脚本:#/bin/bash#contact='root@localhost'notify() {local mailsubject="$(hostname) to be $1,vip floating"local mailbody="$(date + '%F %T')" : vrrp transiton, $(hostname) changed to be $1echo "$mailbody" | mail -s "$mailsubject" $contact}case $1 in master)notify master;;backup)notify backupsystemctl restart nginx #借助/etc/keepalived/notify.sh监控状态检测脚本当检测当前高可用节点为backup状态时,执行简单重启修复操作;;fault)notify fault ;;*)echo "Usage: $(basename $0) {master|backup|fault}"exit 1;;esac脚本调用方法:notify_master "/etc/keepalived/notify.sh master"notify_backup "/etc/keepalived/notify.sh backup"notify_fault "/etc/keepalived/notify.sh fault"高可用的ipvs集群示例:! Configuration File for keepalivedglobal_defs {notification_email {root@localhost}notification_email_from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id node1vrrp_mcast_group4 224.0.100.19}vrrp_instance VI_1 {state MASTERinterface eno16777736virtual_router_id 14priority 100advert_int 1authentication {auth_type PASSauth_pass 571f97b2}virtual_ipaddress {10.1.0.93/16 dev eno16777736}notify_master "/etc/keepalived/notify.sh master"notify_backup "/etc/keepalived/notify.sh backup"notify_fault "/etc/keepalived/notify.sh fault"}
*虚拟服务器配置
virtual_server 172.18.0.100 80 {
delay_loop 3
lb_algo rr
lb_kind DR
protocol TCP
sorry_server 127.0.0.1 80real_server 10.1.0.69 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 1nb_get_retry 3delay_before_retry 1}}}可单独定义块 TCP_CHECK {nb_get_retry 3delay_before_retry 2connect_timeout 3} keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先级的动态调整:分两步: (1) 先定义一个脚本;(2) 调用此脚本;vrrp_script chk_down{script "killall -0 nginx && exit 0 || exit1"interval 1weight -5 *脚本监测健康状态失败则priority减5降级fall 2rise 1}
自我实验与总结:
Nginx + Keepalived 搭建高可用负载均衡集群
1.环境规划:
主机: Ip地址 http端口
nginx_master 172.18.252.221 ; 16915、16916nginx_slave 172.18.252.222tomcat_server_1 172.18.252.223tomcat_server_2 172.18.252.224tomcat_server_3 172.18.252.225nginx_master VIP : 172.18.252.2301.操作系统版本:CentOS6.5 x86_642.内核版本 :2.6.32-504.el6.x86_643.nginx版本 : nginx-1.8.0-1.el6.ngx.x86_644.keepalived版本 :keepalived-1.2.19前端双nginx+keepalived,nginx反向代理到后端tomcat集群实现负载均衡,keepalived实现集群高可用,主nginx故障后虚拟IP自动漂移到备用nginx服务器后端tomcat每个主机都开启两个端口提供业务:16915,16916二、安装前端两台主机分别安装nginx和keepalived1) 编译安装keepalived#安装依赖yum install kernel-* gcc make openssl-*#下载keepalived-1.2.19.tar.gzwget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz#解压tar xvzf keepalived-1.2.19.tar.gzcd keepalived-1.2.19#配置./configure --sysconfdir=/etc --with-kernel-dir=--with-kernel-dir=/usr/src/kernels/2.6.32-504.el6.x86_64#编译并安装make -j 2 && make install#查看keepalived版本,验证安装成功keepalived -v #设置开机自启动chkconfig keepalived on2)RPM包安装nginx官方nginx yum 源:/etc/yum.repos.d/nginx.repo[nginx]name=nginx_repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/enabled=1gpgcheck=0yum源设置好后直接安装即可:yum -y install nginxchkconfig nginx on三、配置1)前端两台主机nginx的配置完全一样#vim /etc/nginx/conf.d/upstream.confupstream tomcatclu_16915 {server 172.18.252.223:16915;server 172.18.252.224:16915;server 172.18.252.225:16915;hash $remote_addr consistent;}upstream tomcatclu_16916 {server 172.18.252.223:16916;server 172.18.252.224:16916;server 172.18.252.225:16916;hash $remote_addr consistent;}#vim /etc/nginx/conf.d/server.confserver {listen 16915;server_name www.magedu.com;location / {proxy_pass http://tomcatclu_16915;}location /nginx_status {stub_status on;access_log off;allow 127.0.0.1;#要允许公司ip访问nginx statusallow 192.168.252.0/24;deny all;}}server {listen 16916;server_name www.magedu.com;location / {proxy_pass http://tomcatclu_16915;}location /nginx_status {stub_status on;access_log off;allow 127.0.0.1;#要允许公司Ip访问nginx statusallow 192.168.252.0/24;deny all;}}2)nginx_master的keepalived的配置root@nginx_master ~]# vim /etc/keepalived/keepalived.conf !Configuration File for keepalivedglobal_defs {router_id nginx-ha1}vrrp_script check_nginx {#检查nginx状态的脚本,文章后面给出script "/data/script/check_nginx.sh"#执行间隔2秒interval 2}vrrp_instance VI_1 {state MASTERinterface eth0#同一keepalived集群的virtual_router_id必须相同,默认51virtual_router_id 55priority 100advert_int 1#不抢占:如果集群里已存在MASTER状态的主机,即使优先级高于MASTER也不抢占为MASTER,只在优先级高的主机上设置即可authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {#虚拟IP172.18.252.230/16}track_script {check_nginx}track_interface {eth0eth1}}3)nginx_slave的keepalived配置
[root@nginx_slave ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id nginx-ha2
}
vrrp_script check_nginx {
script "/data/script/check_nginx.sh"
interval 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 55
#备的优先级低
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.18.252.230/16
}
track_script {
check_nginx
}
track_interface {
eth0
eth1
}
}
4)防火墙设置#iptables放行组播地址流量:iptables -I INPUT -d 224.0.0.18 -j ACCEPTserver iptables saveVRRP报文是通过IP多播的形式发送的,组播地址224.0.0.18是VRRP报文的目的地址。5)部署nginx状态检查脚本check_nginx.sh/data/script/check_nginx.sh检查脚本内容如下:#!/bin/bash#check nginx server status##nginx http 端口PORTS="16915 16916"functions check_ports {for port in $PORTS;donc -z 127.0.0.1 $port |grep -q succeeded[ "${PIPESTATUS[1]}" -eq 0 ] && mark=${mark}1done#如果mark值为空说明两个端口都不通#如果mark等于1,说明有一个端口是通的#如果mark等于11,说明两个端口都是通的echo $mark}ret1=$(check_ports)#如果nginx端口不通,会尝试重启一次nginxif [ "$ret1" !="11" ];then/sbin/service nginx stop /sbin/service nginx startsleep 1ret2=$(check_ports)#如果还是有端口不通,表示nginx服务不正常,则停掉keepalived,使VIP发生切换[ "$ret2" != 11 ] && /etc/init.d/keepalived stopfichmod +x /data/script/check_nginx.sh补充说明:如果nginx恢复正常后,keepalived不能自动启动,需要编写一个脚本完成这项工作拉起keepalived.脚本放到cron里每分钟执行。6)开启keepalived的日志:编辑/etc/sysconfig/keepalived:KEEPALIVED_OPTIONS="-D -d -S 0"编辑/etc/rsyslog.conf:#配置文件最后面加上下面一行local0.* /var/log/keepalived.log重启rsyslog:service rsyslog restart按上面配置后,keepalived会把日志记录到/var/log/keepalived.log7)启动服务#先检查nginx配置文件正确性nginx -t#启动nginx服务service nginx start#同时启动keepalived服务service keepalived start#过一会查看虚拟ip是否在nginx_master主机上ip a l四、验证停掉主节点上的keepalived服务或者重启系统,同时不断的Ping虚拟IP,经过一个请求超时间隔,虚拟IP自动漂移到了从节点上
转载于:https://blog.51cto.com/12947626/2124991
keepalived高可用集群学习以及实验总结相关推荐
- keepalived高可用集群实战项目
keepalived高可用集群实战项目 需要准备17台虚拟机 目录 客户端 路由器 powerDNS 防火墙 时间同步服务器 keepalived + LVS集群实现web服务高可用 配置web_A与 ...
- Web服务器群集——LVS-DR+Keepalived高可用集群
LVS-DR+Keepalived高可用集群 什么是高可用集群? 高可用集群的衡量标准 自动切换/故障转移(FailOver) 自动侦测 脑裂 常见解决方案 Keepalived Keepalived ...
- Nginx+Keepalived高可用集群应用实践
Nginx+Keepalived高可用集群应用实践 1.Keepalived高可用软件 1.1 Keepalived服务的三个重要功能 1.1.1管理LVS负载均衡软件 早期的LVS软件,需要通过命令 ...
- Web服务器群集——LVS-DR+Keepalived 高可用集群
LVS-DR+Keepalived 高可用集群 Keepalived介绍 Keepalived实现原理 LVS-DR-Keepalived部署 搭建lvs-dr模式集群 配置lvs服务器 配置真实服务 ...
- keepalived高可用集群技术介绍及实战演练
一.Keepalived是什么 Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务 ...
- Keepalived高可用集群来实现web服务器负载均衡集群
Keepalived高可用集群来实现web服务器负载均衡集群 一.Keepalived的介绍 Keepalived是一个提供HA重要的底层工具,最早期的作用是为ipvs提供HA功能的,还是一个可以提供 ...
- keepalived vip mysql_mysql+keepalived高可用集群
mysql+keepalived高可用集群 我们了解在LVS集群当中,LVS是整个机群的唯一入口!如果LVS出现故障的话,那么整个集群都将无法访问!像这种重要的服务器只有一台服务器在工作的情况,如果出 ...
- Haproxy+keepalived高可用集群实战
前言 随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS.Haproxy.Nginx等,各方面性能不亚于硬件负载均衡F5,Haproxy提供高可用性.负载均衡以及基于TCP ...
- Keepalived 高可用集群的使用
Keepalived 高可用集群的使用 Keepalived 高可用集群的使用 Keepalived介绍 Keepalived 服务的三个重要功能 Keepalived 高可用故障切换转移原理(重点) ...
最新文章
- 领域驱动设计门槛很高,没有深厚的面向对象编码能力很难实践成功
- jQuery事件的链式写法
- MapReduce基础开发之九JDBC连接Hive
- CIO实施精细化管理的五个要点
- 为什么Kubernetes要引入pod的概念,而不直接操作Docker容器
- 无处不在的container_of
- java toast_Android中Toast的用法简介
- github搜索技巧_和逛知乎、刷微博一样高效使用 GitHub
- 未预期的符号 `( 附近有语法错误_苹果iOS 14.2现在提供117种新的表情符号和新的壁纸...
- linux下下载fnl数据,NCEP再分析资料FNL数据在windows平台用cygwin批量下载方法
- 区块链:一场始料未及的革命
- win7连接共享打印机时安装驱动程序出现0x00000bcb错误
- 计算机绘图软件应用于哪些领域,计算机绘图软件在环境艺术设计中的运用
- php 万能密码,万能密码漏洞利用
- P58-前端基础HTML-表格入门介绍
- 计算机科学技术学院迎新晚会主题,我校计算机科学与技术学院举行迎新晚会
- 费用报销的一些管理软件怎么选?
- 如何在iOS 6 时代的App Store中推广
- 网页浏览速度慢的排查原因
- 电池电量与电压的关系
热门文章
- MC新手入门(三十)------ 逻辑运算符和表达式
- NetAdvangate Infragisticss 控件在工程移动到别的机器上,引用失效问题
- 使用ActionScript实现滤镜效果
- Firefox下强制页面缓存失效的设置方法
- 体验AJAX Toolkit新控件:AutoCompleteExtender
- Vuex状态管理方式
- 异常在哪一层处理_WiFi速度慢,信号不稳定,除了重启路由器外,自己能怎么处理?...
- img 错误样式css,css设置图片大小_css 控制img图片的大小样式
- nagios mysql 监控_nagios监控mysql
- HTML5的little,HTML 5