[TOC]
### **主机规划**
《LVS + Keepalived + DR》
LVS主机:192.168.2.101
RS主机 :192.168.2.102,192.168.2.103
VIP:192.168.2.110
### **前置操作**
* 关闭firewalld、selinux(所有主机)
* 设置ip_forward为1(所有主机)
* 在102主机上安装nginx,在103主机上安装httpd,监听80端口
### **RS主机**
1、配置lo网卡
编辑`/etc/sysconfig/network-scripts/ifcfg-lo`,内容更改为如下,把lo网卡的IP配置为VIP
```
DEVICE=lo
IPADDR=192.168.2.110
NETMASK=255.255.255.255
BROADCAST=192.168.2.110
ONBOOT=yes
NAME=loopback
```
然后重启网络
```
$ sudo systemctl restart network
```
查看lo网卡多了刚才的IP
```
$ ip addr show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.2.110/32 brd 192.168.2.110 scope host lo
valid_lft forever preferred_lft forever
```
2、配置ARP系统参数
修改`/etc/sysctl.conf`,在文件尾部添加如下内容
```
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
```
然后执行以下命令生效
```
$ sysctl -p
```
### **LVS主机**
1、安装ipvsadm
```
$ yum -y install ipvsadm
```
2、安装keepalived
```
$ yum -y install keepalived
```
3、配置keepalived
编辑`/etc/keepalived/keepalived.conf`文件,内容如下
```
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER #备用服务器上为 BACKUP
interface eth0 # 网卡
virtual_router_id 110 # 注意不要和其他keepalived集群冲突
priority 100 #优先级,数值越大优先级越高;备用服务器上为90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.110
}
}
virtual_server 192.168.2.110 80 {
delay_loop 6 #(每隔6秒查询realserver状态,是否存活)
lb_algo rr #(轮询算法)
lb_kind DR #(DR模式)
persistence_timeout 0 #(同一IP的连接多少秒内被分配到同一台realserver,0表示不连接)
protocol TCP #(用TCP协议检查realserver状态)
real_server 192.168.2.102 80 {
weight 100 #(权重)
TCP_CHECK {
connect_timeout 10 #(10秒无响应超时)
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.103 80 {
weight 100
TCP_CHECK {
connect_timeout 10
delay_before_retry 3
connect_port 80
}
}
}
```
4、启动keepalived
```
$ systemctl enable keepalived && systemctl start keepalived
```
5、查看转发规则
```
$ ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.110:80 rr
-> 192.168.2.102:80 Route 100 0 0
-> 192.168.2.103:80 Route 100 0 0
```
### **访问**
注意访问的时候不能够在lvs主机上使用vip进行访问,会访问不通。我们在这三台主机以外的主机进行访问。
我们在这三台主机以外的一台主机上进行访问,如下:
> 这是访问到了httpd,103主机

> 这是访问到了nginx,102主机

### **FAQ**
**Q:是否可以不装keepalived,直接在网卡上配置vip?**
A:可以的,keepalived的作用有两个:一是在网卡上配置vip,二是通过ipvsadm命令配置ipvs的转发规则
**Q:`arp_ignore`和`arp_annouce`的作用是什么?**
A:参考google
**Q:按照上面的轮询配置,应该是102一次,103一次,但是实际结果并不是这样,为什么?**
A:原因未知
可能参考:https://ieevee.com/tech/2017/08/15/lvs-persistence.html
**Q:当我们执行一次访问后,ipvsadm -L -n -c 命令会有如下输出,代表什么意思?**
```
$ ipvsadm -L -n -c
IPVS connection entries
pro expire state source virtual destination
TCP 14:56 ESTABLISHED 192.168.2.1:54648 192.168.2.110:80 192.168.2.102:80
TCP 14:57 ESTABLISHED 192.168.2.1:54647 192.168.2.110:80 192.168.2.103:80
```
### **Reference**
* https://www.cnblogs.com/MacoLee/p/5856858.html
* https://blog.51cto.com/cuchadanfan/1661576
- 常用命令
- 用户与用户组
- 创建用户与用户组
- 快速脚本
- umask
- Yum源
- 基础Yum源
- Epel源
- 制作Yum源
- 同步Yum源
- 为Yum源配置代理
- 下载RPM及依赖
- 系统与内核
- 获取内核的rpm包
- 升级内核
- Iptables
- 基本语法
- 匹配条件
- 基础匹配条件
- 扩展匹配条件
- Addrtype
- Set
- TCP
- Mark
- Multiport
- 目标
- 基本目标
- 扩展目标
- DNAT
- LOG
- CT
- NOTRACK
- MARK
- IP set
- 连接追踪
- 初识连接追踪
- 连接追踪详解
- NAT
- 思路与参考汇总
- 数据结构
- FAQ
- Keepalived
- 单网卡多VIP
- 安装Keepalived
- 双网卡绑VIP
- 别名VIP和辅助VIP
- LVS
- 安装LVS
- Ipvsadm命令
- 磁盘与分区
- 基础知识
- 创建分区
- 格式化与挂载
- Fstab
- LVM
- LVM扩容
- Swap分区
- Tmpfs
- 网络相关
- 重命名网卡
- resolv.conf
- Tcpdump
- nslookup与dig
- ifcg-xxx
- 主机名
- 软件安装
- NFS
- Squid
- Redsocks
- Shadowsocks
- 时钟同步
- Chrony
- FTP
- 文件句柄
- 简介
- 设置文件句柄
- 其他
- SSH密钥登录
- 进程组-会话-终端
- X11转发
- 环境变量
- 常见问题
- 系统进程数
- 系统调用
- 系统调用FAQ
- 用户程序如何进行系统调用
