IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 教你掌握 LVS + Keepalived 高可用群集 -> 正文阅读

[系统运维]教你掌握 LVS + Keepalived 高可用群集

目录

Keepalive

Keepalive基础

vrrp技术

VRRP相关技术

keepalived介绍

Keepalived 架构

Keepalived 相关文件

配置组成

单播多播地址

通知脚本

日志功能

LVS+Keepalived 高可用群集的搭建

配置负载调度器(主:192.168.241.129)?

配置负载调度器(备:192.168.241.129)

配置节点服务器 web1(192.168.241.133)

?配置节点服务器 web2(192.168.241.136)

当前使用的为主DR服务器测试

断开主DR服务器的Keepalived测试

在客户段测试


Keepalive

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

keepalived 软件

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。

注:Linux服务器集群系统–LVS Linux虚拟服务器(LinuxVirtual Server)

一提到高可用就想到keepalive,Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

Keepalive基础


vrrp技术

VRRP?相关术语

  • 虚拟路由器:Virtual Router

  • 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器

  • VIP:Virtual IP

  • VMAC:Virutal MAC (00-00-5e-00-01-VRID)

  • 物理路由器:

  • master:主设备

  • backup:备用设备

  • priority:优先级


VRRP相关技术

通告:心跳,优先级等;周期性

工作方式:抢占式,非抢占式,延迟抢占模式,

安全认证:

  • 无认证
  • 简单字符认证:预共享密钥
  • MD5

工作模式:

  • 主/备:单虚拟路径器
  • 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
#通告:
是宣告自己的主权,不要妄想抢班夺权,不停的向外

#抢占式:
主服务器宕机,过了一段时间修好了,再把主权抢过来

#非抢占式:
主服务器宕机,过了一段时间修好了,原来的主就作为备了

#抢占式好还是非抢占式好?

#安全认证:
如没有安全认证,不在集群中的keeplive服务器设置超高的优先级,会造成事故

#主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)见下图:
环境:
有两台服务器
虚拟出两台虚拟路由器
第一台虚拟路由器中服务器1为主,服务器2为备,那么虚拟IP1就飘在服务器1上,真正工作的只有服务器1
第二台虚拟路由器中服务器2为主,服务器1为备,那么虚拟IP2就飘在服务器2上,真正工作的只有服务器2
优点:
#提高了资源利用率:
这样主,备服务器同时干活,可以同时运行两个项目
#同样有备份功能:
如果服务器1坏了,服务器2 将同时拥有虚拟IP1和虚拟IP2


缺点:
虽然有备份冗余功能但是对机器的性能要求非常高,当其中一台出现故障,本来一台运行一个任务,现在所有的业务全部压在了一台上,有十分大的风险

keepalived介绍

官网:http://keepalived.org/

功能:

  • 基于vrrp协议完成地址流动
  • 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
  • 为ipvs集群的各RS做健康状态检测
  • 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务


Keepalived 架构

官方文档:

https://keepalived.org/doc/
http://keepalived.org/documentation.html

  • 用户空间核心组件:
  1. vrrp stack:VIP消息通告

  2. checkers:监测real server(简单来说 就是监控后端真实服务器的服务)

  3. system call:实现 vrrp 协议状态转换时调用脚本的功能

  4. SMTP:邮件组件(报警邮件)

  5. IPVS wrapper:生成IPVS规则(直接生成ipvsadm)

  6. Netlink Reflector:网络接口(将虚拟地址ip(vip)地址飘动)

WatchDog:监控进程(整个架构是否有问题)

  • 控制组件:提供keepalived.conf 的解析器,完成Keepalived配置
  • IO复用器:针对网络目的而优化的自己的线程抽象
  • 内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限
keeplive可以配合ngnix等软件,反向代理


Keepalived 相关文件

  • 软件包名:keepalived
  • 主程序文件:/usr/sbin/keepalived
  • 主配置文件:/etc/keepalived/keepalived.conf
  • 配置文件示例:/usr/share/doc/keepalived/
  • Unit File:/lib/systemd/system/keepalived.service
  • Unit File的环境配置文件:
  • /etc/sysconfig/keepalived CentOS


配置组成

/etc/keepalived/keepalived.conf 配置组成

  • GLOBAL CONFIGURATION

Global definitions(全局配置):定义邮件配置,route_id,vrrp配置,多播地址等

  • VRRP CONFIGURATION

VRRP instance(s):定义vrrp协议中的每个vrrp虚拟路由器的规则,基本信息

  • LVS CONFIGURATION(lvs调度服务器的规则设置)

Virtual server group(s)

Virtual server(s):LVS集群的VS和RS

单播多播地址

修改多播

#两边都要加主从

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_R1
   vrrp_mcast_group4 234.6.6.6
   #添加此行
}
[root@localhost ~]# tcpdump -i ens33 -nn host 234.6.6.6
#抓包查看查看
[root@localhost keepalived]#systemctl stop keepalived.service
#模拟故障,可以正常切换

