离线配置lvs+keepalived+nginx高可用
linux离线配置lvs+keepalived+nginx高可用教程1 环境配置1.1服务器配置1.2工具安装2Keepalived服务器配置2.1配置Keepalived-master2.2配置Keepalived-backup2.3验证master、backup服务器是否配置成功3nginx服务器配置3.1 nginx1(server4)服务器配置3.2 nginx2(server5)服务器配
离线配置lvs+keepalived+nginx高可用
1 环境配置
1.1服务器配置
准备5台虚拟机,作用如下表:
作用名称(虚拟机名称) | IP | 作用描述 |
---|---|---|
192.168.88.66 | 虚拟IP,对外提供的ip,即通过192.168.88.66:端口的方式来访问 | |
Keepalived1(server2) | 192.168.88.70 | lvs主机(master),将请求负载到nginx1或者nginx2 |
Keepalived2(server3) | 192.168.88.71 | lvs备机(backup),将请求负载到nginx1或者nginx2 |
nginx1(server4) | 192.168.88.80 | nginx1将请求负载到后端 |
nginx2(server5) | 192.168.88.81 | nginx2将请求负载到后端 |
testserver(server6) | 192.168.88.30 | 测试机 |
1.2工具安装
在搭建进行配置的过程中可能会出现没有相关工具的提示,所以将所需工具在外网下载后,上传到内网安,如下图。
链接:工具包链接 提取码:6666
将工具包上传到需要进行配置的服务器(两台keepalived机器和两台nginx机器)
#进入工具包目录
cd /home/tools
#安装所有工具包
rpm -Uvh *.rpm --nodeps --force
2 Keepalived服务器配置
2.1配置Keepalived-master
设置DR模式的访问策略。设置客户端进入lvs调度器的入口地址,调度算法是轮询。192.168.88.66为虚拟IP(1.1服务器配置中的虚拟ip),81为其端口(自定义)
ipvsadm -A -t 192.168.88.66:81 -s rr
设置lvs的策略。入口的第一台后端服务器(server4)和第二台后端服务器(server5)的信息(192.168.88.66为虚拟IP,81为其端口,192.168.88.80、192.168.88.81对应server4和server5的ip)
ipvsadm -a -t 192.168.88.66:81 -r 192.168.88.80:81 -g
ipvsadm -a -t 192.168.88.66:81 -r 192.168.88.81:81 -g
开启组播和对应端口。所有Keepalived+lvs服务器都要开启组播,不然会发生脑裂状况
/sbin/iptables -I INPUT -i eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
/sbin/iptables -I OUTPUT -o eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
开启端口,不然VIP的该端口无法正常访问,所有Keepalived服务器都需要开启,本例使用81端口
/sbin/iptables -I INPUT -p tcp --dport 81 -j ACCEPT
离线安装Keepalived
解压缩压缩包
tar -zxvf keepalived-2.2.4.tar.gz
解压成功会生成一个keepalived的目录
进入解压后的目录
cd keepalived-2.2.4
编译,–prefix用于指定安装目录,自定义
./configure --prefix=/usr/local/keepalived
安装
make && make install
编译完成后
ll /usr/local/keepalived/
出现以下结果则Keepalived安装成功
将Keepalived做成服务和并设置自启动
/usr/local/keepalived是keepalived的安装路径,与2.2中–prefix指定的对应
/home/keepalived-2.2.4是keepalived解压后的路径
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /home/keepalived-2.2.4/keepalived/etc/init.d/keepalived /etc/init.d/
给Keepalived添加执行权限
chmod 755 /etc/init.d/keepalived
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
编写配置文件
vi /etc/keepalived/keepalived.conf
文件内容如下:
global_defs {
router_id LVS_MASTER #名称标记为master,名字随便取
3 vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER #指定当前节点为master节点,只能有一个master,其余只能是backup
interface ens33 #绑定此虚拟路由使用的网卡的名称,使用ifconfig或者ip addr查看
virtual_router_id 51 #指定虚拟路由id,虚拟路由的唯一标识,范围是0-255,mater和backup节点需要指定一样的,相同id为一组
priority 200 #指定当前结点的优先级,master节点要大于backup节点。
advert_int 1 #指定发送VRRP通告的间隔,单位是秒
authentication {
auth_type PASS #鉴权认证,为pass或者ha
auth_pass 123456 #鉴权访问密码,自己更改,pass密码最长为8位
}
virtual_ipaddress {
192.168.88.66 #指定虚拟ip,自己定义的虚拟ip
}
}
#lvs配置
virtual_server 192.168.88.66 81 { #设置LVS的VIP地址和端口
delay_loop 6 #服务轮询(健康检查)的间隔,检查真实主机的间隔
lb_algo rr #负载均衡策略,这里为rr
lb_kind DR #调度器类型,这里选择为DR,DR模式要求负载均衡器必须与物理网卡在同一个网段
#persistence_timeout 1 #是否启用持久连接,会话保持时长
protocol TCP #健康检查协议,指定了访问后台真实主机的协议类型
#nginx1的配置
real_server 192.168.88.80 81 { #nginx1的ip和端口
weight 1 #指定当前主机的权重
TCP_CHECK {
connect_timeout 10 #指定了进行心跳检查的超时时间
nb_get_retry 3 #指定心跳超时后的重复次数
delay_before_retry 3 #指定在尝试之前延迟多长时间
}
}
#nginx2的配置
real_server 192.168.88.81 81 { #nginx2的ip和端口
weight 1 #指定当前主机的权重
TCP_CHECK {
connect_timeout 10 #指定了进行心跳检查的超时时间
nb_get_retry 3 #指定心跳超时后的重复次数
delay_before_retry 3 #指定在尝试之前延迟多长时间
}
}
}
注意事项:
virtual_router_id在一个集群中必须一样
state的MASTER和BUCKUP必须大写
priority:主备优先级,MASTER要比BACKUP大
authentication:主备之间的认证方式,一般使用pass即可,主备配置必须一致,否则无法通讯;密码不能大于8位
virtual_ipaddress允许配置多个
重启keepalived
systemctl restart keepalived
查看状态
systemctl status keepalived
keepalived启动成功
2.2配置Keepalived-backup
除了配置文件部分不一样,其他步骤与2.1配置Keepalived-master步骤一样。
编写配置文件
vi /etc/keepalived/keepalived.conf
文件内容如下:
global_defs {
router_id LVS_BACKUP_1 #名称标记为backup,随便取名
3 vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP #指定当前节点为backup节点,只能有一个master,其余只能是backup
interface ens33 #绑定此虚拟路由使用的网卡的名称,使用ifconfig或者ip addr查看
virtual_router_id 51 #指定虚拟路由id,虚拟路由的唯一标识,范围是0-255,mater和backup节点需要指定一样的,相同id为一组
priority 199 #指定当前结点的优先级,master节点要大于backup节点
advert_int 1 #指定发送VRRP通告的间隔,单位是秒
authentication {
auth_type PASS #鉴权认证,为pass或者ha
auth_pass 123456 #鉴权访问密码,自己更改,pass密码最长为8位
}
virtual_ipaddress {
192.168.88.60 #指定虚拟ip,自己定义的虚拟ip
}
}
#设置lvs配置
virtual_server 192.168.88.60 81 { #设置LVS的VIP地址和端口
delay_loop 6 #服务轮询(健康检查)的间隔,检查真实主机的间隔
lb_algo rr #负载均衡策略,这里为rr
lb_kind DR #调度器类型,这里选择为DR,DR模式要求负载均衡器必须与物理网卡在同一个网段
#persistence_timeout 1 #是否启用持久连接,会话保持时长
protocol TCP #健康检查协议,指定了访问后台真实主机的协议类型
#nginx1的配置
real_server 192.168.88.80 81 { #nginx1的ip和端口
weight 1 #指定当前主机的权重
TCP_CHECK {
connect_timeout 10 #指定了进行心跳检查的超时时间
nb_get_retry 3 #指定心跳超时后的重复次数
delay_before_retry 3 #指定在尝试之前延迟多长时间
}
}
#nginx2的配置
real_server 192.168.88.81 81 { #nginx2的ip和端口
weight 1 #指定当前主机的权重
TCP_CHECK {
connect_timeout 10 #指定了进行心跳检查的超时时间
nb_get_retry 3 #指定心跳超时后的重复次数
delay_before_retry 3 #指定在尝试之前延迟多长时间
}
}
}
2.3验证master、backup服务器是否配置成功
验证方法:master和backup同时运行Keepalived时,虚拟ip漂移到master,直到master停止Keepalived,虚拟ip漂移到优先级更高的backup。若两台backup优先级相同,虚拟ip随机漂移到其中一台backup。
server2、server3同时开启Keepalived
systemctl restart keepalived
查看server2(master)的网卡
ip a
查看server3(backup)的网卡
ip a
由server2和server3的网卡信息可知,虚拟IP(192.168.88.60)漂移到了server2(master)。
停止server2(master)的Keepalived
systemctl stop keepalived
查看server2(master)的网卡
ip a
查看server3(backup)的网卡
ip a
由于server2(master),停止了Keepalived,所以虚拟IP(192.168.88.60)漂移到了server3(backup)。
以上为验证成功。
若虚拟IP漂移到了两台或多台启动Keepalived服务的机器,说明发生了脑裂,需要开启组播,即2.1中
/sbin/iptables -I INPUT -i eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
/sbin/iptables -I OUTPUT -o eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
3 nginx服务器配置
3.1 nginx1(server4)服务器配置
开启端口,不然无法正常访问对应服务器的nginx
/sbin/iptables -I INPUT -p tcp --dport 81 -j ACCEPT
安装pcre,把pcre-8.43.tar.gz上传到 /home/目录下,进入并解压
cd /home/
tar -zxvf pcre-8.43.tar.gz
进入解压后的目录编译安装
cd /home/pcre-8.43
./configure --prefix=/etc/pcre
make && make install
安装libtool,把libtool-2.4.2.tar.gz上传到 /home/目录下,进入并解压
cd /home/
tar -zxvf libtool-2.4.2.tar.gz
进入解压后的目录编译安装
cd libtool-2.4.2
./configure --prefix=/etc/libtool
make && make install
安装nginx
cd /home/
tar -zxvf nginx-1.14.2.tar.gz
进入解压后的目录编译安装
cd /home/nginx-1.14.2
./configure --prefix=/etc/nginx
./configure --prefix=/etc/nginx
在编译时可能会报缺少pcre的错误,用下面这条命令替代即可
./configure --prefix=/etc/nginx --with-pcre=/home/pcre-8.43
编译完成再进行安装即可
make && make install
配置nginx启动服务
vi /usr/lib/systemd/system/nginx.service
文件内容如下:
// 以下配置成功的前提是nginx的安装路径为/etc/nginx/
[Unit]
Description=The Nginx HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/etc/nginx/sbin/nginx
ExecReload=/etc/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT ${MAINPID}
[Install]
WantedBy=multi-user.target
赋予执行权限
chmod +x /usr/lib/systemd/system/nginx.service
重载systemctl命令
systemctl daemon-reload
修改nginx配置文件
vi /etc/nginx/conf/nginx.conf
文件内容如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 81;
#listen 1:8080;
server_name somename alias another.alias;
location / {
root html;
index index.html index.htm;
}
}
}
编辑nginx的默认页面(主要用于测试nginx的访问情况)
vi /etc/nginx/html/index.html
<html>
<body>
<h1>Welcome to nginx!</h1>
<h1>this ip is nginx1: 192.168.88.80:81</h1>
</body>
</html>
编写脚本,把虚拟ip绑定在nginx服务器的回环接口上,并且停掉ngixn服务器的包转发和arp响应
vi /etc/init.d/lvsrs
脚本内容如下:
SNS_VIP=192.168.88.66 #虚拟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/lvsrs
chmod 755 /etc/rc.d/init.d/functions
执行脚本
sh /etc/init.d/lvsrs start
重启nginx
systemctl restart nginx
3.2 nginx2(server5)服务器配置
与3.1步骤一致
3.3 测试nginx配置是否成功
#登入测试机器(server6),访问nginx1(server4)
curl 192.168.88.80:81
出现下面内容说明访问成功
访问nginx2(server5)
curl 192.168.88.81:81
出现下面内容说明访问成功
4 测试高可用
测试通过虚拟ip访问nginx的服务
登入测试机器(server6),多次访问虚拟IP:端口
curl 192.168.88.66:81
由上图可见每次通过相应的端口访问虚拟ip都会随机负载到nginx的服务器上。
更多推荐
所有评论(0)