官方网站: http://www.keepalived.org/
判断 LVS 负载调度器、节点服务器的可用性
当 master 主机出现故障及时切换到backup 节点保证业务正常,当 master故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点。
VRRP(虚拟路由冗余协议) 是针对路由器的一种备份解决方案
由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
keepalived体系架构中主要有三个模块,分别是core
、check
和vrrp
。
抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP
非抢占式俩节点state必须为bakcup,且必须配置nopreempt。
注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。
#Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP?
Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。
然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器。
优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。
主服务器和备服务器同时拥有 VIP
因为主服务器和备服务器之间的通信链路中断,导致备服务器无法正常收到主服务器发送的VRRP心跳报文
关闭主服务器或者备服务器其中一个的keepalived服务
主服务器与备服务器之间添加双通信链路
在主服务器上定义运行脚本判断与备服务器通信链路是否中断,如果中断则自行关闭keepalived服务
利用第三方监控软件检测是否发生脑裂故障,如果发生则通过监控软件关闭主或者备服务器上的keepalived服务
主keepalived服务器:192.168.67.100
备keepalived服务器:192.168.67.101
web1服务器:192.168.67.102
web2服务器:192.168.67.103
vip:192.168.67.200
客户机:192.168.67.104
#关闭防火墙
systemctl stop firewalld.service
setenforce 0
#安装服务
yum install ipvsadm -y
yum install keepalived -y
#修改配置文件keeplived.conf
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak #备份配置文件
vim keepalived.conf
#编辑配置文件
删掉多余配置
#启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33
#调整proc响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
#刷新一下
sysctl -p
#配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
#清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.67.200:80 -s rr
ipvsadm -a -t 192.168.67.200:80 -r 192.168.67.102:80 -g
ipvsadm -a -t 192.168.67.200:80 -r 192.168.67.103:80 -g
#保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm
#与主服务器类似
#关闭防火墙
systemctl stop firewalld.service
setenforce 0
#安装服务
yum install ipvsadm -y
yum install keepalived -y
#修改配置文件keeplived.conf
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak #备份配置文件
vim keepalived.conf
#编辑配置文件
#启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33
#调整proc响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
#刷新一下
sysctl -p
#配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
#清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.67.200:80 -s rr
ipvsadm -a -t 192.168.67.200:80 -r 192.168.67.102:80 -g
ipvsadm -a -t 192.168.67.200:80 -r 192.168.67.103:80 -g
#保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm
#关闭防火墙
systemctl stop firewalld
setenforce 0
#安装并开启httpd服务
yum -y install httpd
systemctl start httpd
#配置站点文件
vim /var/www/html/index.html
this is scj web1!
#配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.67.200
NETMASK=255.255.255.255
#重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
#设置路由
route add -host 192.168.67.200 dev lo:0
route -n
#调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
#刷新proc参数
sysctl -p
#配置与web1类似
#关闭防火墙
systemctl stop firewalld
setenforce 0
#安装并开启httpd服务
yum -y install httpd
systemctl start httpd
#配置站点文件
vim /var/www/html/index.html
this is scj web2!
#配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.67.200
NETMASK=255.255.255.255
#重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
#设置路由
route add -host 192.168.67.200 dev lo:0
route -n
#调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
#刷新proc参数
sysctl -p
#前往客户机
curl 192.168.67.200
#访问vip
#前往主服务器
ip a
#前往备服务器
ip a
#前往主服务器
systemctl stop keepalived.service
#断开主服务器
#前往备服务器
ip a
192.168.67.102 #主服务器
192.168.67.103 #备服务器
192.168.67.100 #nginx节点服务器1
192.168.67.101 #nginx节点服务器2
192.168.67.104 #客户机
systemctl stop firewalld
setenforce 0
#关闭防火墙
#yum安装nginx
yum install -y epel-release
#安装epel源
yum install nginx -y
#安装nginx主体软件
echo this is nginx1 > /var/share/nginx/html/index.html
#编辑主页内容
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.67.200
NETMASK=255.255.255.255
#重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
#设置路由
route add -host 192.168.67.200 dev lo:0
route -n
systemctl stop firewalld
setenforce 0
#关闭防火墙
#yum安装nginx
yum install -y epel-release
#安装epel源
yum install nginx -y
#安装nginx主体软件
echo this is nginx2 > /var/share/nginx/html/index.html
#编辑主页内容
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.67.200
NETMASK=255.255.255.255
#重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
#设置路由
route add -host 192.168.67.200 dev lo:0
route -n
systemctl stop firewalld
setenforce 0
#关闭防火墙
#下载依赖环境
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
#创建管理用户
useradd -M -s /sbin/nologin nginx
#编译安装ngnix
cd /opt
tar -xf nginx-1.18.0\ .tar.gz
#解压缩软件包
cd nginx-1.18.0 #进入源码包
#搭建编译环境
./configure --prefix=/apps/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
make -j2 && make install
#编译并安装
#软连接 添加到环境变量中
ln -s /apps/nginx/sbin/nginx /usr/local/sbin/
#添加到systemd系统服务中
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
ExecStart=/apps/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx
#开启服务
systemctl status nginx
#查看运行状态
vi /apps/nginx/conf/nginx.conf
#编辑主配置文件,布置四层代理
stream {
upstream backend {
server 192.168.67.100:80; #节点服务器1
server 192.168.67.101:80; #节点服务器2
}
server {
listen 8080;
proxy_pass backend;
}
}
nginx -t
nginx -s reload
#重新加载
#测试
curl 192.168.67.102:8080 #x2
#默认备服务器已经编译安装nginx
scp /apps/nginx/conf/nginx.conf 192.168.67.103:`pwd`
#将配置文件远程拷贝到被备服务器
#前往备服务器查看是否拷贝成功
nginx -t
nginx -s reload
#重新加载
#测试是否轮询成功
curl 192.168.67.103:8080 #x2
#回到主服务器
yum install keepalived -y
#安装服务
#编写一个判断nginx是否正常启动,如果没有正常启动则立刻关闭keepalived服务,防止主备之间发生脑裂状况的脚本,并给脚本加上执行权限
vi /etc/keepalived/check_nginx.sh
#编辑脚本
#!/bin/bash
if ! killall -0 nginx #表示如果nginx没有在启动则启用下面的命令
then
systemctl stop keepalived #关闭keepalived
fi
#检测脚本是否有用
systemctl restart nginx keepalived
#开启两个软件
systemctl stop nginx
#关闭nginx
bash check_nginx.sh
#运行脚本
#如果是最小化安装是没有kill命令的,需要安装
yum install -y psmisc
vi /etc/keepalived/keepalived.conf
#编辑配置文件
#备服务器默认安装了keepalivsd
scp check_nginx.sh keepalived.conf 192.168.67.103:`pwd`
#将配置文件和脚本文件一起传送给备服务器
systemctl stop firewalld
setemforce 0
#关闭防火墙
vi /etc/keepalived/keepalived.conf
#编辑配置文件
#前往主服务器
ip a
#前往备服务器
ip a
#现在使主服务器上nginx挂掉
systemctl stop nginx keepalived
#关掉两个服务
或
poweroff
#直接关机
#现在前往备服务器
ip a