#lvs负责负载均衡,将访问按算法分配到后端的应用服务器
#keepalived负责高可用,如果一台挂掉,将VIP换到备用的上边
#nginx做静态web服务器
1.环境准备(使用的是centos7mini安装,没有防火墙,但是要关掉selinux!!!)
master:192.168.126.146(lvs+keepzlived)
slave:192.168.126.147(lvs+keepzlived)
web1:192.168.126.145(nginx1)
web2:192.168.126.148(nginx2)
本地作为客户端访问测试
2.master的配置(部署lvs和keepalived)
2.1》yum下载lvs和keepalived
yum -y install ipvsadm keepalived
#执行ipvsadm和启动keepalived后都会加载ip_vs模块
#查看是否加载了ip_vs模块
lsmod | grep ip_vs
2.2》配置lvs虚拟ip以及后端真实ip
ipvsadm -A -t 192.168.126.100:80 -s rr
ipvsadm -a -t 192.168.126.100:80 -r 192.168.126.145:80 -g -w 1
ipvsadm -a -t 192.168.126.100:80 -r 192.168.126.148:80 -g -w 1
ipvsadm -ln查看(此处只是查看临时的配置是否生效,最终以keepalived重启后查看的结果为准)
2.3》keepalived的配置文件的修改
#加粗的斜体字都为需要修改的参数
! Configuration File for keepalived
global_defs {
router_id LVS_01
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.126.100
}
}
virtual_server 192.168.126.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 1 #默认客户端连接服务器超时时间,不可设置为0。
设置为0后,启动keepalived会报错:Memory allocation problem(内存分配问题)
protocol TCP
real_server 192.168.126.145 80 {
weight 1
}
real_server 192.168.126.148 80 {
weight 1
}
启动keepalived服务
systemctl start keepalived ##################################AAA文章最后有注解###################
此时再次通过ipvsadm -ln查看,是否显示的为之前设置的虚拟ip和真实ip
并查看/var/log/message日志文件,很重要!!!可以知道keepalived启动过程中是否有错误
3.slave的配置
#按照2.1》2.2》在slave上执行一遍
#将keepalived的配置文件直接复制给slave一份,在此基础上修改部分配置参数
scp /etc/keepalived/keepalived.conf root@192.168.126.147:/etc/keepalived/
state BACKUP
priority 90
4.web端nginx1.2的配置
创建nginx用户并将其添加到组
groupadd nginx
useradd -r -g nginx nginx
通过官网下载稳定版的tar包
http://nginx.org/en/download.html
#通过xshell上传到/usr/local/src下边
#解压到/usr/local下
cd /usr/local
tar -zxvf nginx-1.14.2.tar.gz -C /usr/local
#改名mv nginx-1.14.2/ nginx-1.14/
cd nginx-1.14/
#配置(如果报错,请安装相关需要的软件包)
./configure --prefix=/usr/local/nginx-1.14/
#编译安装
make & make install
#将nginx服务添加到环境变量中(目的是为了对nginx服务进行操作是更方便,添加后启动时只需输入服务名就可以了)
vi /etc/profile
export NGINX_HOME=/usr/local/nginx-1.14
export PATH=$PATH:$NGINX_HOME/bin:$NGINX_HOME/sbin
#修改nginx的配置文件
user nginx;
worker_processes 2; #根据服务器的cpu+核心数设置
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main; #定义日志文件的显示数据和格式
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
charset utf-8; #支持中文
access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#输入nginx进行启动(启动时会报错,缺少配置文件中的几个日志文件,按照报错创建即可)
nginx
nginx -s reload #重新加载nginx的配置文件
nginx -s stop #停止nginx服务
#####arp抑制的设置############
写一个脚a.sh
#/bin/bash
vip=192.168.126.100
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
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
chmod +x a.sh
sh a.sh
#通过ip a s查看虚拟ip是否已经配好
5.测试master是否可以调度nginx
#先访问一台nginx(可以通过nginx的index.html文件来区分访问来自不同的服务器)后,关掉这台服务器,再次访问,如果看到的是另一台nginx显示的页面,证明master可以实现调度。nginx也可以正常访问。
#关掉master的keepalived服务,再次访问,如果仍然可以访问到nginx,说明keepalived集群可以实现高可用。