- 环境
192.168.2.111 lvs+keepalived主
192.168.2.117 lvs+keepalived从
192.168.2.118 mysql主/nginx
192.168.2.119 mysql从/nginx
192.168.2.112 lap
在111服和117服上分别部署lvs和keepalived,其他服务已提前部署好
- lvs部署
yum -y install kernel-devel
ln -s /usr/src/kernels/2.6.32-696.16.1.el6.i686 /usr/src/linux 注意安装的内核名称可能不同
wget -c http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
tar -zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make
make install
lvs部署完成后,不需要再执行ipvsadm命令来添加后台服务器,相关参数直接在下面的keepalived主配置文件中设置
- keepalived部署
wget http://www.keepalived.org/software/keepalived-1.2.24.tar.gz
tar -zxvf keepalived-1.2.24.tar.gz
cd keepalived-1.2.24
./configure
make
make install
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/sbin/keepalived /usr/sbin/
手动添加配置目录
mkdir -p /etc/keepalived
设置权限
chmod u+x /etc/init.d/keepalived
上述的服务也可以写成脚本来一键部署
- 配置keepalived文件参数
111服keepalived主
! Configuration File for keepalived
global_defs {
notification_email {
abc@163.com
}
notification_email_from abc@163.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 50
priority 100
advert_int 5
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.135
}
}
virtual_server 192.168.2.135 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.2.118 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.119 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
上述参数中,111服的keepalived设置state为BACKUP,优先级priority设置成100,然后在117服的keepalived中,同样把state设置成BACKUP,优先级则设置为90,其他参数设置一样。
由于lvs转发方法采用DR,算法采用wrr模式,需要在后端服务器设置VIP
在用户请求转发到相应的后端服务器的过程中,会修改请求包的目的mac地址,目的ip地址不变。当后端服务器检测到该请求包的目的ip是VIP而不是自己,则会丢弃数据,所以需要在所有后端服务器上配置VIP,以避免数据包丢失。另外,后端服务器把VIP配置在lo网卡上以避免ip产生冲突。
lvs服务器和后端服务求绑定vip(临时,重启会自动消失)
VIP=192.168.2.135
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
在后端服务器抑制arp(临时,重启后会自动消失)
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
分别启动111和117的keepalived服务
modprobe ip_vs 内核加载ipvs模块(注意)
service keepalived start
浏览器访问web
查看状态
可以看到VIP和realserver的状态
手动停止118的nginx服务,浏览器一样可以正常访问,再看ipvs
由上图可知,keepalived会自动剔除有故障的nginx服务
再手动开启118的nginx服务,会自动把恢复的nginx服务加进来,完成高可用
停止111服的keepalived服务,然后查看日志/var/log/messages
此时117的keepalived进入master状态,保持高可用。
恢复111的keepalived服务,查看日志可以看到进入backup状态
即在同为BACKUP的状态下以及同时设置为nopreempt时,谁先启动keepalived,谁就是master,当master宕机且恢复后,状态一直为backup
备注:
1)在部署keepalived时,执行./configure出现错误!!! OpenSSL is not properly installed on your system. !!!,需要安装openssl