1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@lvs ~]
# modprobe -l | grep ip_vs #查看RHEL6内核已经集成ip_vs模块,需要时自动调用
[root@lvs ~]
# vi /etc/sysctl.conf #开启路由转发功能
net.ipv4.ip_forward = 1
[root@lvs ~]
# sysctl -p #刷新生效
[root@lvs ~]
# yum install -y ipvsadm #安装ipvs管理工具
#配置负载分发策略
[root@lvs ~]
# ipvsadm -C #清除lvs原有策略
[root@lvs ~]
# ipvsadm -A -t 218.245.4.10:80 -s rr #轮训算法
[root@lvs ~]
# ipvsadm -a -t 218.245.4.10:80 -r 192.168.1.10:80 -m #-m采用NAT模式
[root@lvs ~]
# ipvsadm -a -t 218.245.4.10:80 -r 192.168.1.20:80 -m
[root@lvs ~]
# service ipvsadm save #配置信息保存/etc/sysconfig/ipvsadm
[root@lvs ~]
# chkconfig ipvsadm on
[root@lvs ~]
# ipvsadm -ln #查看节点状态,下面Masq(地址伪装)说明是采用NAT模式
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 218.245.4.10:80 rr
-> 192.168.1.10:80 Masq 1 0 0
-> 192.168.1.20:80 Masq 1 0 0
|
1
2
3
4
5
6
7
|
[root@nfs ~]
# yum install nfs-utils
[root@nfs ~]
# vi /etc/exports
/var/www/html
192.168.1.0
/24
(rw,
sync
,no_root_squash)
[root@nfs ~]
# service rpcbind start
[root@nfs ~]
# service nfs start
[root@nfs ~]
# chkconfig rpcbind on
[root@nfs ~]
# chkconfig nfs on
|
1
2
3
4
5
|
[root@web1 ~]
# yum install httpd
[root@web1 ~]
# mount -t nfs 192.168.1.30:/var/www/html/ /var/www/html #挂载nfs共享
[root@web1 ~]
# echo "web1" > /var/www/html/index.html
[root@web1 ~]
# service httpd start
[root@web1 ~]
# chkconfig httpd on
|
1
2
3
4
5
6
7
8
9
10
|
[root@lvs ~]
# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]
# cp ifcfg-eth0 ifcfg-eth0:0
[root@lvs network-scripts]
# vi ifcfg-eth0:0
DEVICE=eth0:0
TYPE=Ethernet
ONBOOT=
yes
BOOTPROTO=static
IPADDR=218.245.4.10
NETMASK=255.255.255.0
[root@lvs network-scripts]
# service network restart
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@lvs ~]# vi /etc/sysctl.conf #不需要开启路由转发,因为都是同网段
#调度器和节点都需要共用VIP,为了避免ARP解析出现异常,应该关闭linux内核重定向响应。添加如下:
net.ipv4.conf.all.send_redirects =
0
net.ipv4.conf.
default
.send_redirects =
0
net.ipv4.conf.eth0.send_redirects =
0
[root@lvs ~]# sysctl -p #刷新生效
#配置负载分发策略
[root@lvs ~]# ipvsadm -C #清除lvs原有策略
[root@lvs ~]# ipvsadm -A -t
218.245
.
4.10
:
80
-s rr
[root@lvs ~]# ipvsadm -a -t
218.245
.
4.10
:
80
-r
218.245
.
4.21
-g
[root@lvs ~]# ipvsadm -a -t
218.245
.
4.10
:
80
-r
218.245
.
4.22
-g
[root@lvs ~]# service ipvsadm save
[root@lvs ~]# chkconfig ipvsadm on
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version
1.2
.
1
(size=
4096
)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP
192.168
.
0.202
:
80
rr
->
192.168
.
0.203
:
80
Route
1
0
0
->
192.168
.
0.204
:
80
Route
1
0
0
|
1
2
3
4
5
6
7
|
[root@nfs ~]
# yum install nfs-utils
[root@nfs ~]
# vi /etc/exports
/var/www/html
192.168.1.0
/24
(rw,
sync
,no_root_squash)
[root@nfs ~]
# service rpcbind start
[root@nfs ~]
# service nfs start
[root@nfs ~]
# chkconfig rpcbind on
[root@nfs ~]
# chkconfig nfs on
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[root@web1 ~]
# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]
# cp ifcfg-lo ifcfg-lo:0 #lo配置VIP,为了来接受、处理目标VIP数据包
[root@web1 network-scripts]
# vi ifcfg-lo:0
DEVICE=lo:0
ONBOOT=
yes
IPADDR=218.245.4.10
NETMASK=255.255.255.255
#子网掩码必须全为1
[root@web1 network-scripts]
# service network restart
[root@web1 network-scripts]
# route add -host 218.245.4.10 dev lo:0 #添加lo网关
[root@web1 network-scripts]
# echo "/sbin/route add -host 218.245.4.10 dev lo:0" >> /etc/rc.local #设置开机自动添加
[root@web1 network-scripts]
# vi /etc/sysctl.conf #忽略arp响应
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@web1 network-scripts]
# sysctl -p
[root@web1 ~]
# yum install httpd
[root@web1 ~]
# mount -t nfs 192.168.1.10:/var/www/html/ /var/www/html #挂载nfs共享存储
[root@web1 ~]
# echo "web1" > /var/www/html/index.html
[root@web1 ~]
# service httpd start
[root@web1 ~]
# chkconfig httpd on
|
1
2
3
4
5
6
7
8
9
10
11
|
[root@lvs-master ~]
# yum -y install gcc gcc-c++ make pcre pcre-devel kernel-devel openssl-devel libnl-devel popt-devel ipvsadm
[root@lvs-master ~]
# tar zxvf keepalived-1.2.7.tar.gz
[root@lvs-master ~]
# cd keepalived-1.2.7
[root@lvs-master keepalived-1.2.7]
# ./configure --prefix=/usr/local/keepalived
[root@lvs-master ~]
# make && make install
[root@lvs-master ~]
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@lvs-master ~]
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@lvs-master ~]
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@lvs-master ~]
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
[root@lvs-master ~]
# chkconfig --add keepalived
[root@lvs-master ~]
# chkconfig keepalived on
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
[root@lvs-master ~]
# vi /etc/keepalived/keepalived.conf
! Configuration File
for
keepalived
global_defs {
notification_email {
user@
test
.com
#故障接受邮件地址,可以多个
}
notification_email_from root@
test
.com
#故障发送邮件地址
smtp_server 127.0.0.1
#本机来发送邮件
smtp_connect_timeout 30
router_id LVS_MASTER
#负载均衡器标识,备用服务器改为LVS_BACKUP
}
vrrp_instance VI_1 {
#定义VRRP热备
state MASTER
#MASTER表示主服务器,BACKUP表示备用服务器
interface eth0
virtual_router_id 50
#虚拟路由ID,主备必须相同
priority 100
#优先级越过,取得VIP控制权越高,备用服务器改为90
advert_int 1
#主备值之间通告间隔时间为1s
authentication {
#认证信息,每个热备组保持一致
auth_type PASS
#认证类型,主备切换时用到
auth_pass 1111
#认证密码,主从必须一样
}
virtual_ipaddress {
#虚拟IP(VTP),可以多个
218.245.4.10
}
}
virtual_server 218.245.4.10 80 {
#虚拟服务器IP、端口
delay_loop 6
#每个6秒健康检查realserver状态
lb_algo rr
#lvs调度算法,rr为轮训
lb_kind DR
#lvs负载均衡模式,DR为直接路由
persistence_timeout 50
#同一个IP连接50秒内保持在一个realserver
protocol TCP
#用tcp协议检查realserver状态
real_server 218.245.4.13 80 {
#第一个web节点地址、端口
weight 1
#节点权重
TCP_CHECK {
#健康检查方式
connect_port 80
#检查目标端口
connect_timeout 3
#检查失败重试秒数
nb_get_retry 3
#重试次数
delay_before_retry 3
#重试间隔3秒
}
}
real_server 218.245.4.14 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
[root@web1 ~]
# vi /etc/init.d/lvs-real
#!/bin/bash
#chkconfig: 345 99 20
VIP=218.245.4.10
case
"$1"
in
start)
/sbin/ifconfig
lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
#lo:0绑定VIP地址,抑制 ARP 广播
/sbin/route
add -host $VIP dev lo:0
echo
"1"
>
/proc/sys/net/ipv4/conf/lo/arp_ignore
echo
"2"
>
/proc/sys/net/ipv4/conf/lo/arp_announce
echo
"1"
>
/proc/sys/net/ipv4/conf/all/arp_ignore
echo
"2"
>
/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >
/dev/null
2>&1
echo
"RealServer Start OK"
;;
stop)
ifconfig
lo:0 down
route del $VIP >
/dev/null
2>&1
echo
"0"
>
/proc/sys/net/ipv4/conf/lo/arp_ignore
echo
"0"
>
/proc/sys/net/ipv4/conf/lo/arp_announce
echo
"0"
>
/proc/sys/net/ipv4/conf/all/arp_ignore
echo
"0"
>
/proc/sys/net/ipv4/conf/all/arp_announce
echo
"RealServer Stoped"
;;
*)
echo
"Usage: $0 {start|stop}"
exit
1
esac
exit
0
|
1
2
3
4
5
|
[root@web1 ~]
# chmod +x /etc/init.d/lvs-real
[root@web1 ~]
# service lvs-real start
[root@web1 ~]
# chkconfig --add lvs-real
[root@web1 ~]
# chkconfig lvs-real start
[root@web1 ~]
# mount -t nfs 192.168.0.5:/var/www/html/ /var/www/html #挂载nfs共享
|
1
2
3
4
5
6
7
8
9
10
11
|
[root@mysql-master ~]
# yum -y install gcc gcc-c++ make pcre pcre-devel kernel-devel openssl-devel libnl-devel popt-devel ipvsadm
[root@mysql-master ~]
# tar zxvf keepalived-1.2.7.tar.gz
[root@mysql-master ~]
# cd keepalived-1.2.7
[root@mysql-master keepalived-1.2.7]
# ./configure --prefix=/usr/local/keepalived
[root@mysql-master keepalived-1.2.7]
# make && make install
[root@mysql-master ~]
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@mysql-master ~]
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@mysql-master ~]
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@mysql-master ~]
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
[root@mysql-master ~]
# chkconfig --add keepalived
[root@mysql-master ~]
# chkconfig keepalived on
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
[root@mysql-master ~]
# vi /etc/keepalived/keepalived.conf
! Configuration File
for
keepalived
global_defs {
router_id MYSQL-MASTER
#备用服务器改为MYSQL-BACKUP
}
vrrp_instance VI_1 {
state MASTER
#备用服务器改为BACKUP
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.6
}
}
virtual_server 192.168.0.6 3306 {
delay_loop 2
lb_algo wrr
#使用加权轮叫,根据服务器负载来决定访问请求到主从服务器
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.0.7 3306 {
weight 1
notify_down
/etc/keepalived/mysql
.sh
#监控到mysql宕机后执行的脚本
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.0.8 3306 {
weight 1
notify_down
/etc/keepalived/mysql
.sh
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
|
1
2
3
4
|
[root@mysql-master ~]
# vi /etc/keepalived/mysql.sh #当mysql关闭时,自动关闭本机keepalived,从而实现故障机器移除
#!/bin/bash
pkill keepalived
[root@mysql-master ~]
# service keepalived restart
|