keepalive热备

keepalive热备

keepalived做HA
By: Chenxin 20120627
1.说明
VRID 51
VIP 114.112.69.123
LB的IP : 114.112.69.114 master(150)
114.112.69.115 backup(100)
只需要配置全局和 VRRP配置。
设置为不抢占 (防二次切换 ),两台的 state均设置为backup 模式.(提供了 nopreempt配置参数, 该参数只能配置在 backup的模式上,故两台的state都是 backup才行)

2.安装
cd /opt
wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
yum install -y kernel-devel openssl.x86_64 openssl-devel.x86_64 popt-devel.x86_64
tar xzvf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure --prefix=/ --mandir=/usr/local/share/man --with-kernel-dir=/usr/src/kernels/2.6.32-220.23.1.el6.x86_64/
工程文件统计信息:
Keepalived configuration

Keepalived version : 1.2.2
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : No
IPVS sync daemon support : No
Use VRRP Framework : Yes
Use Debug flags : No

make
make install
示例配置文件 :/etc/keepalived/keepalived.conf (过于冗余 )
示例其他配置文件: ls /etc/keepalived/samples/
常见的keepalived选项: /etc/sysconfig/keepalived
默认启动文件放置到: /etc/init.d/keepalived (start|stop|restart|reload|status)

3.配置
ip add 查看网卡IP 信息(确定 VIP在哪台物理机上 )
1). Master / Slave(数字天空暂不采用此种方式 )
首先准备两台测试服务器和一个虚拟 IP。
Server A: 114.112.69.114 (主服务器)
Server B: 114.112.69.115
Virtual IP: 114.112.69.123
加配置文件
Server A:
vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface em1
virtual_router_id 51 # 保持主从服务器一致
priority 100 # 优先级 ( 主服务器较高)
advert_int 1 # 心跳广播间隔(秒)
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
114.112.69.123# 虚拟IP 地址,可以多个。
}
}
Server B:
vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface em1
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
114.112.69.123
}
}
注意:备份服务器 Server B 配置中 state 要改成 BACKUP,同时调低 priority。
启动两台服务器上的 keepalived 服务。
service keepalived start
以上配置,如果在 master突发故障恢复后,会产生 2次服务瞬间中断,即服务先从 114转移到 115,待 114恢复,服务又重新切回 114上。
可以通过service keepalived stop 或者是 ifdown em1来测试地址切回是否正常;

2).BACKUP/BACKUP模式(数字天空采用此种方式,降低故障率)
以下配置中,无论是 em1,还是 em2网卡出现故障,服务 (虚拟 IP)都会自动切换并驻留到热备服 B上去。直到热备服 B出现故障,才会将服务重新转移到已经恢复的主服 A上。
A机:
cat keepalived.conf
global_defs { # 可以在global_defs 下定义邮件通知功能
router_id hacopy1_shuzi
}
vrrp_instance VI_1 {
state BACKUP
nopreempt #设置为不抢占; 注意该参数只能在 BACKUP的state 上设置,且 priority必须比另外一台高
interface em1 #实例绑定的网卡
track_interface { # 设置额外的监控,内部的任何一块网卡出现问题 ,都会进入 FAULT状态 .
em1
em2
}
virtual_router_id 51 # 保持主从服务器一致 ,VRID的标记 (0..255)
priority 150 # 优先级 ( 主服务器较高,数值大的竞选为 master)
advert_int 1 # 心跳广播间隔(秒)
authentication { # 认证
auth_type PASS # 支持PASS 和AH
auth_pass css74..tfwwapmzi4r
}
virtual_ipaddress { # 指定漂移IP 地址,即VIP. 传递给ip addr 命令.
114.112.69.123/32 dev em1 scope global # 虚拟IP 地址,可以多个,掩码位设置为 32,独立 IP地址 .dev em1为设备 em1上添加地址 .scope global为全局范围 ,此处的配置都是符合 linux的 ip命令的格式的 .
}
}

B机:
cat /etc/keepalived/keepalived.conf
global_defs {
router_id hacopy1_shuzi
}
vrrp_instance VI_1 {
state BACKUP

nopreempt # priority 低,注释nopreempt 项

  interface em1
track_interface {
    em1
    em2
}
  virtual_router_id 51 # 保持主从服务器一致
  priority 100         # 优先级 ( 主服务器较高)
  advert_int 1         # 心跳广播间隔(秒)
  authentication {
    auth_type PASS
    auth_pass css74..tfwwapmzi4r
}
virtual_ipaddress {
    114.112.69.123/32 dev em1 scope global # 虚拟IP 地址,可以多个。
}

}

