*********************
*********LVS*********
*********************
www.zh.linuxvirtualserver.org
ipvs(内核),ipvsadm(工作指令)
arptables
arptables -A IN -d
arptables -A OUT -s
四种
VS/NAT ;VS/TUN(隧道) ; VS/DR ; VS/fullNAT (只有这个模式可以跨VLAN)
redhat6 中带其10种内核连接调度算法
(1)NAT
NAT算法调度,指到server,但调度器输入内网的数据包会源路返回到外网,这样调度器的压力会大,大约几十台的承受压力即为极限。
(2)TUN(隧道)
调度器通过隧道协议对数据包二次封装,×××,到达Real Server 会解包,并拿到
clinet 的IP,并进行业务,支持广域网。
(3)DR
只能在直连网络,同一个交换机上进行操作。
*******测试DR********
Client ——> VS ——> RS ——> Client
核心是MAC 的指定
首先
在调度机上使用ipvsadm命令添加调度算法和调度地址:
ipvsadm -A -t 172.25.254.168 -s rr [采用rr轮询]
ipvasdm -a -t 172.25.254.168:80 -r 172.25.254.163 -g [设置虚拟IP 168 的对应真实路由选择IP 163]
ipvasdm -a -t 172.25.254.168:80 -r 172.25.254.164 -g [设置虚拟IP 168 的对应真实路由选择IP 164]
ipvsadm -l [查看循环次数] 有时出错时,它并不能正却检测,仍然会显示次数。所以还需要用curl检测。
在Real Server1 和 ~2 上 需要用 arptables 做策略更改,以防访问到R Server 而不经过调度机,
方法一:更改内核文件
RealServer 设置
vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
(优)方法二:下载 arptables_jf.x86_64
arptables -A IN -d 172.25.254.168 -j DROP [丢掉进入到168的信息]
arptables -A OUT -s 172.25.254.168 -j mangle --mangle-ip-s 172.25.254.163 [作为本机168输出的信息,转换为163输出]
/etc/init.d/arptables_jf save[切记保存,不然服务打不开]
*********NAT********
Client ——> VS ——> RS
. <—— . <——
即RS的网关一定为VS。 NAT对VS(管理机)是不做任何操作的,只将它当作网关做地址转发。
cip ——> vip
DNAT
vip ——> rip
rip ——> vip
vip ——> cip
*******TUN**********(隧道)
要求,设备支持IP隧道协议。可用于广义网,配置较为复杂
Clinet ——> VS ——> RS ——> Client
cip ——> vip
ip封装
vip ——> rip
vip ——> cip
******fullNAT********
必须更新内核,抗***能力强。支持多VLAN
带有检测功能的轮询,ldirectord 服务。
在此之前 lpvsadm -C 清除以前写入lvs的信息。
rpm -qd ldirectord 查看模板配置文件 /usr/share/doc/ldirectord-3.9.5/ldirectord.cf,并将配置文件移动到/etc/ha.d/ldirectord.cf
配置文件内容如下:
24 # Sample for an http virtual service
25 virtual=172.25.254.168:80
26 real=172.25.254.163 gate [真实所用服务机的地址]
27 real=172.25.254.164 gate [真实所用服务机的地址]
28 fallback=127.0.0.1:80 gate [所有服务机停止所跳到的最后的处理机上]
29 service=http
30 scheduler=rr
31 #persistent=600 [与存储或数据库等长久需要保持连接的设置有关]
32 #netmask=255.255.255.255
33 protocol=tcp
34 checktype=negotiate [检测类型为:谈判]
35 checkport=80
36 request="index.html"
37 # receive="Test Page" [必须确保两个及其的服务页面保持相同数据]
38 # virtualhost=www.x.y.z
使用已经配置好的heartbeat,给集群服务中添加lvs
(1)修改heartbeat策略在集群节点上,并发送给其它节点机。
vim /etc/ha.d/haresources
server1.example.com IPaddr::172.25.254.168/24/eth0 ldirectord httpd
(2)发送修改好的/etc/ha.d/ldirectord.cf 模板,给发送给其它节点机
(3)开启Real Server机上的http 服务
(4)开启heartbeat 在节点机上。
(5)测试,对hearbeat进行操作,ldirectord服务会由于heartbeat服务,开启在某节点机上,并运行lvs机制,从而保证Real Server的服务访问正常运行。
***********************************
********使用 keepalived + lvs*******
**********************************
一. keepalive 工作原理
使用VRP协议
Layer 3,4 &7 工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理如下
Layer 3: Keepalived 使用Layer3 的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包,如果发现某台服务的IP地址没有激活,Keepalived 便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。layer3的方式是 【以服务器的IP地址有效作为服务器工作正常与否的标准】
Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
Layer7:Layer7就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。
二.下载,并使用 keepalived-1.2.24.tar.gz 配置 (网址 www.keepalive.org)
(1)首先解开rpm 包,并进入 keepalived-1.2.24 目录。
开始安装文件,并指定安装目录.防止配置文件分散
安装时根据所提示的信息一步步安装(gcc,openssl*),直到创建出 make等类型文件,可以使用 make && make install 命令
./configure --prefix=/usr/local/keepalived
make && make install 操作之后,在/ust/local/keepalived 下会出向 keepalived 服务所有的信息.
下载 mailx(类邮件软件),方便服务自动发送信息
(2)开始制作文件连接,启动服务
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived /etc/
chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
/etc/init.d/keepalived start
(3)vim /etc/keepalived/keepalived.conf
[行标]
3 global_defs {
4 notification_email {
5 root@localhost
6 }
7 notification_email_from [email protected]
8 smtp_server 172.0.0.1
9 smtp_connect_timeout 30
10 router_id LVS_DEVEL
11 vrrp_skip_check_adv_addr
12 vrrp_strict
13 vrrp_garp_interval 0
14 vrrp_gna_interval 0
15 }
16
17 vrrp_instance VI_1 {
18 state MASTER
19 interface eth0
20 virtual_router_id 166[主、备机的 virtual_router_id 必须相同,取值 0-255]
21 priority 100
22 advert_int 1
23 authentication {
24 auth_type PASS
25 auth_pass 1111
26 }
27 virtual_ipaddress {
28 172.25.254.168
29 }
30 }
31
32 virtual_server 172.25.254.166 80 {
33 delay_loop 6
34 lb_algo wrr[使用加权轮询]
35 lb_kind DR
36 # persistence_timeout 50
37 protocol TCP
38
39 real_server 172.25.254.163 80 {
40 weight 2[权重]
41 TCP_CHECK {
42 connect_timeout 3
43 nb_get_retry 3
44 delay_before_retry 3
45 }
46 }
47 real_server 172.25.254.164 80 {
48 weight 1
49 TCP_CHECK {
50 connect_timeout 3
51 nb_get_retry 3
52 delay_before_retry 3
53 }
54 }
55 }
(4)配置完成server1.的信息后,
1.把 /usr/local/keepalived/ 目录和目录下的所有文件发送给 172.25.254.162 的 /usr/local中。
scp -r keepalived/ [email protected]:/usr/local
2.在server2中 进行(2)步骤,把相应的文件连接到相应的文件。
3.更改配置文件
vim /etc/keepalived/keepalived.conf
[行标]
18 state BACKUP[辅机该为 BACKUP,此状态由 priority决定,高为MASTER ,低为BACKUP]
21 priority 50[辅机这个优先级要低于主机]
(5)在Rules Server 机上添加 arptables 保证服务机上的数据 达到正常效果
(优)方法二:下载 arptables_jf.x86_64
arptables -A IN -d 172.25.254.168 -j DROP [丢掉进入到168的信息]
arptables -A OUT -s 172.25.254.168 -j mangle --mangle-ip-s 172.25.254.163 [作为本机168输出的信息,转换为163输出]
(6)再次添加一个 vsftpd 服务
1.vim /etc/keepalived/keepalived.conf
[行标]
3 global_defs {
4 notification_email {
5 root@localhost
6 }
7 notification_email_from [email protected][修改邮件接受主机,谁是主机 就写谁]
8 smtp_server 172.0.0.1
9 smtp_connect_timeout 30
10 router_id LVS_DEVEL
11 vrrp_skip_check_adv_addr
12 vrrp_strict
13 vrrp_garp_interval 0
14 vrrp_gna_interval 0
15 }
16 vrrp_instance VI_1 {
17 state MASTER
18 interface eth0
19 virtual_router_id 166
20 priority 100
21 advert_int 1
22 authentication {
23 auth_type PASS
24 auth_pass 1111
25 }
26 virtual_ipaddress {
27 172.25.254.168
28 172.25.254.166[再次添加一个虚拟IP]
29 }
30 }
31
32 virtual_server 172.25.254.166 21 {[开启21端口]
33 delay_loop 6
34 lb_algo rr
35 lb_kind DR
36 persistence_timeout 50[会话保持时间,单为是秒,这个选项对于动态网页是非常有用的,为集群系统中session共享提供了一个很好的解决方案。有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保持时间,是最大无响应超时时间,即断开连接后,超出50秒,则会被分发到另外节点]
37 protocol TCP
38
39 real_server 172.25.254.163 21 {
40 weight 1
41 TCP_CHECK {
42 connect_timeout 3
43 nb_get_retry 3
44 delay_before_retry 3
45 }
46 }
47 real_server 172.25.254.164 21 {
48 weight 1
49 TCP_CHECK {
50 connect_timeout 3
51 nb_get_retry 3
52 delay_before_retry 3
53 }
54 }
55 }
2.在 Rules Server 服务机上添加vsftpd 服务,并且添加 arptables 策略。(同上)