00.课程介绍部分
1.高可用服务概念介绍
2.高可用服务部署过程
3.高可用服务常见问题
4.高可用服务安全配置
5.高可用服务双主配置
01.课程知识回顾
1.负载均衡的两个模块
upstream 模块 实现负载均衡
第一种:根据能力进行分配 ip后加weight=x; 按比例进行权重分配资源
第二种:根据后端节点健康状态分配
max_fails=3; 问题节点发送请求次数
fail_timeout=5s; 再次发送时间
第三种:热备节点 backup (所有节点都坏了才行)
第四种:根据节点连接数进行分配 添加 least_conn (连接数少的多分配)
第五种:源IP地址哈希值分配 ip_hash
proxy 模块 实现反向代理
功能一:解决访问网站时看到不同的页面
proxy_set_header Host $host;
功能二:web节点中显示真实用户IP地址
proxy_set_heade X-Forwarded-For $remote_addr;
功能三:根据页面显示信息进行健康检查
proxy_next_upstream error timeout http_403 http_404;
配置之后一定显示正确页面
2.利用负载均衡实现动静分离
写三个upstream
三个location
3.根据客户端显示不同页面的信息
location中加if 判断语句
02.高可用冗余服务介绍
作用说明:避免单点故障
哪里会出现单点故障?
01.负载均衡服务
02.数据库服务 高可用(MHA)
03.存储服务器 NFS如何实现高可用 keepalived实现高可用(脚本) heartbeat+drbd(同步数据)
04.备份服务器 再加一台备份服务器 数据同步
实现方式:利用keepalived服务软件
keepalived软件介绍:
01.利用keepalived软件实现管lvs服务
02.利用keepalived软件实现后端节点健康检查功能
03.利用keepalived软件可以实现冗余功能 **
利用keepalived如何实现了高可用(原理)
利用了vrrp协议:
03. 高可用服务部署过程:
架构环境准备:
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
第一步:web服务器环境
web-www.conf
server {
listen 80;
server_name www.oldboy.com www.jd.com;
root /html/www;
index index.html;
}
web01:
# cat /html/www/oldboy.html
web01
web02:
# cat /html/www/oldboy.html
web02
web03:
# cat /html/www/oldboy.html
web03
测试后端节点:
curl -H host:www.oldboy.com 10.0.0.7/oldboy.html
curl -H host:www.oldboy.com 10.0.0.8/oldboy.html
curl -H host:www.oldboy.com 10.0.0.9/oldboy.html
第二步:安装负载均衡服务并进行配置
编写nginx配置文件
upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://oldboy;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
第三步:安装keepalived服务 lb01 lb02
yum install -y keepalived
第四步:编写lb01中 keepalived配置文件 lb01和lb02配置文件需更改
# 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 LVS_DEVEL ---标识每个主机身份名称
}
需一致 vrrp_instance VI_1 { ---设置一个家族
需要改 state MASTER ---设置一个主机为主服务器
interface eth0 ---设置指定网卡上生成VIP地址
需一致 virtual_router_id 51 ---设置主备一致,数值需要相同
需要改 priority 100 ---优先级越高,越有可能成为主
advert_int 1 ---组播包发送间隔(接收与发送也需要相同)
authentication { ---设置组播通讯认证进制
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
需要改 10.0.0.3 ---设置vip地址数值信息
}
}
systemctl restart keepalived.service
04.keepalived高可用服务常见问题
1.高可用脑裂问题(高可用集群中,多台主机都有vip地址了)
出现原因:主服务器还活着,备服务器收不到组播报
01.防火墙服务开启了,阻止组播报通讯
02.主备服务器之间心跳线出现问题
03.仲裁服务器出现服务器
如何监控发现出现了脑裂问题:
lb02编写监控脚本 --- 监控备服务器有没有出现vip地址
备服务器出现vip原因
1.正常主备切换
2.出现了脑裂问题
#!/bin/bash
ip a|grep 10.0.03 &>/dev/null
if [ $? -eq 0 ]
then
echo "master and backup change"|mail -s "check keepalived server 971115"@163.com
fi
2.keepalived存在价值
nginx负载均衡服务停止 keepalived服务也应该停止运行
第一步:编写监控nginx服务状态脚本
方法一:监控nginx服务进程状态
ps -ef|grep nginx
方法二:监控nginx服务端口状态
netstat -lntup|grep 80
#!/bin/bash
port_info=$(netstat -lntup|grep -w 80|wc l)
if [ port_info -eq 0 ]
then
systemctl stop keepalived
fi
第二步:将脚本信息调用到keepalived配置文件中
在配置文件中添加
vrrp_script check_web { ---定义需要监控脚本文件信息
script "/server/scripts/check_web.sh" ---绝对路径定义脚本文件所在位置/执行权限
interval 2 ---脚本执行间隔周期
weight 2 ---值 分为正值和负值
}
在配置文件中的vrrp下添加
track_script { --- 定期运行监控脚本
check_web
}
curl www.oldboy.com --> 不等于200
如何取出状态码信息
curl-I www.oldboy.com -s |awk 'NR==1{print $2}'
curl -I www.oldboy.com -o /dev/null -s -w "%{http_code}\n"
05.企业中服务网络安全访问配置
目的:尽可能不暴露企业服务器IP地址信息给客户
第一步:修改lb负载均衡配置文件 (监听改成只监听10.0.0.3)
upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
server {
listen 10.0.0.3:80;
server_name localhost;
location / {
proxy_pass http://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
06.课程知识总结说明
1.keepalived服务配置过程(配置文件如何修改)
查看日志:tail -f /var/log/messages
2.keepalived服务配置常见问题
1.脑裂问题
2.keepalived服务存储价值(nginx关闭keepalived也需要关闭)
3.实现将网站物理IP不暴露给用户
nginx地址监听功能:监听 vip
07.作业:
研究keepalive配置文件中weight参数作用
假定weight值为W,初始的优先级为P
当weight值小于0时:
如果检测脚本返回值=0,则节点最终优先级不改变;
如果检测脚本返回值≠0,则节点最终优先级=P-W,优先级会减小。
当weight值大于0时:
如果检测脚本返回值=0,则节点最终优先级=P+W,优先级会增加;
如果检测脚本返回值≠0,则节点最终优先级不改变。
编写监控网站页面是否正常的脚本:
#!/bin/bash
code_info="$(curl -I -s -o /dev/null -w "%{http_code}\n" -H hosts:www.oldboy.com 10.0.0.3)"
if [ $code_info -eq 200 ]
then
exit 0
else
exit 1
fi
权重数值为负值
问题解决: 数据库备份恢复后, root用户密码失效了
mysql数据库:
备份数据库: 所有数据信息 -转换-> 命令信息(SQL)
恢复数据库: 执行SQL语句 创建库 创建表 添加没有信息
mysql.user: 用户信息记录表
grant 授权操作 ---> 立即生效
insert 插入操作 ---> 不会立即生效 ---> flush privileges(刷新权限)
恢复完数据之后 ---> flush privileges(刷新权限) --> 识别到root用户的密码信息
第一步: 在web01服务器上备份数据
第二步: 将备份数据传输到52数据库服务器
第三步: 在52数据库服务器中安装mariadb服务, 恢复数据
第四步: 空密码直接进入数据库,刷新权限
第五步: 重新登录数据
mysql -uroot -poldboy123