centos实现三个节点高可用

使用的资源为keepalived和nginx

高可用主机IP地址

192.168.136.131

192.168.136.133

192.168.136.134

nginx负载均衡配置

192.168.136.131

192.168.136.133

192.168.136.134

三台主机的80端口对应

192.168.136.131:8080
192.168.136.131:8083
192.168.136.134:8080
192.168.136.134:8084
192.168.136.133:8080
192.168.136.133:8081

nginx的Web服务器

192.168.136.131的8080、8083

192.168.136.134的8080、8084

192.168.136.133的8080、8081

1、每个节点安装nginx和安装keepalived

1.1 安装nginx 1.16.1 ,参考

https://www.cnblogs.com/programer-xinmu78/p/11791486.html

1.2 安装keepalived

yum -y install keepalived

启动keepalived

systemctl start keepalived
systemctl enable keepalived

2、修改keepalived配置

2.1 修改master节点的/etc/keepalived/keepalived.conf配置文件信息

! Configuration File for keepalived
vrrp_script check_nginx_alive {
script "/usr/bin/check_nginx_alive.sh"
interval 3
weight -10
} global_defs {
router_id lbs_nginx
} vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.136.125
}
track_script {
check_nginx_alive
} } virtual_server 192.168.136.125 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
}

2.2 增加master节点的 执行脚本 /usr/bin/check_nginx_alive.sh,无论主节点还是备节点都需要增加该文件

/usr/bin/check_nginx_alive.sh

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

A=`ps -C nginx --no-header |wc -l`

if [ $A -eq 0 ]
then
echo 'nginx server is died'
killall keepalived
fi

2.3 修改backup节点的/etc/keepalived/keepalived.conf配置文件信息

注意,不同的备节点的优先级不一样, priority 20

! Configuration File for keepalived
vrrp_script check_nginx_alive {
script "/usr/bin/check_nginx_alive.sh"
interval 3
weight -10
} global_defs {
router_id lbs_nginx
} vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 51
priority 20
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.136.125
}
track_script {
check_nginx_alive
} } virtual_server 192.168.136.125 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
}

3、 增加nginx的配置,

3.1 修改nginx的配置文件如下

default.conf 8080端口

default_8084.conf 8084端口

default_lbs.conf 负载均衡配置

server {
listen 8080;
server_name localhost; #charset koi8-r;
#access_log /var/log/nginx/host.access.log main; location / {
root /usr/share/nginx/html;
index index.html index.htm;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
} # proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

3.2 负载均衡端口配置,负载均很名字和要一致,这里是nginx_lbs

