主从模式
集群特点及其功能
① 高可用性与可扩展性(为满足需求动态加入节点)
高可用指的是24小时不间断使用,可扩展性指的是能满足需求动态加入节点。
② 负载均衡与错误恢复
负载均衡主要用于分流。而错误恢复指的是当一个任务在一个节点没有完成时因为某种原因执行失败,此时另一个服务节点就会接着完成此任务,等出错的节点恢复好后重新回到这个集群。
③ 漂移IP地址
漂移IP地址又叫做VIP,也就是虚拟IP,这个IP不是服务器固定的IP,可能一会在这个节点,也可能出现在另一个节点。例如正常情况下VIP位于主节点上,当主节点出现故障后,漂移IP地址自动切换到备用节点,因此为了保证服务的不间断,在集群系统中对外提供的服务IP一定要是这个VIP,否则如果是节点本身对外提供服务的话,当该节点失效后服务切换到另一个节点,但是服务IP仍是故障IP地址。
安装nginx
这里提供一个centos7安装nginx的传送门
链接: centos7安装nginx
安装keepalived
yum -y install keepalived
快速入门
安装成功后,两台机子都需要安装nginx和keepalived,进入目录 /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_script chk_http_port {
script "/opt/nginx_check.sh" # 自己设置脚本放置路径
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER # 主机
interface ens33
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.179/24 dev ens33 label ens33:1 # 虚拟ip
}
}
备用机
! 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_script chk_http_port {
script "/opt/nginx_check.sh" # 自己设置脚本放置路径
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 备用机
interface ens33
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 一定要比主机的优先级低
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.179/24 dev ens33 label ens33:1 # 虚拟ip
}
}
脚本
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
ps -C nginx --no-header|wc -l
解释:如果值为0,即代表服务未启动;如果值为非0,即代表服务已启动
killall keepalived
解释:这个是以服务名称杀死进程
对于整个脚本的解释:
判断nginx 服务是否启动
如果未启动,执行启动命令
再次判断,如果启动失败,关掉keepalived,进入从节点
======================================================
均关闭防火墙和selinux(这里均为临时关闭)
systemctl stop firewalld
setenforce 0
开启keepalived服务
systemctl start keepalived.service
开启nginx(如果是按上方安装教程,进入到下图文件夹里)
./nginx
或者执行命令,将nginx添加到全局变量
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
使用命令启动即可
nginx
======================================================
使用
ip addr
这是主机上的,备用机如下
现在关闭主机的keepalived服务
systemctl stop keepalived.service
主机
备用机