高可用冗余服务的作用:
- 避免单点故障
实现方式:
- keepalived服务软件
主要原理:
- vrrp协议(虚拟路由冗余协议)
keepalived高可用原理
- 首先将多态主机逻辑组成一台客户端访问的逻辑vip地址
- 1.利用vrrp协议进行主备通讯
- 2.利用vrrp协议进行主备竞选
- 3.利用vrrp协议主向备发送组播包。当备服务器接收不到组播包,主服务器释放资源给备服务器
- 4.利用vrrp协议但不传输密文信息。当主服务器恢复上线时,主服务器回抢占备服务器资源
双主高可用作用
正常情况下只用一个vip访问的请求都会发送到lb01这个服务器上面,这时候lb02备用服务器真的是备用,起不到一点作用。只有主坏了,才会体现lb02的价值。
我们可以再生成一个vip作为lb01和lb02的备用vip。这样相当于有四台,每两台一主一备,并且互为主备。
这时10.0.0.4和10.0.0.3这两个vip可以分别访问不同的资源并互为主备
例如:
www.abc.com 10.0.0.3
blog.abc.com 10.0.0.4
双主高可用服务部署过程
1.架构环境准备
lb01 10.0.0.5 nginx keepalived (主)
lb02 10.0.0.6 nginx keepalived (备)
web01 10.0.0.7 nginx
web02 10.0.0.8 nginx
web03 10.0.0.9 nginx
2.web服务器环境
vim /etc/nginx/conf.d/www.conf server { listen 80; server_name www.abc.com www.jd.com; root /html/www; index index.html; } web01服务器首页文件 # cat /html/www/abc.html web01 www.abc.com web02服务器首页文件 # cat /html/www/abc.html web02 www.abc.com web03服务器首页文件 # cat /html/www/abc.html web03 www.abc.com
在lb01服务器上测试后端节点是否正常:
#curl -H host:www.abc.com 10.0.0.7/abc.html web01 www.abc.com #curl -H host:www.abc.com 10.0.0.8/abc.html web01 www.abc.com #curl -H host:www.abc.com 10.0.0.9/abc.html web01 www.abc.com
3.安装负载均衡服务并进行配置
upstream oldboy { server 10.0.0.7:443; server 10.0.0.8:443; server 10.0.0.9:443; } server { listen 10.0.0.3:80; listen 10.0.0.4:80; server_name localhost; rewrite ^/(.*)$ https://$host/$1 redirect; } server { listen 443 ssl; server_name localhost; ssl_certificate server.crt; ssl_certificate_key server.key; location / { proxy_pass https://oldboy; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } }
注意事项:
01. nginx程序涉及到IP地址修改,必须重启nginx
02. 监听的地址必须是本地网卡上有的地址
如何监听网卡上没有的地址:
解决方法:
echo ‘net.ipv4.ip_nonlocal_bind = 1’ >>/etc/sysctl.conf
sysctl -p
4.在lb01 lb02上安装keepalived服务 并编写keepalived配置文件
yum install -y keepalived
lb01的keepalived配置
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived --- 注释说明 global_defs { --- 全局配置 notification_email { --- 设置通知邮箱地址信息 acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id lb01 --- 标识每个主机身份名称 } vrrp_instance oldboy { --- 设置一个家族 state MASTER --- 设置一个主机为主服务器(期望) (MASTER BACKUP) interface eth0 --- 设置指定网卡上生成VIP地址 virtual_router_id 63 --- 设置主备一致 家族数值标识 priority 110 --- 优先级越高,越有可能成为主 advert_int 1 --- 组播包发送间隔 authentication { --- 设置组播通讯认证进制 auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 --- 设置lb01主VIP地址数值信息 } } vrrp_instance oldgirl { state BACKUP interface eth0 virtual_router_id 64 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.4 --- 设置lb01备VIP地址数值信息 } }
lb02的keepalived配置
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived --- 注释说明 global_defs { --- 全局配置 notification_email { --- 设置通知邮箱地址信息 acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id lb02 --- 标识每个主机身份名称 * } vrrp_instance oldboy { --- 设置一个家族 state BACKUP --- 设置一个主机为主服务器(期望) (MASTER BACKUP) * interface eth0 --- 设置指定网卡上生成VIP地址 virtual_router_id 63 --- 设置主备一致 家族数值标识 priority 100 --- 优先级越高,越有可能成为主 * advert_int 1 --- 组播包发送间隔 authentication { --- 设置组播通讯认证进制 auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 --- 设置lb02主VIP地址数值信息 } } vrrp_instance oldgirl { state MASTER interface eth0 virtual_router_id 64 priority 110 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.4 --- 设置lb02备VIP地址数值信息 } }
lb01,lb02重启keepalived服务
systemctl start keepalived.service
5.测试双主keepalived是否配置生效
关闭lb01keepalived服务
systemctl stop keepalived
在lb02查看10.0.0.3vip是否漂移至此服务器
如果此时lb01服务器宕机,这是lb02就承担了10.0.0.3和10.0.0.4这两个资源的访问请求处理工作
赞赏
微信赞赏
支付宝赞赏