Keepalived 集群软件是一个基于VRRP协议来实现的LVS(四层协议)服务高可用方案,可以利用避免单节点故障.LVS服务需要有2台服务器运行Keepalived服务,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外只有一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,备份服务器认为主服务器宕机并会接管虚拟IP提供服务,从而保证了服务的高可用性.
1.环境说明
系统:Centos 6.5 64位
软件:Keepalived ipvsadm
服务:apache
网络:
node1:192.168.1.100
node2:192.168.1.102
vip:192.168.1.105
2.配置本地时间和网络
(1)两台服务器时间必须一至
[root@node2 ~]# date --节点2的时间
Thu Nov 13 15:11:09 CST 2014
[root@node2 ~]#
[root@node1 ~]# date --节点1的时间
Thu Nov 13 15:11:13 CST 2014
[root@node1 ~]#
(2)配置本地网络
node1节点:
[root@node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=08:00:27:EE:3D:F6
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
[root@node1 ~]# vim /etc/hosts --两台服务器相互解析
192.168.1.100 node1
192.168.1.102 node2
[root@node1 ~]#
node2节点:
[root@node2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=08:00:27:A5:94:4C
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.102
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
[root@node2 ~]# vim /etc/hosts
192.168.1.100 node1
192.168.1.102 node2
[root@node2 ~]#
3.安装所需要的软件包,配置httpd服务
node1节点:
[root@node1 ~]# yum install httpd keepalived ipvsadm -y --安装所需的软件
[root@node1 ~]# vim /etc/httpd/conf/httpd.conf
ServerName 127.0.0.1
[root@node1 ~]# echo "node1" > /var/www/html/index.html --定义web首页
[root@node1 ~]# /etc/init.d/httpd restart
Stopping httpd: [FAILED]
Starting httpd: [ OK ]
[root@node1 ~]# chkconfig httpd on --重启web服务
[root@node1 ~]#
node2节点:
[root@node2 ~]# yum install httpd keepalived ipvsadm -y
[root@node2 ~]# vim /etc/httpd/conf/httpd.conf
ServerName 127.0.0.1
[root@node2 ~]# echo "node2" > /var/www/html/index.html
[root@node2 ~]# /etc/init.d/httpd restart
Stopping httpd: [FAILED]
Starting httpd: [ OK ]
[root@node2 ~]# chkconfig httpd on
4.配置keepalived集群服务
node1节点:
[root@node1 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node1 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node1 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
[root@node1 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@node1 ~]# ifconfig eth0:1 192.168.1.105 broadcast 192.168.1.105 netmask 255.255.255.255 up
[root@node1 ~]# route add -host 192.168.1.105 dev eth0:1
[root@node1 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:EE:3D:F6
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:feee:3df6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1600615 errors:0 dropped:0 overruns:0 frame:0
TX packets:1574022 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:106099219 (101.1 MiB) TX bytes:102403193 (97.6 MiB)
eth0:1 Link encap:Ethernet HWaddr 08:00:27:EE:3D:F6
inet addr:192.168.1.105 Bcast:192.168.1.105 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:5087 errors:0 dropped:0 overruns:0 frame:0
TX packets:5087 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:403339 (393.8 KiB) TX bytes:403339 (393.8 KiB)
[root@node1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.105 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
[root@node1 ~]# cd /etc/keepalived/
[root@node1 keepalived]# vim keepalived.conf --配置keepalived文件
! Configuration File for keepalived
global_defs {
notification_email {
z597011036@qq.com --宕机后邮件报警
}
notification_email_from root --从哪个用户发出
smtp_server localhost --邮件服务器
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER --主节点
interface eth1 --监听的网卡
virtual_router_id 51 --虚拟路由ID号
priority 100 --配置优先级
advert_int 1
authentication {
auth_type PASS --认证类型
auth_pass keep --认证密码
}
virtual_ipaddress {
192.168.1.105 --虚拟IP地址
}
}
virtual_server 192.168.1.105 80 { --虚拟IP和端口设置
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
protocol TCP
real_server 192.168.1.100 80 { --主服务器的IP和端口
weight 1 --权重
HTTP_GET { --启用HTTP服务
url {
path /
status_code 200 --监控状态码为200,如果返回不是200表示宕机
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.102 80 { --从服务器的IP和端口
weight 1 --权重
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@node2 keepalived]#
node2节点:
[root@node2 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node2 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node2 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node2 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node2 ~]# ifconfig eth0:1 192.168.1.105 broadcast 192.168.1.105 netmask 255.255.255.255 up
[root@node2 ~]# route add -host 192.168.1.105 dev eth0:1
[root@node2 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:A5:94:4C
inet addr:192.168.1.102 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fea5:944c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1601817 errors:0 dropped:0 overruns:0 frame:0
TX packets:1574326 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:104324952 (99.4 MiB) TX bytes:104338539 (99.5 MiB)
eth0:1 Link encap:Ethernet HWaddr 08:00:27:A5:94:4C
inet addr:192.168.1.105 Bcast:192.168.1.105 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:6824 errors:0 dropped:0 overruns:0 frame:0
TX packets:6824 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2407997 (2.2 MiB) TX bytes:2407997 (2.2 MiB)
[root@node2 ~]# cd /etc/keepalived/
[root@node2 keepalived]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
z597011036@qq.com
}
notification_email_from root
smtp_server localhost
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP --备用节点
interface eth1
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass keep
}
virtual_ipaddress {
192.168.1.105
}
}
virtual_server 192.168.1.105 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
protocol TCP
real_server 192.168.1.100 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.102 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@node2 keepalived]#
5.启动keepalived服务和ipvsadm的状态
node1和node2启动服务:
[root@node1 keepalived]# /etc/init.d/keepalived restart
Stopping keepalived: [ OK ]
Starting keepalived: [ OK ]
[root@node1 keepalived]#
[root@node2 ~]# /etc/init.d/keepalived restart
Stopping keepalived: [ OK ]
Starting keepalived: [ OK ]
[root@node2 ~]#
[root@node1 keepalived]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.105:80 rr
-> 192.168.1.100:80 Local 1 0 0
-> 192.168.1.102:80 Route 1 0 0
[root@node1 keepalived]#
6.测试是否正常
本文出自 “一起走过的日子” 博客,请务必保留此出处http://tongcheng.blog.51cto.com/6214144/1576111