upstream nginx_lbs {
server 192.168.136.131:8080 weight=1;
server 192.168.136.131:8083 weight=1;
server 192.168.136.134:8080 weight=1;
server 192.168.136.134:8084 weight=1;
server 192.168.136.133:8080 weight=2;
server 192.168.136.133:8081 weight=2;
} server {
listen 80;
server_name localhost; client_max_body_size 50m;
client_body_buffer_size 256k;
location / {
proxy_pass http://nginx_lbs;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}

4、启动keepalived

4.1 确认nginx的keepalived是否开放

经过查看可以看到131和134的 nginx.conf中的 keepalive_timeout 65;,相当于打开了keepalive

4.2 启动keepalived

启动Master 192.168.136.131和Backup 192.168.136.134 和 Backup 192.168.136.133的 Keepalived节点

systemctl start keepalived

5、查看keepaliced是否已经放开

ip addr 看到地址中是否有浮动地址

http://192.168.136.125可以正常访问了,可以将每个网站下的index.html文件增加相应标识

6、异常情况查看

6.1 每台主机只能访问本主机所有网站和其他主机个别网站,后来发现原因为,防火墙未打开

修改iptables后正常,

命令为:

            vim /etc/sysconfig/iptables
添加8080和8083端口
-A INPUT -m state –state NEW -m tcp -p tcp –dport 8080 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 8083 -j ACCEPT
启动IPTABLES
systemctl enable iptables.service
systemctl start iptables.service
#重启防火墙使配置文件生效
systemctl restart iptables.service

6.2 怎么确认目前的通信信息正常

查看网卡接收的信息

安装tcpdump

yum install -y tcpdump

查看端口vrrp信息

tcpdump -i ens32 vrrp -n

正常情况下,只有一个IP会出现在信息中

6.3 查看keepalived的运行日志

tail -f /var/log/messages

6.4 tcpdump命令看到多个IP的信息,并且主备keepalived服务器上的虚拟IP都增加上了

经过核实原因keepalived需要单独的端口进行通信,目前使用112

通过iptables增加后正常

-A INPUT -p 112 -j ACCEPT

6.5 /etc/keepalived/keepalived.conf 设置中不能增加real_server这个参数,增加real_server后报错,估计目前使用广播和组播进行确认,不需要设置具体的IP地址

估计是哪个版本开始就不用设置了或者换了参数了

centos实现三个节点高可用的更多相关文章

  1. 用Kolla在阿里云部署10节点高可用OpenStack

    为展现 Kolla 的真正实力,我在阿里云使用 Ansible 自动创建 10 台虚机,部署一套多节点高可用 OpenStack 集群! 前言 上次 Kolla 已经表示了要打 10 个的愿望,这次我 ...

  2. Rancher安装多节点高可用(HA)

    Rancher版本:Rancher v1.0.1 基本配置需求 多节点的HA配置请参照单节点需求 节点需要开放的端口 全局访问:TCP 端口22,80,443,18080(可选:用于在集群启动前 查看 ...

  3. Centos7.5基于MySQL5.7的 InnoDB Cluster 多节点高可用集群环境部署记录

    一.   MySQL InnoDB Cluster 介绍MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM, MHA, NDB Cluster, G ...

  4. centos 7 Atlas keepalived 实现高可用 MySQL 5.7 MHA环境读写分离

    目录 简介 相关链接 环境准备 Atlas 环境 MySQL 集群环境 Atlas 安装 和 配置 为数据库的密码加密 修改配置文件 启动 Keepalived 安装配置 安装 master 配置 K ...

  5. kubeadm部署多master节点高可用k8s1.16.2

    一.架构信息 系统版本:CentOS 7.6 内核:3.10.0‐1062.4.1.el7.x86_64 Kubernetes: v1.16.2 Docker­ce: 19.03 推荐硬件配置:2核4 ...

  6. 版本管理工具Git(三)Gitlab高可用

    高可用模式 企业版 社区版 我们这里说一下成本比较低的主备模式,它主要依赖的是DRBD方式进行数据同步,需要2台ALL IN ONE的GitLab服务器,也就是通过上面安装方式把所有组件都安装在一起的 ...

  7. Spring Cloud第三篇 | 搭建高可用Eureka注册中心

    ​ ​本文是Spring Cloud专栏的第三篇文章,了解前两篇文章内容有助于更好的理解后面文章: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring ...

  8. Redis学习三:Redis高可用之哨兵模式

    申明 本文章首发自本人公众号:壹枝花算不算浪漫,如若转载请标明来源! 感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫 22.jpg 前言 Redis 的 Sentinel 系统用于管理多个 Redi ...

  9. [经验交流] Active-Active 方式设置 kubernetes master 多节点高可用

    关于 kubernetes master 多节点以及高可用,网上的方法多采取 Active-Standby 方式,即: 通过 pacemaker 等软件使得某种 master 服务(apiserver ...

随机推荐

  1. micronaut 学习 二 创建一个简单的服务

    micronaut 提供的cli 很方便,我们可以快速创建具有所需特性的应用,以下是一个简单的web server app 创建命令 mn create-app hello-world 效果 mn c ...

  2. 0.学习springmvc补充

    一.我的截图中的程序错误: 其中的路径写的是:"/user/testString" 这样写会错误当tomcat中配置的根目录为"/"或” “成功,但当配置为”x ...

  3. 【JZOJ6233】【20190627】心的旋律

    题目 你需要构造一个\(n\)个点的二分图 定义\(F(A)\)表示左部点集\(A\)能够到达的右部中的点 使得满足 $ F(A) \lt |A| $ 的集合恰好有 $ k $ 个 \(1 \le n ...

  4. list删除、集合遍历删除

    public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); li ...

  5. Gamma阶段第二次scrum meeting

    每日任务内容 队员 昨日完成任务 明日要完成的任务 张圆宁 #91 用户体验与优化https://github.com/rRetr0Git/rateMyCourse/issues/91(持续完成) # ...

  6. Mysql之Incorrect string value: '\xF0\x9F\x98\x89 \xE6... 保存emoji表情

    错误信息如下: Incorrect string value: '\xF0\x9F\x98\x89 \xE6...' 问题产生的原因是字符串不兼容4字节的unicode导致的,一般我们常见的表情编码等 ...

  7. Xamarin.FormsShell基础教程(2)创建Shell解决方案

    Xamarin.FormsShell基础教程(2)创建Shell解决方案 创建Shell解决方案 在开发Shell的应用程序时,首先需要创建一个Shell解决方案,其具体操作步骤如下: (1)在VS的 ...

  8. 使用JSP的fmt标签实现国际化支持 - smart-framework ; smart-plugin-i18n

    使用JSP的fmt标签实现国际化支持   Smart-framework框架使用smart-plugin-i18n插件来完成国际化处理,原理相同,使用过滤器进行参数设置. ============== ...

  9. invalid argument (errno: 22)

    socket通信示例中,当accept客户端时,经常报这个错误. 并且是第一次没有问题,第二次或后面几次都会出现如下问题, 错误码为22, 错误描述为invalid argument. 问题解决如下: ...

  10. laydate.render报错:日期格式不合法

    在使用laydate渲染日期时: laydate.render({ elem: '#day' }); 提示日期格式不合法 需要使用 too.dateType()来包装 <input type=& ...