修改单播

#在所有节点vrrp_instance语句块中设置对方主机的IP,建议设置为专用于对应心跳线网络的地址,而非
使用业务网络
unicast_src_ip <IPADDR>  #指定发送单播的源IP
unicast_peer {
   <IPADDR>     #指定接收单播的对方目标主机IP
   ......
}

#主服务器
vrrp_instance VI_1 {
   state BACKUP
   interface eth0
   virtual_router_id 66
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 123456
   }
   virtual_ipaddress {
        10.0.0.10/24 dev eth0 label eth0:1
   }
   unicast_src_ip 192.168.91.100     #本机IP
   unicast_peer{
   192.168.91.101 #指向对方主机IP 如果有多个keepalived,再下面加其它节点的IP
   }
}
#复制段
unicast_src_ip 192.168.91.100     
   unicast_peer{
   192.168.91.101
 }

unicast_src_ip 192.168.91.101     
   unicast_peer{
   192.168.91.100
   192.168.91.188
   
 }
 
[root@localhost ~]#tcpdump -i ens33 host -nn 192.168.91.100
#在从节点抓包验证


通知脚本

[root@localhost opt]#vim /etc/mail.rc 
set from=2830505752@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=2830505752@qq.com
set smtp-auth-password=
[root@localhost opt]#vim keepalive.sh 
#!/bin/bash
#
contact='940132245@qq.com'
notify() {
 mailsubject="$(hostname) to be $1, vip floating"
 mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
 echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
 notify master
 ;;
backup)
 notify backup
 ;;
fault)
 notify fault
 ;;
*)
 echo "Usage: $(basename $0) {master|backup|fault}"
 exit 1
 ;;
esac

[root@localhost opt]#vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    preempt_delay 30
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.91.16
    }
   notify_master "/opt/keepalive.sh master"
   notify_backup "/opt/keepalive.sh backup"
   notify_fault "/opt/keepalive.sh fault"
}
#模拟master故障
[root@ka1-centos7 ~]#killall keepalived


日志功能

开启单独日志功能

[root@localhost opt]#keepalived --help
#查看帮助
[root@localhost opt]#ps aux |grep keep
root      25326  0.0  0.0 118616  1372 ?        Ss   11月20   0:00 /usr/sbin/keepalived -D
root      25327  0.0  0.1 127480  3336 ?        S    11月20   0:01 /usr/sbin/keepalived -D
root      25328  0.0  0.1 129500  2852 ?        S    11月20   0:01 /usr/sbin/keepalived -D
root      26877  0.0  0.0 112676   980 pts/0    S+   00:37   0:00 grep --color=auto keep
[root@localhost opt]#vim /lib/systemd/system/keepalived.service 
EnvironmentFile=-/etc/sysconfig/keepalived
ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS
[root@localhost opt]#vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"

[root@localhost opt]#vim /etc/rsyslog.conf 
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
local6.*                                                /var/log/keepalived.log

[root@localhost opt]#systemctl restart keepalived.service rsyslog.service 

LVS+Keepalived 高可用群集的搭建

主DR 服务器:192.168.241.128
备DR 服务器:192.168.241.129
Web 服务器1:192.168.241.133
Web 服务器2:192.168.241.136


配置负载调度器(主:192.168.241.129)
?

配置Keepalived master服务器?

1. #关闭防火墙
systemctl stop firewalld.service
setenforce 0
?
2. #安装服务
yum -y install ipvsadm keepalive

3. #修改配置文件keeplived.conf
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
?
......
global_defs {?? ??? ??? ??? ??? ??? ?#定义全局参数
--10行--修改,邮件服务指向本地
?? ?smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
?? ?router_id LVS_01
}
?
vrrp_instance VI_1 {?? ??? ??? ??? ?#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
? ? state MASTER
--21行--修改,指定承载vip地址的物理接口
? ? interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致?? ?
? ? virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
? ? priority 100
? ? advert_int 1?? ??? ??? ??? ??? ?#通告间隔秒数(心跳频率)
? ? authentication {?? ??? ??? ??? ?#定义认证信息,每个热备组保持一致
?? ??? ?auth_type PASS?? ??? ??? ??? ?#认证类型
--27行--修改,指定验证密码,主备服务器保持一致
? ? ? ? auth_pass 123123
? ? }
? ? virtual_ipaddress {?? ??? ??? ??? ?#指定群集vip地址
? ? ? ? 192.168.241.188
? ? }
}

?

