添加虚拟ip (vip)用户访问的
ip addr add 192.168.248.123/24 dev ens33
准备了4台虚拟机,用于测试
IP 作用
192.168.1.128 keepalived master
192.168.1.129 keepalived backup
192.168.1.130 nginx1
192.168.1.131 nginx2
192.168.1.200 虚拟ip VIP
软件安装
在192.168.1.128及192.168.1.129上安装keepalived
在192.168.1.130及192.168.1.131上安装nginx
KeepAlived 安装
- 基础软件安装
yum install gcc
yum -y install openssl-devel
yum -y install libnl libnl-devel
yum install -y libnfnetlink-devel
yum -y install net-tools
yum install vim -y
源码安装
- 将以上下载的2.0.18的版本拷贝至/use/local/src下
- 安装
tar -zxvf keepalived-2.0.18.tar.gz -C /use/local & cd /use/local
mv keepalived-2.0.18 keepalived & cd keepalived
./configure
make && make install
- keepalived配置
- 将keepalived配置文件拷贝到etc/keepalived下
mkdir /etc/keepalived
cp /usr/local/keepalived/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
- 开机启动项
- 把 keepalived的启动文件复制到init.d下,加入开机启动项
cp /usr/local/keepalived/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/
- 将keepalived文件拷贝到etc下
cp /usr/local/keepalived/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
- 把keepalived加入系统命令目录
cp /usr/local/sbin/keepalived /usr/sbin/
安装ipvsadm
- 用于查看lvs转发及代理情况的工具
- 只需要在192.168.1.128及192.168.1.129上安装即可
yum install ipvsadm -y
- 防火墙(iptables)
- 停用firewalld
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl mask firewalld.service
- 安装iptables防火墙
#查看iptables相关的安装包
yum list iptables*
#安装
yum install -y iptables-services
- 防火墙配置(方式一)
- 编辑防火墙,增加端口
- keepalived服务器下的配置
- 192.168.1.128和192.168.1.129下的添加以下配置
- vi /etc/sysconfig/iptables
#允许vrrp多播心跳(如果防火墙开启,这里不配置这个,就会出现裂脑)
-A INPUT -p vrrp -j ACCEPT
#开启80端口的访问(如果防火墙开启,不配置这个,vip的80端口将无法正常访问)
-I INPUT -p tcp --dport 80 -j ACCEPT
- nginx服务器下配置
- 192.168.1.130和192.168.1.131下的添加以下配置
- vi /etc/sysconfig/iptables
#nginx默认监听的80端口 这里直接开启80端口的外网访问(不开启外网将无法正常反问对应服务器的nginx)
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
重启防火墙
systemctl restart iptables.service
以下操作需要在角色为Web服务器的两台中进行
即192.168.1.130和192.168.1.131这两台服务器上配置即可
启动nginx服务
编辑realserver脚本文件两台机器都要搞
- 进入init文件夹
cd /etc/init.d/
- 编辑脚本
vim realserver
添加以下脚本
#虚拟的vip 根据自己的实际情况定义
SNS_VIP=192.168.1.200 # 虚拟ip
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_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 $SNS_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
保存并设置脚本的执行权限
chmod 755 /etc/init.d/realserver
因为realserver脚本中用到了/etc/rc.d/init.d/functions,所以一并设置权限
chmod 755 /etc/rc.d/init.d/functions
执行脚本
service realserver start
查看执行结果
ip a
最后关键一步,配置keepalived
配置MASTER
进入192.168.1.128服务器
cd /etc/keepalived
#备份默认的keepalived配置
mv keepalived.conf keepalived-back.conf
vim keepalived.conf
添加以下配置:
global_defs {
notification_email {
edisonchou@hotmail.com
}
notification_email_from sns-lvs@gmail.com
smtp_server 192.168.80.1
smtp_connection_timeout 30
router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {
state MASTER #指定Keepalived的角色,MASTER为主,BACKUP为备 记得大写
interface eno16777736 #网卡id 不同的电脑网卡id会有区别 可以使用:ip a查看
virtual_router_id 51 #虚拟路由编号,主备要一致
priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
advert_int 1 #检查间隔,默认为1s
authentication { #这里配置的密码最多为8位,主备要一致,否则无法正常通讯
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200 #定义虚拟IP(VIP)为192.168.1.200,可多设,每行一个
}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.1.200 80 {
delay_loop 6 # 设置健康检查时间,单位是秒
lb_algo rr # 设置负载调度的算法为wlc
lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.1.130 80 { # 指定real server1的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.131 80 { # 指定real server2的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
配置BACKUP
进入192.168.1.129服务器
cd /etc/keepalived
#备份默认的keepalived配置
mv keepalived.conf keepalived-back.conf
vim keepalived.conf
添加以下配置:
global_defs {
notification_email {
edisonchou@hotmail.com
}
notification_email_from sns-lvs@gmail.com
smtp_server 192.168.80.1
smtp_connection_timeout 30
router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {
state BACKUP #指定Keepalived的角色,MASTER为主,BACKUP为备 记得大写
interface eno16777736 #网卡id 不同的电脑网卡id会有区别 可以使用:ip a查看
virtual_router_id 51 #虚拟路由编号,主备要一致
priority 50 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
advert_int 1 #检查间隔,默认为1s
authentication { #这里配置的密码最多为8位,主备要一致,否则无法正常通讯
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200 #定义虚拟IP(VIP)为192.168.1.200,可多设,每行一个
}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.1.200 80 {
delay_loop 6 # 设置健康检查时间,单位是秒
lb_algo rr # 设置负载调度的算法为wlc
lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.1.130 80 { # 指定real server1的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.131 80 { # 指定real server2的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
配置注意项
router_id
后面跟的自定义的ID在同一个网络下是一致的
state
state后跟的MASTER和BACKUP必须是大写;否则会造成配置无法生效的问题
interface
网卡ID;这个值不能完全拷贝我的配置,要根据自己的实际情况来看,可以使用以下方式查询
ip a
priority
主备优先级
MASTER中配置的priority必须比BACKUP大;差值最好>=50
authentication
主备之间的认证方式
一般使用PASS即可;主备的配置必须一致;否则无法通讯,会导致裂脑;密码不能大于8位
virtual_ipaddress
配置的VIP;允许配置多个
启动keepalived
在192.168.1.128和192.168.1.129下分别执行以下指令启动keepalived
/etc/init.d/keepalived start
LVS管理工具-ipvsadm
安装
yum install ipvsadm -y
查看统计
查看当前配置的虚拟服务和各个RS的权重
ipvsadm -Ln
查看当前ipvs模块中记录的连接(可用于观察转发情况)
ipvsadm -lnc
查看ipvs模块的转发情况统计
ipvsadm -Ln --stats | --rate
lvs超时配置
查看lvs的超时时间
ipvsadm -L --timeout
优化连接超时时间
ipvsadm --set 1 10 300