1 服务器准备
主机 | ip | 作用 |
主机1 | 192.168.85.133 | Keepalived master + nginx |
主机2 | 192.168.85.134 | Keepalived backup + nginx |
无 | 192.168.85.200 | 虚拟IP(VIP) |
2 nginx安装
2.1 安装gcc-c++编译器
yum install gcc-c++
yum install -y openssl openssl-devel
2.2 安装pcre包
yum install -y pcre pcre-devel
2.3 安装zlib包
yum install -y zlib zlib-devel
2.4 创建文件夹nginx
cd usr/local
mkdir nginx
2.5 在线下载nginx解压包
wget https://nginx.org/download/nginx-1.19.9.tar.gz
2.6 解压并进入nginx目录
tar -zxvf nginx-1.19.9.tar.gz
cd nginx-1.19.9
2.7 使用nginx默认配置
./configure
2.8 编译安装
make
make install
2.9 返回上层,进入到文件夹
cd ../
cd sbin
2.10 启动nginx
./nginx
2.11 查看是否启动成功
ps -ef | grep nginx
2.12 访问当前服务器ngnix是否启动成功
2.13 创建realserver
mkdir realserver
2.14 realserver文件内容更改
SNS_VIP=192.168.85.200
/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
2.15 文件授权,因为用到了functions文件、所以一并授权
chmod 755 realserver
chmod 755 functions
3 安装keepalived
3.1 查看系统内核版本、 2.4以后就有lvs、不用安装、否则的手动安装
cname -a
3.2 yum 安装keepalived
yum -y install keepalived
3.3 查看配置文件安装位置
rpm -ql keepalived
3.4 主keepalived编辑配置文件内容
global_defs {
notification_email {
864377400@qq.com
}
notification_email_from sns-lvs@gmail.com
smtp_server smtp.hysec.com
smtp_connection_timeout 30
router_id nginx_master # 设置nginx master的id,在一个网络应该是唯一的
}
vrrp_script chk_http_port {
script "/etc/keepalived/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行
interval 2 #(检测脚本执行的间隔,单位是秒)
weight 2
}
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
virtual_router_id 66 # 虚拟路由编号,主从要一直
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
192.168.85.200 # 定义虚拟ip(VIP),可多设,每行一个
}
}
# 定义对外提供服务的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.85.134 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.85.134 80 { # 指定real server2的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
3.5 启动keepalived
service keeplived start
3.6 查看是否启动成功
service keeplived status
3.7 网页访问
3.8 子节点keepalived
global_defs {
notification_email {
864377400@qq.com
}
notification_email_from 864377400@qq.com
smtp_server smtp.qq.com
smtp_connection_timeout 30
router_id nginx_master # 设置nginx master的id,在一个网络应该是唯一的
}
vrrp_script chk_http_port {
script "/etc/keepalived/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行
interval 2 #(检测脚本执行的间隔,单位是秒)
weight 2
}
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
virtual_router_id 66 # 虚拟路由编号,主从要一直
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
192.168.85.200 # 定义虚拟ip(VIP),可多设,每行一个
}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.85.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.85.133 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.85.134 80 { # 指定real server2的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
3.9 网页查看
3.10 停掉子节点keepalived,自动切换到父节点
主节点,挂在虚拟IP
子节点,无虚拟IP
关掉主节点keepalived、主节点虚拟IP自动偏移到子节点。
子节点虚拟IP
3.11 检测脚本,当nginx断开之后,keepalived重启nginx,如果nginx重启不成功,关闭keepalived
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #重启nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败
exit 1
else
exit 0
fi
else
exit 0
fi
谢谢大家的观看。如有疑问,请联系我。864377400@qq.com