keepalived是什么
keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
keepalived工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
Nginx通过Upstream模块实现负载均衡
| 主机名 | ip | 系统 | 用途 |
|---|---|---|---|
| Proxy-master | 172.16.147.155 | centos7.5 | 主负载 |
| Proxy-slave | 172.16.147.156 | centos7.5 | 主备 |
| Real-server1 | 172.16.147.153 | Centos7.5 | web1 |
| Real-server2 | 172.16.147.154 | centos7.5 | Web2 |
| Vip for proxy | 172.16.147.100 |
一、实施过程
1、选择两台nginx服务器作为代理服务器。
2、给两台代理服务器安装keepalived制作高可用生成VIP
3、配置nginx的负载均衡
- # 两台配置完全一样
- [root@proxy-master ~]# vim /etc/nginx/nginx.conf
- user nginx;
- worker_processes auto;
- error_log /var/log/nginx/error.log;
- pid /run/nginx.pid;
- include /usr/share/nginx/modules/*.conf;
- events {
- worker_connections 1024;
- }
- http {
- 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 /var/log/nginx/access.log main;
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 65;
- types_hash_max_size 2048;
- include /etc/nginx/mime.types;
- default_type application/octet-stream;
- include /etc/nginx/conf.d/*.conf;
- upstream backend {
- server 172.16.147.154:80 weight=1 max_fails=3 fail_timeout=20s;
- server 172.16.147.153:80 weight=1 max_fails=3 fail_timeout=20s;
- }
- server {
- listen 80;
- server_name localhost;
- location / {
- proxy_pass http://backend;
- proxy_set_header Host $host:$proxy_port;
- proxy_set_header X-Forwarded-For $remote_addr;
- }
- }
- }
Keepalived实现调度器HA
1. 主/备调度器安装软件
- [root@proxy-master ~]# yum install -y keepalived
- [root@proxy-slave ~]# yum install -y keepalived
- [root@proxy-master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
- [root@proxy-master ~]# vim /etc/keepalived/keepalived.conf
- ! Configuration File for keepalived
-
- global_defs {
- router_id directory1 #辅助改为directory2
- }
-
- vrrp_instance VI_1 {
- state MASTER #定义主还是备
- interface ens33 #VIP绑定接口
- virtual_router_id 80 #整个集群的调度器一致
- priority 100 #back改为50
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 172.16.147.100/24 # vip
- }
- }
备用机器也添加配置文件
- [root@proxy-slave ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
- [root@proxy-slave ~]# vim /etc/keepalived/keepalived.conf
- ! Configuration File for keepalived
-
- global_defs {
- router_id directory2
- }
-
- vrrp_instance VI_1 {
- state BACKUP #设置为backup
- interface ens33
- nopreempt #设置到back上面,不抢占资源
- virtual_router_id 80
- priority 50 #辅助改为50
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 172.16.147.100/24
- }
- }
启动keepalived 主备都启动
- [root@proxy-master ~]# systemctl enable keepalived
- [root@proxy-slave ~]# systemctl start keepalived
- [root@proxy-master ~]# ip a
- 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 172.16.147.100/32 scope global lo
- valid_lft forever preferred_lft forever
- inet6 ::1/128 scope host
- valid_lft forever preferred_lft forever
- 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
- link/ether 00:0c:29:ec:8a:fe brd ff:ff:ff:ff:ff:ff
- inet 172.16.147.155/24 brd 172.16.147.255 scope global noprefixroute dynamic ens33
- valid_lft 1115sec preferred_lft 1115sec
- inet 172.16.147.101/24 scope global secondary ens33
- valid_lft forever preferred_lft forever
现在就实现了两台机器的高可用,两台高可用的机器都作为另外两台nginx服务器的负载均衡器,一台机器down掉了,会自动漂移到另一台备用机器上继续访问