精华内容
下载资源
问答
  • 宕机服务器停止服务 如果只有一台redis,肯定会造成数据丢失,无法挽救 多台redis或者是redis集群 ,宕机则需要分为在主从模式下区分来看: slave从redis宕机 配置主从复制时候才配置从redis,从会从...

    宕机:服务器停止服务
    如果只有一台redis,肯定会造成数据丢失,无法挽救
    多台redis或者是redis集群 ,宕机则需要分为在主从模式下区分来看:

    1. slave从redis宕机
      配置主从复制的时候才配置从的redis,从的会从主的redis中读取主的redis的操作日志,求达到主从复制。
      1)在Redis中从库重新启动后会自动加入到主从架构中,自动完成同步数据;
      2)如果从数据库实现了持久化,可以直接连接到主的上面,只要实现增量备份(宕机到重新连接过程中,主的数据库发生数据操作,复制到从数据库),重新连接到主从架构中会实现增量同步。
    2. Master 宕机
      假如主从都没数据持久化,此时千万不要立马重启服务,否则可能会造成数据丢失,正确的操作如下:
      1. 在slave数据上执行SLAVEOF ON ONE,来断开主从关系并把slave升级为主库
      2. 此时重新启动主数据库,执行SLAVEOF,把它设置为从库,连接到主的redis上面做主从复制,自动备份数据。
        以上过程很容易配置错误,可以使用redis提供的哨兵机制来简化上面的操作。简单的方法:redis的哨兵(sentinel)的功能。

    哨兵(sentinel)的原理
    在这里插入图片描述
    Redis提供了sentinel(哨兵)机制通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决。

    每个sentinel会向其它sentinal、master、slave定时发送消息(哨兵定期给主或者从和slave发送ping包(IP:port),正常则响应pong,ping和pong就叫心跳机制),以确认对方是否“活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的“主观认为宕机” Subjective Down,简称SDOWN)。

    若"哨兵群"中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称ODOWN),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。

    补充:
    哨兵的配置:

    1. 复制redis中sentinel.conf,根据情况进行配置
      在这里插入图片描述

    可以使用哨兵搭建高可用服务器,哨兵模式还提供其他功能,比如监控、通知、为客户端提供配置等。
    关于使用哨兵搭建高可用服务器,可以参考https://blog.csdn.net/shouhuzhezhishen/article/details/69221517来实现,在此不再细说。

    展开全文
  • 阅读全文,约 12 分钟1、Spring Boot 概述Spring 框架,作为...Spring Boot 出现,就是为了让大家更方便去使用 Spring 框架进行开发,它基于“约定优于配置(COC)”设计理念,它实现了自动化配置解决方案,包括自...
    阅读全文,约 12 分钟

    babe879ca280ca283a114ffd22e2f318.png

    1、Spring Boot 概述

    Spring 框架,作为一个非常优秀的轻量级容器,在企业级项目开发中非常受欢迎,但它在使用期间需要整合众多第三方资源,都会导致配置过于臃肿,这也是令大家非常头疼的问题。

    Spring Boot 的出现,就是为了让大家更方便去使用 Spring 框架进行开发,它基于“约定优于配置(COC)”的设计理念,它实现了自动化配置解决方案,包括自动配置第三方资源,从而简化了 Spring 应用的创建、运行、调试、部署等方便的操作,让开发者更专注在应用业务的实现上。

    其实,Spring Boot 可以想象成一个中介,它是开发者和 Spring 框架的简化沟通平台,有些“手续(应用的配置)”它直接就帮我们办理好了,这些“手续”其实就是业务流程中某些默认的流程(也就是默认的配置),刚好就是上面说的“约定优于配置”的理念。Sprint Boot 的最终目的,就是为了提升开发者在业务实现上的专注度。

    2、Spring Boot 的优势
    •  继承了 Spring 框架自身优秀的特性。

    •  能够让配置更简单,通过自动配置快速搭建 Spring 应用项目。 

    •  能够以 jar 文件形式独立运行项目。

    •  更强大的注解,让业务实现更简化。 

    •  内嵌了常见的 Web 服务器,让你随时使用 Tomcat、Jetty 等。 

    •  提供了企业生产级项目的服务监控方案,让监控更加简单。

    •  还有一些非功能性的通用配置,适应更多的开发需求。

    •  可进行分布式开发,结合 Spring Cloud 进行微服务开发。

    3、搭建 Spring Boot 项目

    3.1 创建 Maven 项目

    第一步:菜单栏中选择 File → New → Project... 弹出下图,然后选择 Maven,再点击 Next 即可。

    503ced3cb6cefd6cfb1a956485ae34e7.png

    第二步:填写组织名称、模块名称、项目版本等相关信息,如下图:

    84b2b41f90aa938f77066b85434e2673.png

    第三步:选择项目的保存位置,如下图:

    84b2b41f90aa938f77066b85434e2673.png

    创建好之后的项目具体目录,如下图:

    21802ec0abe7c0089ca57da124336c3f.png

    创建好之后的项目本地文件夹具体目录,如下图:

    062b7c2c0d1ce9686f667b41615895e2.png

    3.2 关于项目中目录的相关解释

    • src/main/java:用来存储编写好的 Java 源码文件,也就是 xxx.java 文件。

    • src/main/resources:用来存储编写好的配置文件。

    • src/test/java:主要用来存储测试用的 Java 源码文件。

    3.3 添加配置与代码

    第1步:编辑 pom.xml 文件

    pom.xml 文件,全称项目对象模型(Project Object Model)描述文件,作为 Maven 的基础配置文件,常被用来指定项目中的依赖配置。

    接着,我们需要在 pom.xml 文件中添加相关依赖,具体如下:

    首先,使用 标签指定  spring-boot-starter-parent 依赖模块,单从标签名字上来看,就知道它想指定(继承)父类级别的东西。

    在构建 Spring Boot 应用时设置它,也就意味着会自动包含能简化我们工作的自动配置、日志和 YAML 等大量的配置。它作为 Spring Boot 的核心启动器,提供一些 Maven 默认的配置和 dependency-management,能让你快速使用 Spring Boot 进行开发。

    比如,这里指定了 parent 的版本号,当我们在引入其他依赖的时候,就不用再去关心它们的版本号了,在以前是需要考虑的,而且还很容易引起版本冲突。

    编辑 pom.xml 文件

        org.springframework.boot

        spring-boot-starter-parent

        2.2.1.RELEASE

    如果,我们需要进行 Web 开发,还需要指定 spring-boot-starter-web 依赖模块,需要在 pom.xml 文件中添加 元素来进行指定,具体如下:

    指定 web 依赖模块

    org.springframework.boot

            spring-boot-starter-web

    最后,还可以通过 元素来添加插件,比如设置 Spring Boot 的 Maven 插件 Spring Boot Maven plugin,它能够为 Spring Boot 应用提供执行 Maven 操作。此插件,能够将 Spring Boot 应用进行打包为可执行的 jar 或 war 形式的文件,然后以通常的方式来运行。具体配置如下:

    添加 maven 插件

                org.springframework.boot

                spring-boot-maven-plugin

    完整的 pom.xml 文件,具体如下:

    完整的 pom.xml 文件源码

             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

        4.0.0

        com.nx

        SpringDemo

        1.0-SNAPSHOT

            org.springframework.boot

            spring-boot-starter-parent

            2.2.1.RELEASE

                org.springframework.boot

                spring-boot-starter-web

     org.springframework.boot

                    spring-boot-maven-plugin

    第2步:添加 Controller 类

    新建一个 com.nx 的 package,然后添加一个 HelloControler 类,如图位置:

    c764c47458170be78bcfb88e100e9aee.png

    HelloController 控制器类的代码,具体如下:

    HelloController 控制器

    package com.nx.controller;

    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.bind.annotation.RestController;

    @RestController

    public class HelloController {

        @RequestMapping("/hello")

        public String sayHello(){

            return "I Love Spring Boot.";

        }

    }

    @RestController 注解是一个组合注解,它包含了 @Controller 和 @ResponseBody 两个注解,说明它能以 JSON 格式进行响应数据。注解的源码如下:

    @RestController 注解源码

    @Target({ElementType.TYPE})

    @Retention(RetentionPolicy.RUNTIME)

    @Documented

    @Controller

    @ResponseBody

    public @interface RestController {

        @AliasFor(

            annotation = Controller.class

        )

        String value() default "";

    }

    第3步:添加 Spring Boot 启动类

    启动类的路径,需要能够让 spring boot 扫描得到其他的组件,添加位置:

    41e3014e7c7f65d41c3ba638f4bcaa36.png

    SpringBootApp 启动类的代码,具体如下:

    SpringBootApp 启动类

    package com.nx;

    import org.springframework.boot.SpringApplication;

    import org.springframework.boot.autoconfigure.SpringBootApplication;

    // 用于指定 Spring Boot 应用的启动类

    @SpringBootApplication

    public class SpringBootApp {

        public static void main(String[] args) {

            // 从 main 方法中进行启动 Spring 应用中的类

            SpringApplication.run(SpringBootApp.class, args);

        }

    }

    3.4 启动 Spring Boot 项目

    有三种启动方式,具体如下:

    1. 使用 Maven 命令启动

    2. 运行 main 方法启动

    3. 使用 Maven 打包启动

    第1种:使用 Maven 命令启动

    使用 Maven 命令:

    spring-boot:run

    指定项目路径和 Maven 命令,具体如下

    668c7edd51bd4f6e58c5dd24d317ec6f.png

    9853f977595087f7c952b83005f3c435.png

    第 2 种:运行 main 方法启动

    7fee11aae6d505513a228b12c7c17d9a.png

    第 3 种:使用 Maven 打包启动

    需要将 Spring Boot 应用打成一个 jar 包运行。

    首先,在 IDEA 的右边栏中,打开 Maven 即可看到如下页面,双击 package 命令。

    147f38f3da4848d3c9547d2d1b748d26.png

    然后,找到项目所在路径下的 target 文件夹,打开即可看到生成的 jar 文件。

    e98a3290a4631b2d36f289a3e443e77f.png

    最后,通过命令行进入到 jar 文件所在目录下,并执行 java -jar 命令。

    java -jar .\SpringDemo-1.0-SNAPSHOT.jar

    0cc24f416ae174d9300a9763eed0e254.png

    3.5 访问 Spring Boot 应用

    打开浏览器,在地址栏中输入请求地址:

    http://localhost:8080/hello,然后回车进行访问。

    60f88f32350090222e4bf5c918063a78.png

    未完待续,等我下一篇 ~~~a246207b3fb42c3e8f1f85542027bba4.gif

    b916aaa229214f1ab5907cf1bb8c1d20.png

    Java后端编程

    更多Java推文,关注公众号

    展开全文
  • 最近虚拟出来的一台winserver 2012服务器...造成宕机的原因是winserver 2012开启了自动维护任务。开始自动维护任务是正常可以使用的,后来可能是意外断电导致自动维护任务紊乱,经测试自动维护任务一旦运行系统就会宕

    最近虚拟化出来的一台winserver 2012服务器规律性宕机,一开始是每天夜里三点左右宕机,后期变为每二三十分钟宕机。宕机后使用vsphere强制关闭电源,得三十分钟左右才能完全关闭。

    找了很长时间的原因也没找到到底是因为什么,后来发现这篇文章描述的现象和我遇到的现象及其相似,按照文章中方法操作解决了这个困扰了很长时间的问题。

    造成宕机的原因是winserver 2012开启了自动维护任务。开始自动维护任务是正常可以使用的,后来可能是意外断电导致自动维护任务紊乱,经测试自动维护任务一旦运行系统就会宕机。

    那么,怎么关闭自动维护任务呢?

    1、获取权限

    因为自动维护任务为系统级的权限,因此需要获得自动维护任务所需文件的完整访问权限,才能禁用此任务。具体做法如下:

      C:\Windows\System32\Tasks\Microsoft\Windows\TaskScheduler\Maintenance configurator

    属性 --安全-- 高级--更改,增加administrator用户

    属性 --安全--编辑--添加,增加administrator用户完全控制。

    2、禁用计划任务

       任务计划程序--Microsoft--Windows--TaskScheduler

             禁用相应任务。

    关闭自动维护任务后,系统运行正常,目前未发生无故宕机事件。

    展开全文
  • 集群中的服务器会动态变化,服务器会上线、下线或宕机。此时客户端应该能够知道服务器状态变化情况以选择一个最好的服务器提供服务。客户端能获知服务器上下线状态变化。解决方案使用ZooKeeper框架。服务器启动...

    需求概述

    一个集群来提供服务。集群中的服务器会动态变化,服务器会上线、下线或宕机。此时客户端应该能够知道服务器状态的变化情况以选择一个最好的服务器提供服务。

    客户端能获知服务器上下线状态的变化。

    解决方案

    使用ZooKeeper框架。

    服务器启动时先向ZooKeeper集群注册,写入自己的信息。注册的节点是一种临时节点。最好也是序列化的节点

    客户端启动时获取服务器父目录下的子节点列表并注册监听,获取到当前在线的服务器列表并根据连接策略选择服务器连接。在收到服务器状态变化的监听信息后重新获取服务器列表并注册监听。

    代码实现

    分布式服务器 DistributedServer.java

    package com.mrbcy.bigdata.zk;
    
    import java.io.IOException;
    
    import org.apache.zookeeper.CreateMode;
    import org.apache.zookeeper.KeeperException;
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.ZooKeeper;
    import org.apache.zookeeper.ZooDefs.Ids;
    import org.apache.zookeeper.data.Stat;
    
    public class DistributedServer {
        private static String connectString = "amaster:2181,anode1:2181,anode2:2181";
        private static int sessionTimeout = 2000;
        private ZooKeeper zk = null;
        private String hostName;
        private String groupName = "/servers";
    
        public DistributedServer(String hostName) throws Exception{
            this.hostName = hostName;
            this.zk = new ZooKeeper(connectString , sessionTimeout, null);
        }
    
        // 将自己的信息注册到zk集群
        public void registToZK() throws Exception {
            // 判断父目录是否存在,不存在则创建
            Stat groupStat = zk.exists(groupName, false);
            if(groupStat == null){
                zk.create(groupName, "distributed server list".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            }
    
            String registAddr = zk.create(groupName+"/server", hostName.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
    
            System.out.println("Server is starting, reg addr:" + registAddr);
        }
    
        // 下线
        public void offline() throws Exception {
            zk.close();
        }
    }
    

    客户端 DistributedClient.java

    package com.mrbcy.bigdata.zk;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.zookeeper.KeeperException;
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.Watcher.Event.EventType;
    import org.apache.zookeeper.ZooKeeper;
    
    public class DistributedClient {
        private static String connectString = "amaster:2181,anode1:2181,anode2:2181";
        private static int sessionTimeout = 2000;
        private ZooKeeper zk = null;
        private String groupName = "/servers";
    
        // 开始监听服务器列表变化
        public void startListenServerListChange() throws Exception{
            this.zk = new ZooKeeper(connectString , sessionTimeout, new Watcher(){
    
                @Override
                public void process(WatchedEvent event) {
    //              System.out.println(event.toString());
    //              System.out.println(event.getType() + "---" + event.getPath());
    
    
                    // 重新注册监听
                    try {
                        getServerList();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
    
                }
    
            });
    
    
        }
    
        private void getServerList() throws Exception {
            List<String> children = zk.getChildren(groupName, true);
            List<String> servers = new ArrayList<String>();
            for(String child : children) {
                byte[] data = zk.getData(groupName+"/"+child, null, null);
                servers.add(new String(data));
            }
    
            System.out.println("--------------当前服务器列表--------------");
    
            for(String server : servers){
                System.out.println(server);
            }
    
            System.out.println("-----------------------------------------");
        }
    }
    

    服务器启动程序 DynamicServerListTest.java

    package com.mrbcy.bigdata.zk;
    
    import org.junit.Test;
    
    public class DynamicServerListTest {
    
        @Test
        public void testServerUp() throws Exception{
            DistributedServer server1 = new DistributedServer("server01");
            DistributedServer server2 = new DistributedServer("server02");
    
            server1.registToZK();
            server2.registToZK();
    
            Thread.sleep(10000);
    
            server1.offline();
            System.out.println("server01下线...");
    
            Thread.sleep(10000);
            System.out.println("server02下线...");
        }
    }
    

    客户端启动程序 DynamicClientTest.java

    package com.mrbcy.bigdata.zk;
    
    import org.junit.Test;
    
    public class DynamicClientTest {
        @Test
        public void startUpClient() throws Exception{
            DistributedClient client = new DistributedClient();
            client.startListenServerListChange();
    
            Thread.sleep(1000000);
    
        }
    }
    

    测试结果

    服务器端:

    Server is starting, reg addr:/servers/server0000000014
    Server is starting, reg addr:/servers/server0000000015
    server01下线...
    server02下线...
    

    客户端:

    --------------当前服务器列表--------------
    -----------------------------------------
    --------------当前服务器列表--------------
    server02
    server01
    -----------------------------------------
    --------------当前服务器列表--------------
    server02
    -----------------------------------------
    --------------当前服务器列表--------------
    -----------------------------------------
    
    展开全文
  • 解决方案 优点 缺点 Jacob 功能强大 直接调用VBA接口,程序异常复杂;服务器必须是:windows系统+安装Office;服务器端自动化com接口容易产生死进程造成服务器宕机 Apa...
  • 服务器端自动化com接口容易产生死进程造成服务器宕机 Apache POI 对Excel操作功能强大;跨平台 操作word功能比较弱;必须针对doc和docx两种文档格式写不同代码;兼容性差 iTex...
  • Sentinel可以自动监测一个或多个Redis主备实例,并在主实例宕机的情况下自动实行主备倒换。本系列通过作者对Redis Sentinel源码的理解,详细说明Sentinel的代码实现方式。 Sentinel使用Redis内核相同的事件驱动代码...
  • Redis之持久机制(RDB和AOF)

    千次阅读 2020-06-23 17:43:29
    因为Redis是内存数据库,将自己的数据库状态都存在了内存中,如果不想办法将存在内存中的数据库状态保存到磁盘里,如果出现了断电或者服务器宕机的情况,那么在内存中的数据库状态也会消失不见。为了解决这个问题,...
  • MySQL主备+自动切换一、功能介绍1. DRBD2. Pacemake3. Corosync二、安装过程1. 环境准备2. 安装软件3. 配置DRBD4. 初始DRBD5. MySQL安装6. 安装Pacemeka和Corosync7. 编写MySQL切换脚本三、故障模拟测试1. MySQL...
  • 使用 Shell 脚本一键启动 Spring Cloud 所有的服务,专门解决刚刚来电导致所有服务宕机的情况。 做最后的总结 适合人群: 对服务管控追求更加自动化的所有人员。 当前内容版权归码字科技所有并授权显示,盗版必究。...
  • 服务器宕机时:用负载均衡器实现失败转移(failover) 和失败恢复( failback) ,让故障服务器自动下线,故障恢复之后再上线。失败转移(failover) 就是使其自动离线,失败恢复( failback)就是让恢复正常服务器再次...
  • ​ 一、介绍 主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器...本文将要介绍的哨兵,它基于Redis主从复制,主要作用便是解决主节点故障恢复的自动化问题,进一步提高系统的高可...
  • redis主从复制

    2019-09-27 02:41:56
    redis持久方案解决了在硬盘不损坏情况下宕机导致数据丢失问题 为了避免单点故障 redis提供了复制(replication)功能 将数据库复制对个副本部署在不同服务器上,即使有某台服务器出现故障其他服务器依然...
  • 持久和主从复制,可以解决数据冗余备份问题,但是,如果没有人工干预,Redis服务器宕机后,是不能自动恢复。所以,单纯主从复制和持久技术不具备高可用特性。 Redis 要实现高可用就需要哨兵和主从...
  • 最新一代的锐起无盘XP3.1系统独创性地采用多机热备技术,任一服务器宕机都不会影响客户机的正常使用,彻底解决了传统无盘服务器高风险的难题。为了减少服务器数据回写压力,锐起无盘XP3.1采用了客户机内存数据写缓存...
  • 关闭服务器或者宕机时产生影响也不相同,高可用的解决方案也差异巨大。高可用服务策略:分级管理(优先级),超时设置(失效转移),异步调用(消息队列),服务降级,幂等性设计(调用多次和调用一次结果相同)。...
  • Redis主从复制

    2020-09-23 23:12:12
    保证数据保证,当主节点数据宕机时,自动连接到其他服务器 通过复制功能,可能实现数据库读写分离,主数据库主要做写操作,从数据库负责读操作。从而提高服务气负载能力 数据复制是单向,只能从主节点...
  • 灵活报警设置,以邮件方式进行服务异常、设备宕机等告警通知。 单机运维 简单操作即可进行服务器的日常维护与管理,支持通过智能手机进行登录和管理。 批量操作 批量操作结合计划任务功能,让操作更加自动化...
  • Redis分片集群RedisCluster redis相信大家都是非常熟悉了,在这里就不一一给大家介绍一些基础操作了,今天我们主要谈...第二,中心,就是说RedisSentinel集群是只能存在一个主节点,一旦这个主节点宕机了,那么

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

服务器宕机的自动化解决