--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.241.188 80 {
? ? delay_loop 6?? ??? ??? ??? ??? ?#健康检查的间隔时间(秒)
? ? lb_algo rr?? ??? ??? ??? ??? ??? ?#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
? ? lb_kind DR
? ? persistence_timeout 50?? ??? ??? ?#连接保持时间(秒)
? ? protocol TCP?? ??? ??? ??? ??? ?#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
? ? real_server 192.168.241.133 80 {
? ? ? ? weight 1?? ??? ??? ??? ??? ?#节点的权重
--45行--删除,添加以下健康检查方式?? ??? ?
? ? ? ? TCP_CHECK {
?? ??? ??? ?connect_port 80?? ??? ??? ?#添加检查的目标端口
?? ??? ??? ?connect_timeout 3?? ??? ?#添加连接超时(秒)
?? ??? ??? ?nb_get_retry 3?? ??? ??? ?#添加重试次数
?? ??? ??? ?delay_before_retry 3?? ?#添加重试间隔
?? ??? ?}
?? ?}
?
?? ?real_server 192.168.241.136 80 {?? ??? ?#添加第二个 Web节点的地址、端口
? ? ? ? weight 1
? ? ? ? TCP_CHECK {
?? ??? ??? ?connect_port 80
?? ??? ??? ?connect_timeout 3
?? ??? ??? ?nb_get_retry 3
?? ??? ??? ?delay_before_retry 3
?? ??? ?}
?? ?}
}
##删除后面的所有配置


?

4. #启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33?? ?


?

5. #调整proce响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
?
6. #刷新一下
sysctl -p


?
配置ipvsadm?

7. #配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
?
8.?
#清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.241.188:80 -s rr
ipvsadm -a -t 192.168.241.188:80 -r 192.168.241.133:80 -g
ipvsadm -a -t 192.168.241.188:80 -r 192.168.241.136:80 -g
?
9. #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm

配置负载调度器(备:192.168.241.129)

配置Keepalived master服务器

1. #关闭防火墙
systemctl stop firewalld.service
setenforce 0
 
2. #安装服务
yum -y install ipvsadm keepalived
 
3. #修改配置文件keeplived.conf
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
 
......
global_defs {						#定义全局参数
--10行--修改,邮件服务指向本地
	smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
	router_id LVS_02
}
 
vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state BACKUP
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	
    virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
    priority 99
    advert_int 1					#通告间隔秒数(心跳频率)
    authentication {				#定义认证信息,每个热备组保持一致
		auth_type PASS				#认证类型
--27行--修改,指定验证密码,主备服务器保持一致
        auth_pass 123123
    }
    virtual_ipaddress {				#指定群集vip地址
        192.168.241.188
    }
}

?


--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.241.188 80 {
    delay_loop 6					#健康检查的间隔时间(秒)
    lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 50			#连接保持时间(秒)
    protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 192.168.241.133 80 {
        weight 1					#节点的权重
--45行--删除,添加以下健康检查方式		
        TCP_CHECK {
			connect_port 80			#添加检查的目标端口
			connect_timeout 3		#添加连接超时(秒)
			nb_get_retry 3			#添加重试次数
			delay_before_retry 3	#添加重试间隔
		}
	}
 
	real_server 192.168.241.136 80 {		#添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {
			connect_port 80
			connect_timeout 3
			nb_get_retry 3
			delay_before_retry 3
		}
	}
}
##删除后面所有配置

4. #启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33	

5. #调整proce响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
 
6. #刷新一下
sysctl -p

?配置ipvsadm

7. #配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
 
8. 
#清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.241.188:80 -s rr
ipvsadm -a -t 192.168.241.188:80 -r 192.168.241.133:80 -g
ipvsadm -a -t 192.168.241.188:80 -r 192.168.241.136:80 -g
 
9. #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm

配置节点服务器 web1(192.168.241.133)

1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #安装并开启httpd服务
yum -y install httpd
systemctl start httpd
 
3. #配置站点文件
vim /var/www/html/index.html
this is wxddhc web!
 
4. #配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.241.188
NETMASK=255.255.255.255
 
5. #重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0

6. #设置路由
route add -host 192.168.241.188 dev lo:0
route -n

7. #调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
 
8. #刷新proc参数
sysctl -p

?配置节点服务器 web2(192.168.241.136)

1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #安装并开启httpd服务
yum -y install httpd
systemctl start httpd
 
3. #配置站点文件
vim /var/www/html/index.html
this is wxtnb web!
 
4. #配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.241.188
NETMASK=255.255.255.255
 
5. #重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0

6. #设置路由
route add -host 192.168.241.188 dev lo:0
route -n

7. #调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
 
8. #刷新proc参数
sysctl -p


当前使用的为主DR服务器测试

?备份服务器里面没有vip

断开主DR服务器的Keepalived测试

systemctl stop keepalived.service

?主服务器坏了之后 备份服务器立马顶上

在客户段测试

过一会刷新一下?

?

?到这就已经成功了

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章           查看所有文章
加:2021-11-24 08:22:22  更:2021-11-24 08:24:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:55:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码