另一组 HA(同一内网)
A机器:
cat keepalived.conf
global_defs {
router_id hacopy2_shuzi
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface em2
track_interface {
em2
}
virtual_router_id 52 # 保持主从服务器一致
priority 150 # 优先级 ( 主服务器较高)
advert_int 1 # 心跳广播间隔(秒)
authentication {
auth_type PASS
auth_pass css74..tfwwapmzi4r
}
virtual_ipaddress {
192.168.0.1/32 dev em2 scope global # 虚拟IP地址,可以多个。
}
}

B机器:
cat keepalived.conf
global_defs {
router_id hacopy2_shuzi
}
vrrp_instance VI_1 {
state BACKUP

nopreempt # BACKUP 注释nopreempt 项

  interface em2
track_interface {
    em2
}

  virtual_router_id 52 # 保持主从服务器一致
  priority 100         # 优先级 ( 主服务器较高)
  advert_int 1         # 心跳广播间隔(秒)
  authentication {
    auth_type PASS
    auth_pass css74..tfwwapmzi4r
}
virtual_ipaddress {
    192.168.0.1/32 dev em2 scope global # 虚拟IP地址,可以多个。
}

}

备注:
1.详细配置参数说明,请见附件文档 <<keepalived权威指南 >>
2.数据库的主从同步与热备短信报警,请参考数据库主从同步部分;
3.多个 VIP的配置可以从龙之力量登录服上下载配置文件,参考配置;

扩展阅读: raw socket协议数据包
netstat -npl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:4399 0.0.0.0:* LISTEN 1272/sshd
tcp 0 0 :::4399 ::😗 LISTEN 1272/sshd
raw 65520 0 0.0.0.0:112 0.0.0.0:* 7 5009/keepalived
raw 0 0 0.0.0.0:112 0.0.0.0:* 7 5009/keepalived
raw 0 0 0.0.0.0:255 0.0.0.0:* 7 5009/keepalived
raw 0 0 0.0.0.0:255 0.0.0.0:* 7 5008/keepalived
有关raw socket 的一些知识
众所周知,通过 socket编程 ,我们能够实现机器之间的通信 .在 TCP/IP协议簇 (PF_INET)中 ,可以建立面向连接的 SOCK_STREAM类型的 socket,非连接的 SOCK_DGRAM类型的 socket.事实上 ,在所有的网络程序中 ,也是这两种 socket用的最为广泛 .除此之外 ,还有一些不常用的 socket类型 ,它们却是在某些网络通信中担当重要的角色 .这里要讲的就是这么一种 socket,称之为 raw socket.
raw socket的作用主要在三个方面 :
1.通过 raw socket来接受发向本机的 ICMP,IGMP协议包 ,或者用来发送这些协议包 .
2.接受发向本机的但 TCP/IP栈不能够处理的 IP包 .
3.用来发送一些自己制定源地址特殊作用的 IP包 (自己写 IP头 ,TCP头等等 )
我们知道,平时我们想看一看网络是否通达 ,就用 ping命令测试一些 .ping命令用的是 ICMP协议 .因此 ,我们不能够通过建立一个 SOCK_STREAM或 SOCK_DGRAM来发送这个包 ,只能够自己亲自来构建 ICMP包来发送 .这是一种情况 .另一种情况是 :现在许多操作系统在实现网络部分的时候 ,通常只实现了常用的几种协议 ,如 tcp,udp,icmp等 ,但象其它的如 ospf,ggp等协议 ,操作系统往往没有实现 ,如果自己有必要编写位于其上的应用 ,就必须借助 raw socket来实现 ,这是因为操作系统遇到自己不能够处理的数据包 (ip头中的 protocol所指定的上层协议不能处理 ).就将这个包交给 raw socket.而最后一种使用 raw socket的目的主要是用来构建一些特殊的协议头 ,比如我们想对某台机器进行 denial of service类型的攻击 ,但是有不想留下痕迹 ,让别人知道 IP包的来源 ,这时候就可以使用 raw socket来发送这些伪造源地址信息的包 ,这其实也是这种攻击所采用的主要技术手段 .当然了 ,我说的是 HACKER行为 ,之所以想要处理这些特殊的 IP包 ,通常也是为了诊断网络的目的 .

posted @ 2020-04-21 15:05  ChanixChen  阅读(427)  评论(0编辑  收藏  举报