精华内容
下载资源
问答
  • 主要应用场景为官网、品牌较为重视政府、企业等。网站浏览更加流利顺畅,提升品牌形象。相比之前介绍2核4G5M多了4G内存,可以开启php opcache php内存缓存,MySQL mencached 数据库缓存等一系列缓存给网站加速...

    腾讯云服务器2核8G5M是常见的云服务器配置。主要应用场景为官网、品牌较为重视的政府、企业等。网站浏览更加流利顺畅,提升品牌形象。相比之前介绍的2核4G5M多了4G的内存,可以开启php opcache php内存缓存,MySQL mencached 数据库缓存等一系列缓存给网站加速。今天详细讲解实例规格族、实例CPU、内存、云盘。

    一、几核几G几M是什么意思

    几核就是虚拟几颗CPU核心,几G就是服务器有多少GB的内存,几M就是云服务器宽带是多少Mbps。1Mbps = 128KB/S。服务器的核心等于宿主机CPU一个处理器线程。举例2核的云服务器,宿主机采用4核8线程,那就是分配到了2个线程的处理器。

    有公网宽带的云服务器均会分配免费的IPv4公网IP地址。

    二、腾讯云服务器2核8G5M有那些实例规格

    目前腾讯云服务器均为100% 不限制CPU,所以不存在限制性能一说,CPU可以独享,只要不是挖矿可以占满整颗CPU核心。以下均为2核8G云服务器实例规格族。
    更多参阅官方文档

    实例规格族实例规格处理器型号CPU主频CPU睿频内存
    标准型S5S5.MEDIUM8Intel Xeon Cascade Lake 8255C2.5 GHz3.1GHz六通道 DDR4
    标准型S4S4.MEDIUM8Intel Xeon Skylake 61482.4 GHz/
    标准型S3S3.MEDIUM8Intel Xeon Skylake 61332.5 GHz/
    标准型S2S2.MEDIUM8Intel Xeon E5-2680 v42.4 GHz/DDR4
    标准型S1S1.MEDIUM8Intel Xeon CPU//DDR3
    标准型SA2SA2.MEDIUM8AMD EPY Rome2.6 GHz3.3GHz八通道 DDR4
    标准型SA1SA1.MEDIUM8AMD EPYC 75512.0GHz2.55GHz
    展开全文
  • 本文来源 | 云+社区专栏文章...导读:在企业实际生产环境中为了能够给业务上层应用提供高可靠、低延迟、低数据损失Redis缓存服务,本文通过对目前主流几种redis高可用方案进行对比分析,并基于腾讯云CVM和HAV...

    fd302e951d22553d809067ae5a00cdae.png

    本文来源 | 云+社区专栏文章

    作者 | 万守兵,腾讯云资深架构师。8年以上大型互联网公司运维工作经验,腾讯云资深迁云架构师,一直从事大型互联网服务端架构设计和优化工作。个人专注于云计算、k8s和 DevOps领域。

    导读:在企业实际生产环境中为了能够给业务上层应用提供高可靠、低延迟、低数据损失的Redis缓存服务,本文通过对目前主流的几种redis高可用方案进行对比分析,并基于腾讯云CVM和HAVIP等基础产品进行搭建、配置、测试、总结,供大家参考。

    01环境说明

    1.需求与目标

    本文将通过对目前主流的几种redis高可用方案进行对比分析,并基于腾讯云CVM和HAVIP等基础产品进行搭建、配置、测试、总结。

    2.软件版本

    redis用3.2.8版本,keepalived用1.2.19版本。

    3.基本环境

    采用同一网络内的三台主机(可以是物理主机、虚拟机或docker容器),要求三台主机之间都能相互访问。我这里使用腾讯云上3台CVM,每台CVM上开启一个redis-server、redis-sentinel和keepalived服务,redis-server端口为6379,redis-sentinel的端口为26379(我这里用默认端口,生产环境中可以修改默认端口),3台CVM上都安装keepalived服务。

    cc3509c4b436fb95c49f39f114bb7224.png

    02几种redis高可用方案说明

    1.一般的主从复制方案

    由于redis目前只支持主从复制备份(不支持主主复制),当主redis挂了,从redis只能提供读服务,无法提供写服务。所以,还得想办法,当主redis挂了,让从redis升级成为主redis。

    优点:

    (1)实现了对master数据的备份,一旦master出现故障,slave节点可以提升为新的master,顶替旧的master继续提供服务

    (2)实现读扩展。使用主从复制架构, 一般都是为了实现读扩展。Master主要实现写功能, Slave实现读的功能

    缺点:

    (1)一旦主节点宕机,从节点晋升成主节点,同时需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预,此时需要经过如下操作(假设提升Slave1为Master):

    • 在Slave1上执slaveof no one命令提升Slave1为新的Master节点
    • 在Slave1上配置为可写,这是因为大多数情况下,都将slave配置只读
    • 告诉Client端(也就是连接Redis的程序)新的Master节点的连接地址
    • 配置Slave2从新的Master进行数据复制

    (2)主节点的写能力受到单机的限制

    (3)主节点的存储能力受到单机的限制

    2.sentinel高可用方案

    客户端程序(如PHP程序)连接redis时需要ip和port,但redis-server进行故障转移时,主redis是变化的,所以ip地址也是变化的。客户端程序如何感知当前主redis的ip地址和端口呢?redis-sentinel提供了接口,请求任何一个sentinel,发送SENTINEL get-master-addr-by-name <master name>就能得到当前主redis的ip和port。需要注意的是,Redis Sentinel 端口和 Redis 主节点均需要开放访问权限。如果前端业务使用 Java,有 JedisSentinelPool 可以复用;如果前端业务使用 PHP,可以在 phpredis 的基础上做二次封装。

    优点:

    (1)redis sentinel带有自动故障转移功能(failover),当一个主redis不能提供服务时,redis sentinel可以将一个从redis升级为主redis,并对其他从redis进行配置,让它们使用新的主redis进行复制备份;

    (2)服务探测故障及时;

    (3)DBA 维护成本低。

    缺点:

    (1)对应用有入侵性:客户端每次连接redis前,先向sentinel发送请求,获得主redis的ip和port,然后用返回的ip和port连接redis。每次操作redis至少需要发送两次连接请求,第一次请求sentinel,第二次请求redis;

    (2)Sentinel服务器和Redis节点需要开放访问权限。

    3.redis-sentinel+VIP方案+自定义脚本方案

    底层是Redis Sentinel 集群,代理着 Redis 主从,Web端通过VIP提供服务。在部署Redis主从的时候,需要将虚拟IP绑定到当前的Redis 节点。当主节点发生故障,比如机器故障、Redis节点故障或者网络不可达,Sentinel 集群会调用 client-reconfig-script 配置的脚本,将VIP漂移到新的主节点上。

    比如:当前redis系统中主redis的ip地址是172.16.2.4,那么VIP(172.16.2.250)指向172.16.2.4,客户端程序用VIP(172.16.2.250)地址连接redis,实际上连接的就是当前主redis,这样就避免了向sentinel发送请求。

    优点:

    (1)脚本自定义,架构可控;

    (2)对应用透明,当主redis宕机,进行故障转移时,192.168.56.102这台服务器上的redis提升为主,这时VIP(172.16.2.4)指向192.168.56.102,这样客户端程序不需要修改任何代码,连接的是192.168.56.102这台主redis;

    (3)秒级切换,在 5s 内完成整个切换操作.

    缺点:

    (1)使用VIP增加维护成本,存在IP混乱风险;

    (2)需要自行编写VIP切换脚本,需要通过ip addr手动先在主redis上配置vip,配置相对复杂;

    (3)Sentinel模式存在短时间的服务不可用;

    (4)应用场景局限于内网,例如部分业务只能通过外网访问Redis时,该方案不可用

    注意:

    VIP方案对配置的环境有一定的要求,在腾讯云上搭建redis,需要用到腾讯云HAVIP,文档见:https://cloud.tencent.com/document/product/215/18025

    a9866e93deed7e77f48e90b2270151ab.png

    4.redis-sentinel+keepalived方案

    keepalived通过vrrp_script检测当前主机上的redis-server是否以master状态运行,如果当前主机上的redis-server正在以master状态运行,则将vrrp_instance标记为存活状态,并分配VIP;如果当前主机上的redis-server正在以slave状态运行,则将vrrp_instance标记为错误状态。当某台主机宕机后,其他两台主机上的keepalived会将VIP切换到新的master(当前主机上的redis-server正在以master状态运行)上。

    优点:

    (1)相对redis-sentinel+VIP方案,不需编写VIP切换脚本,配置更简洁、清晰;

    (2)对应用透明;

    (3)秒级切换。

    缺点:

    (1)对网络环境有要求:keepalived的核心协议VRRP使用IP多播数据包进行封装,组地址为224.0.0.18,发布范围只限于同一局域网内,而且在网络不受自己控制时基本不能用,但是腾讯云是支持组播协议,可以使用keepalived;

    (2)存在脑裂;

    (3)Sentinel模式存在短时间的服务不可用

    注意:

    keepalived方案也需要一个VIP,且网络要能支持组播协议。

    03安装部署

    方案一:sentinel高可用方案

    1.首先下载安装redis:(http://download.redis.io/releases/

    $ wget http://download.redis.io/releases/redis-3.2.8.tar.gz
    
    $ tar -zxvf redis-3.2.8.tar.gz
    
    $ cd redis-3.2.8
    
    $ make (如果没有安装gcc会报错,所以强烈建议在make之前先yum install gcc先安装gcc)

    make报错如下:(make是用来编译的,从Makefile中读取指令,安装到指定的位置)

    make3: gcc: Command not found
    make3: * net.o Error 127
    make3: Leaving directory `/opt/redis-3.2.8/deps/hiredis'
    make2: * hiredis Error 2
    make2: Leaving directory `/opt/redis-3.2.8/deps'
    make1: persist-settings Error 2 (ignored)
    CC adlist.o
    /bin/sh: cc: command not found
    make1: * adlist.o Error 127
    make1: Leaving directory `/opt/redis-3.2.8/src'
    make: * all Error 2

    安装gcc:

    yum install gcc

    继续编译:

    make

    Make报错如下:

    make1: Entering directory `/opt/redis-3.2.8/src'
    CC adlist.o
    In file included from adlist.c:34:0:
    zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory#include <jemalloc/jemalloc.h>
    ^
    compilation terminated.
    make1: * adlist.o Error 1
    make1: Leaving directory `/opt/redis-3.2.8/src'
    make: * all Error 2

    重新编译:

    make MALLOC=libc

    编译成功!!!

    2.基本配置:

    (1)make完后 redis-3.2.8目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:

    复制redis相关命令到/usr/sbin目录下,这样就可以直接执行这些命令,不用写全路径。

    $ cd src
    
    $ cp redis-cli  redis-server  redis-sentinel   /usr/sbin/

    (2)在redis目录下有redis.conf和sentinel.conf配置文件示例,将两个配置文件复制到/etc目录下(当然也可以在/etc/目录新建配置文件),然后修改配置文件

    $ cp  redis.conf  sentinel.conf  /etc/

    (3)redis.conf 是一个默认的配置文件。我们可以根据需要修改配置文件

    ●修改主redis-server(172.16.2.4)配置文件内容如下:

    #不修改,使用默认端口
    
    port  6379   
    
    #修改为0.0.0.0,可以从外部连接redis服务端     
    
    bind  0.0.0.0
    
    #默认情况下redis运行在保护模式(这种模式下,访问不需要密码),但是这种模式只允许本地回路访问,这里改为no
    
    protected-mode no
    
    #默认情况下,redis不是在后台模式运行的,如果需要在后台进程运行,把该项的值更改为yes,默认为no 
    
    daemonize yes
    
    #redis服务以后台进程运行的时候,Redis默认会把pid写入/var/run/redis.pid文件组
    
    pidfile /var/run/redis.pid 
    
    #开启AOF持久化,默认是关闭的,RDB默认是开启的,但是AOF的优先级更高,启动时Redis 会优先载入 AOF 文件来恢复数据,与 RDB 相比,AOF 的实时性更好,因此已成为主流的持久化方案
    
    #如果不希望丢掉任何一条数据的话就该用纯累加模式:一旦开启这个模式,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件。 
    
    appendonly yes

    ● 修改从redis-server(172.16.2.2和172.16.2.15)配置文件内容如下:

    #不修改,使用默认端口
    
    port  6379   
    
    #修改为0.0.0.0,可以从外部连接redis服务端     
    
    bind  0.0.0.0
    
    #默认情况下redis运行在保护模式(这种模式下,访问不需要密码),但是这种模式只允许本地回路访问,这里改为no
    
    protected-mode no
    
    #默认情况下,redis不是在后台模式运行的,如果需要在后台进程运行,把该项的值更改为yes,默认为no 
    
    daemonize yes
    
    #redis服务以后台进程运行的时候,Redis默认会把pid写入/var/run/redis.pid文件组,改为yes
    
    pidfile /var/run/redis.pid 
    
    #开启AOF持久化,默认是关闭的,RDB默认是开启的,但是AOF的优先级更高,启动时Redis 会优先载入 AOF 文件来恢复数据,与 RDB 相比,AOF 的实时性更好,因此已成为主流的持久化方案
    
    #如果不希望丢掉任何一条数据的话就该用纯累加模式:一旦开启这个模式,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件。 
    
    appendonly yes
    
    #从redis比主redis多这一行,使用slaveof实现主从复制
    
    slaveof  172.16.2.4 6379

    ● 启动redis服务之前,建议先修改kernel参数,重启生效

    vim /etc/sysctl.conf
    
    #表示内核允许分配所有的物理内存,而不管当前的内存状态如何
    
    vm.overcommit_memory = 1 
    
    #定义了TCP全连接队列长度,默认128太小,启动redis服务会报错
    
    net.core.somaxconn = 511
    #使配置文件永久生效
    
    sysctl -p 

    (4)启动redis-server服务:

    $ redis-server &        #加上‘&’号使redis以后台程序方式运行
    
    或
    
    $ redis-server /etc/redis.conf   #通过指定配置文件启动,在生产环境中强烈建议使用这种方式启动服务

    (5)停止:

    使用客户端:

    $ redis-cli shutdown

    因为Redis可以妥善处理SIGTERM信号,所以直接kill -9也是可以的

    $ kill -9 PID

    (6)启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了,连接redis-server:

    $ redis-cli   #本地连接redis-server,如果要连接远程redis,redis-cli -h host -p port -a password
    
    redis> set key1 value1
    
    OK
    
    redis> get key1
    
    "value1"

    (7)查看主从状态:

    通过redis-cli 进入主redis命令行,执行info replication查看当前主从配置,可以发现两个从节点信息,表明redis-server主从已经配置完毕。

    redis>  INFO replication

    4b6fb6d5aa025844a086de90935a0e09.png

    ● 可能遇到的问题:redis主从建立失败,有可能是启动服务时没有指定正确的配置文件

    ● 解决思路:

    (1)通过ps -ef查看服务进程ID

    (2)通过lsof -p pid查看进程打开的文件,如果打开文件有误,通过redis-server /etc/redis.conf指定正确的配置文件重新启动服务

    (8)搭建redis-sentinel系统:

    redis-sentinel程序上面已经安装过了,这里只需要修改配置文件就可以了。修改/etc/sentinel.conf如下:

    ● 三台sentinel服务器配置都一致

    #当前Sentinel服务运行的端口
    
    port 26379
    
    #监控的master的名字叫做mymaster(自定义),地址为172.16.2.4:6379,行尾最后的一个2代表在sentinel集群中,多少个sentinel认为masters死了,才能真正认为该master不可用了 
    
    sentinel monitor mymaster 172.16.2.4 6379 2   
    
    #每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30秒且没有回复,则判定不可达 
    
    sentinel down-after-milliseconds mymaster 30000 
    
    #当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长  
    
    sentinel parallel-syncs mymaster 1 
    
    #failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel将会认为此次failover失败。默认180秒,即3分钟。
    
    sentinel failover-timeout mymaster 18000  
    
    #如果Sentinel监控的主节点配置了密码,可以通过sentinel auth-pass配置通过添加主节点的密码,防止Sentinel节点无法对主节点进行监控。
    
    #例如:sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
    
    sentinel auth-pass   
    
    #在故障转移期间,当一些警告级别的Sentinel事件发生(指重要事件,如主观下线,客观下线等)时,会触发对应路径的脚本,想脚本发送相应的事件参数。
    
    # 例如:sentinel notification-script mymaster /var/redis/notify.sh
    
    sentinel notification-script   
    
    #在故障转移结束后,触发应对路径的脚本,并向脚本发送故障转移结果的参数。
    
    #例如:sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
    
    sentinel client-reconfig-script   

    ● 常见问题:在172.16.2.4(主redis)上查看sentinel的信息,发现报错

    68d2fe3b75e5af41f0297ccac32c8069.png

    ● 解决方案:修改/etc/sentinel.conf文件

    #原因是sentinel没有指定bind和密码访问,所以被开启了protected-mode保护模式,拒绝其他sentinel的连接。导致进入了ODWON。在sentinel.conf里加入关闭保护,protected-mode no
    
    protected-mode no
    #指定文件启动sentinel服务
    
    redis-sentinel sentinel.conf  &

    3.测试验证:

    (1)基本连接测试:

    redis-cli -h host -p port info sentinel

    三个redis-sentinel服务启动完毕后,连接任意sentinel服务可以获知当前主redis服务信息,说明sentinel服务已经成功起来

    c27c7a8e0f548a0f203b9d21cd6e0af2.png

    (2)测试sentinel的failover故障切换功能:

    ● 把主redis(172.16.2.4)停掉

    redis-cli -h 172.16.2.4 -p 6379 shutdown

    ● 查看redis-sentinel的监控状态:

     redis-cli -h 172.16.2.4 -p 26379 info sentinel

    aee81354061bad9cbc27f389c77d4b0f.png

    ● 发现172.16.2.2这台redis-server提升为主:

      redis-cli -h 172.16.2.2 -p 6379 info replication

    a72e676e1bde230a4f744abe383d4955.png

    ● 控制台也输出相关信息,表示主从切换成功。

    51d5ffb67a16f8908511b3ec5b782b1a.png

    ● 172.16.2.2切换成主之后,也可以执行写操作了。至此,redis的sentinel方案已经搭建完成。

    ffce594f86178dd296108552663e174c.png

    4.客户端使用方式:

    客户端程序(如PHP程序)连接redis时需要ip和port,但redis-server进行故障转移时,主redis是变化的,所以ip地址也是变化的。客户端程序如何感知当前主redis的ip地址和端口呢?redis-sentinel提供了接口,请求任何一个sentinel,发送SENTINEL get-master-addr-by-name<master name>就能得到当前主redis的ip和port。

    ● 连接到sentinel获取当前主redis的ip和端口(因为又执行了一次切换,这里的主已经切换到172.16.2.15,这里只是说明客户端的使用方式)

    a7d4320ff9b94e9372c70156ef44f2e1.png

    方案二:redis-sentinel+vip方案

    1.方案说明

    VIP方案是redis系统对外始终是同一ip地址,当redis主从进行故障转移时,需要做的是将VIP从之前的redis服务器漂移到现在新的主redis服务器上。

    比如:当前redis系统中主redis的ip地址是172.16.2.4,那么VIP(172.16.2.250)指向172.16.2.4,客户端程序用VIP(172.16.2.250)地址连接redis,实际上连接的就是当前主redis,这样就避免了向sentinel发送请求。

    ● 正常情况下VIP指向172.16.2.4

    8c597eaa23e544db0ac8718b631b4854.png

    ● 故障情况下,VIP漂移指向172.16.2.2

    b9eab9bdcf5556ffc8bd3bb4aa30fe7c.png

    2.基本配置:

    那么现在的问题是,如何在进行redis故障转移时,将VIP漂移到新的主redis服务器上。在方案一的配置基础之上增加对sentinel.conf的配置,具体配置如下:

    (1)在sentinel.conf配置文件设置要执行的vip漂移的脚本

    使用sentinel.conf配置文件的有一个参数client-reconfig-script,这个参数配置执行脚本,sentinel在做failover的时候会执行这个脚本,并且传递6个参数<master-name>、 <role>、 <state>、 <from-ip>、 <from-port>、 <to-ip> 、<to-port>,其中<to-ip>是新主redis的IP地址,可以在这个脚本里做VIP漂移操作。

    #修改三个服务器的redis-sentinel配置文件/etc/sentinel.conf,增加下面一行。
    
    vi /etc/sentinel.conf
    
    sentinel client-reconfig-script mymaster   /opt/notify_mymaster.sh

    (2)创建VIP漂移脚本(VIP用之前在腾讯云控制台上申请的VIP)

    然后在/opt/目录下创建notify_mymaster.sh脚本文件,这个脚本做VIP漂移操作。

    chmod 777 notify_mymaster.sh #赋予脚本执行权限
    

    脚本内容如下:

    #notify_mymaster.sh脚本内容
    
    #!/bin/bash
    
    MASTER_IP=$6  #第六个参数是新主redis的ip地址
    
    LOCAL_IP='172.16.2.2'  #其他两个服务器上为172.16.2.4,172.16.2.15
    
    VIP='172.16.2.250'
    
    NETMASK='24'
    
    INTERFACE='eth0'
    
    if [ ${MASTER_IP} = ${LOCAL_IP} ];then   
    
       sudo /sbin/ip  addr  add ${VIP}/${NETMASK}  dev ${INTERFACE}  #将VIP绑定到该服务器上
    
       sudo /sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE}
    
       exit 0
    
    else 
    
      sudo /sbin/ip  addr del  ${VIP}/${NETMASK}  dev ${INTERFACE}   #将VIP从该服务器上删除
    
      exit 0
    
    fi
    
    exit 1  #如果返回1,sentinel会一直执行这个脚本

    (3)第一次需在主redis上手工设置VIP

    只需要第一次手工在主redis上设置vip,现在当前主redis是172.16.2.2,需要手动绑定VIP到该服务器上。(注意强烈建议加sudo执行

    sudo /sbin/ip  addr add 172.16.2.250/24 dev eth0
    sudo /sbin/arping -q   -c 3 -A 172.16.2.250 -I eth0

    3.测试验证

    (1)配置完成之后,去另一个服务器上(172.16.2.15)通过VIP地址连接redis-server和redis-sentinel。从上面可以看到主redis是172.16.2.2

    08e915c54cf8e5ab29e728093907dd82.png

    (2)验证:下面关闭这台主redis服务(172.16.2.2),看看VIP是否漂移到另一台服务器上

    redis-cli -h 172.16.2.2 -p 6379 shutdown

    通过查询sentinel发现172.16.2.15提升为主。

    9c54e6977330fc1f263f53f70b0577c5.png

    (3)通过访问VIP连接查看redis sentinel信息和redis-server主从关系,发现VIP确实指向了172.16.2.15

    ee0ae7fb4b5dd80531a3cdf6a3c8a7b1.png

    aa3ed56f4749a770f766196a299727e4.png

    方案三:redis-sentinel+keepalived方案

    1.方案说明

    VIP方案是通过sentinel服务在做redis主从切换的时候,通过配置文件sentinel.conf中的一个参数client-reconfig-script来执行相应的脚本,这种方式需要自己编写脚本。而keepalived方案通过vrrp_script检测当前主机上的redis-server是否以master状态运行,如果当前主机上的redis-server正在以master状态运行,则将vrrp_instance标记为存活状态,并分配VIP;如果当前主机上的redis-server正在以slave状态运行,则将vrrp_instance标记为错误状态。当某台主机宕机后,其他两台主机上的keepalived会将VIP切换到新的master(当前主机上的redis-server正在以master状态运行)上。三台CVM都需要安装keepalived组件。

    2.在VIP方案基础之上安装keepalived组件(3台CVM都需要安装)

    wget -c http://www.keepalived.org/software/keepalived-1.2.19.tar.gz     
    
    tar zxf keepalived-1.2.19.tar.gz     
    
    cd keepalived-1.2.19     
    
    ./configure --prefix=/usr/local/keepalived     
    
    make     
    
    make install     

    3.基本配置

    (1)编译安装keepalived之后,做初始化

     cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
    
     cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    
     cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
    
     cd /etc/init.d/
    
     chkconfig --add keepalived
    
     chkconfig keepalived on
    
     mkdir -p /etc/keepalived

    (2)关于keepalived的配置文件

    keepalived的配置文件默认是没有的,当然sample&example文件还是有的,通常在PREFIX/etc/sample目录下。

    keepalived master和backup(backups)之间不同的是:
    
    1.优先级的不同,master的优先级priority的数字要高一些,我这里主redis上设置为100,从redis上设置为99;
    
    2.global_defs段的router_id都不一样,实际中可以用任意名字区分也可以用主机名区分;
    
    3.backup的配置文件中还有一个nopreempt字段,意思是设置为非抢占模式,作用是让master优先获取到VIP,并保证VIP是在原先的master上。
    

    ● 主redis172.16.2.4上的配置:

     vim /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
    
       notification_email {     #指定keepalived在发生切换时需要发送email到的对象,一行一个
    
         root@localhost
    
       }
    
       notification_email_from keepalived@localhost     #指定发件人
    
       smtp_server 127.0.0.1        #指定smtp服务器地址
    
       smtp_connect_timeout 10      #指定smtp连接超时时间
    
       router_id keepalivedha_1     #运行keepalived机器的一个标识
    
    }
    
    vrrp_script chk_http_port {     #执行的脚本
    
        script "redis-cli info | grep role:master >/dev/null 2>&1"
    
        interval 1
    
        timeout 2
    
        fall 2
    
        rise 1
    
    }
    
    vrrp_sync_group VG_1 {      #监控多个网段的实例
    
        group {
    
            VI_1        #实例名
    
        }
    
    }
    
    vrrp_instance VI_1 {
    
        state BACKUP
    
        interface eth0      #设置实例绑定的网卡
    
        #use_vmac keepalived
    
        #vmac_xmit_base
    
        mcast_src_ip 172.16.2.4
    
        smtp_alert
    
        virtual_router_id 20        #路由器标识,MASTER和BACKUP必须是一致的
    
        priority 100        #优先级,高优先级竞选为master
    
        advert_int 1
    
        authentication {        #设置认证
    
            auth_type PASS      #认证方式
    
            auth_pass password      #认证密码
    
        }
    
        virtual_ipaddress {     #设置vip
    
            172.16.2.250
    
        }
    
        track_script {      #监测的对象
    
            chk_http_port
    
        }
    
    }

    ● 从redis172.16.2.2上的配置:

    ! Configuration File for keepalived
    
    global_defs {
    
       notification_email {
    
         root@localhost
    
       }
    
       notification_email_from keepalived@localhost
    
       smtp_server 127.0.0.1
    
       smtp_connect_timeout 10
    
       router_id keepalivedha_2
    
    }
    
    vrrp_script chk_http_port {
    
        script "redis-cli info | grep role:master >/dev/null 2>&1"
    
        interval 1
    
        timeout 2
    
        fall 2
    
        rise 1
    
    }
    
    vrrp_sync_group VG_1 {
    
        group {
    
            VI_1
    
        }
    
    }
    
    vrrp_instance VI_1 {
    
        state BACKUP
    
        interface eth0
    
        #use_vmac keepalived
    
        #vmac_xmit_base
    
        mcast_src_ip 172.16.2.2
    
        smtp_alert
    
        virtual_router_id 20
    
        priority 99
    
        advert_int 1
    
        authentication {
    
            auth_type PASS
    
            auth_pass password
    
        }
    
        virtual_ipaddress {
    
            172.16.2.250
    
        }
    
        track_script {
    
            chk_http_port
    
        }
    
            nopreempt
    
    }

    ● 从redis172.16.2.15上的配置:

    ! Configuration File for keepalived
    
    global_defs {
    
       notification_email {
    
         root@localhost
    
       }
    
       notification_email_from keepalived@localhost
    
       smtp_server 127.0.0.1
    
       smtp_connect_timeout 10
    
       router_id keepalivedha_3
    
    }
    
    vrrp_script chk_http_port {
    
        script "redis-cli info | grep role:master >/dev/null 2>&1"
    
        interval 1
    
        timeout 2
    
        fall 2
    
        rise 1
    
    }
    
    vrrp_sync_group VG_1 {
    
        group {
    
            VI_1
    
        }
    
    }
    
    vrrp_instance VI_1 {
    
        state BACKUP
    
        interface eth0
    
        #use_vmac keepalived
    
        #vmac_xmit_base
    
        mcast_src_ip 172.16.2.15
    
        smtp_alert
    
        virtual_router_id 20
    
        priority 99
    
        advert_int 1
    
        authentication {
    
            auth_type PASS
    
            auth_pass password
    
        }
    
        virtual_ipaddress {
    
            172.16.2.250
    
        }
    
        track_script {
    
            chk_http_port
    
        }
    
            nopreempt
    
    }

    4.启动keepalived

    service keepalived start
    
    tail /var/log/messages

    (1)如果在主redis上keepalived启动后日志如下图显示则表示启动成功

    18f44e88e9590476ca20d5b2e24cd017.png

    (2)用ip add查看VIP已经绑定到主redis上

    9582ec165cadf01be031978c1e40fed6.png

    5.测试验证

    模拟主redis故障时,redis的set、get和复制情况

    (1)停掉主Redis(172.16.2.4)上的redis-server服务

    e13ee5fe718cbe0213590aa5aebd4f95.png

    (2)主Redis(172.16.2.4)上的VIP已经被移除

    1fc34df2282e68d0685489b2f788311f.png

    (3)查看Redis(172.16.2.15)上的Redis状态已经切换成master

    d014080b3631de8bafcd204fc9c36659.png

    (4)可以看出,VIP已经漂移到新的redis master(172.16.2.15)上

    1e712066205c9dcf847145b065e144cb.png

    (5)从sentinel进行redis主从切换,到VIP的漂移过程是需要时间的,用ping VIP来做测试,中断时间大概需要几秒左右,如下图所示:

    32017f6ec33dc6dd36d7bddb9fb32117.png

    04总结

    以上通过搭建、配置、验证、测试,了解到几种redis高可用方案各有优缺点,如果网络环境能够支持组播协议,建议采用redis-sentinel+keepalived方案,这种方案配置更简单;如果网络环境不支持组播协议,可以使用redis-sentinel+VIP方案;如果业务代码上能够接受在每次操作redis之前都先额外进行一次sentinel查询操作,就可以采用sentinel方案。

    以下是实战过程中总结出的最佳实践:

    (1)Redis Sentinel 集群建议使用 >= 5 台机器;

    (2)不同的大业务可以使用一套 Redis Sentinel 集群,代理该业务下的所有端口;

    (3)根据不同的业务划分好 Redis 端口范围;

    (4)自定义脚本建议采用 Python 实现,扩展便利;

    (5)自定义脚本传入参数:<service_name> <role> <comment> <from_ip> <from_port> <to_ip> <to_port>;

    (6)自定义脚本需要远程 ssh 操作机器,建议使用 paramiko 库,避免重复建立 SSH 连接,消耗时间;

    (7)加速 SSH 连接,建议关闭以下两个参数:

    UseDNS no

    GSSAPIAuthentication no

    (8)微信或者邮件告警,建议 fork 一个进程,避免主进程阻塞;

    (9)自动切换和故障切换,所有操作建议在 15s 以内完成。

    以上几种方案都是针对单个redis实例的高可用,比较适合中小型业务的应用。如果业务数据量比较大,并发量比较高的情况下,建议搭建redis集群,比如官方redis cluster和开源的codis方案,或者使用腾讯云PAAS层redis集群方案,文档说明见:

    https://cloud.tencent.com/document/product/239

    展开全文
  • 现在做个人网站或者企业网站还是很多,大家现在一般都选择阿里云或者腾讯云购买相应云服务器来部署安装自己网站或对应web环境,现在国内主流普遍都使用宝塔环境,相对来说部署比较简单,容易上手,...

    现在做个人网站或者企业网站的还是很多的,大家现在一般都选择阿里云或者腾讯云购买相应的云服务器来部署安装自己的网站或对应的web环境,现在国内主流的普遍都使用宝塔的环境,相对来说部署比较简单,容易上手,关键是还免费,深受广大技术爱好者的喜欢,在此我给大家做一期教程,来给大家演示一下如何来部署linux 环境下的宝塔环境搭建,喜欢的朋友可以收藏一下。

    本次环境为腾讯云cvm 服务器,下面搭建的centos8系统环境,其它的Linux环境和本地环境步骤基本一样。

    1、1、先安装环境,本文以Centos8为例

    54528d2600709cde193a1e4370e210f5.png

    2、系统安装环节比较简单,根据提示选择需要的环境即可,此处密码需要牢记,管理服务器要用。

    95b63d3d96fd6e8fc85a8615ab0c97d4.png

    3、安装完成后,点击实例后面的登录选项,登录系统

    77f9f28da2ad5c3c2b9d78094271a31d.png

    4、点击立即登录

    282494106d030cedbb68ac2920a49a13.png

    5、输入用户名和刚才设置的密码,用户名为ROOT系统默认

    c8fba928bbc75b3afe02317e524c7b22.png

    6、成功登录后的界面,会出现命令行提示符

    a29f1af89fba37976f2d6b1d02d29faf.png

    7、接下来安装宝塔环境,打开宝塔的网站,里面有各种系统的安装命令,我们找到对应的环境把命令行语句复制下来粘贴到我们刚才登录的命令行窗口里即可。

    321aa4c4000d748154825ff5e216e813.png

    8、在此处点击鼠标右键选择粘贴,然后回车开始下载安装,提示出输入Y,回车继续安装

    d2af82021df06c8d76874ea7e002dd4d.png
    bbc31daffe9eaf485e53d7e647870918.png

    9、安装完成后会有提示,有登录的地址和用户名和密码,我们可以复制粘贴登录,密码登陆后自己修改

    3285ed9890f633af738b73fdadd4de7b.png

    10、粘贴宝塔的登录地址,输入用户名密码

    ac787dde783d838e37dd4b64186c54bd.png

    11、第一次登录会提示需要安装网站运行环境,我们根据自己需要选择安装即可,此处二选一,推荐lnmp

    00def86288e90e06837ee56879fbff0b.png

    12、点击一键安装后系统环境开始部署,过程大概5分钟左右,完成后点击关闭提示窗即可,第一次登录还需要绑定自己的宝塔账户,没有可以注册一个,不然无法登录管理界面。

    85470b6efab5d413cb81c7f8d03b00c2.png

    13、安装完成后,就可以根据自己需要部署网站了

    d6bcf29cb41345f0c6e56cf8095352c0.png

    14、点击左侧的网站选项,点击新建站点,提示窗口根据自己需要来选择输入即可

    118d50758aab18768afd9431b8a916fb.png
    b23e811cb614203832db0b06a1216d78.png

    创建完成后就可以部署自己的网站了,可以是cms的,也可以自己根据需要来搭建。

    以上就是在腾讯云环境下部署宝塔网站管理环境的教程,本地的LINUX环境部署也一样,大家可以自己测试一下,对于做前端的朋友还是有用的。

    下一章中来给大家演示一下具体搭建一个网站的实例

    展开全文
  • 腾讯云2核4G3M是平时常用也常见云服务器配置。配置为2核CPU,4GB内存,3Mbps...当然部分个人博客或企业网站也会用这个配置。下面小白就介绍下腾讯云2核4G3M。 腾讯云服务器CPU都是100% 性能,2核心处理器4GB...

    腾讯云2核4G3M是平时常用也常见的云服务器配置。配置为2核CPU,4GB内存,3Mbps带宽。应用环境多用于中大型网站,小程序、访问量较高且在线人数多的应用,选保证足够的资源空间,提升访问速度。当然部分个人博客或企业网站也会用这个配置。下面小白就介绍下腾讯云的2核4G3M。

    腾讯云服务器CPU都是100% 性能,2核心处理器4GB内存3M带宽的服务器综合性能是很棒的。
    性能具体可以参考官方文档

    一、腾讯云服务器2核4G3M实例规格

    目前腾讯云有以下实例规格族包含2核4G的配置

    实例规格族实例规格处理器型号CPU主频CPU睿频内存
    标准型S5S5.MEDIUM4Intel Xeon Cascade Lake 8255C2.5 GHz3.1GHz六通道 DDR4
    标准型S4S4.MEDIUM4Intel Xeon Skylake 61482.4 GHz/
    标准网络优化型SN3neSN3ne.MEDIUM4Intel Xeon Skylake 61332.5 GHz/
    标准型S3S3.MEDIUM4/
    标准网络优化型S2neS2ne.MEDIUM4Intel Xeon E5-2680 v42.4 GHz/DDR4
    标准型S2S2.MEDIUM4/
    标准型S1S1.MEDIUM4Intel Xeon CPU//DDR3
    标准型SA2SA2.MEDIUM4AMD EPY Rome2.6 GHz3.3GHz八通道 DDR4
    标准型SA1SA1.MEDIUM4AMD EPYC 75512.0GHz2.55GHz

    顺便提一下腾讯云官网还有代金券可以领取,其实这主要是腾讯云与其它云服务商竞争云市场的产物,以前我也领取了,经常出现过期的,这是最新的领取官网领取地址: 官方代金券

    官网地址:腾讯云官方

    展开全文
  • 本文来源 | 云+社区专栏文章 ...导读:在企业实际生产环境中为了能够给业务上层应用提供高可靠、低延迟、低数据损失Redis缓存服务,本文通过对目前主流几种redis高可用方案进行对比分析,并...
  • 1.服务器申请 最近在给一个小企业做个报价系统,C#WPF框架开发,桌面...确实如此,原因主要是这个企业的报价系统的前端交互太多,一堆的javascript代码,还有一堆的word报表输入输出,做成web太过麻烦。因此还是决...
  • 以前,大小企业都是自己建机房,自己招聘运维(服务器运行维护)人员,运维这种事,只有在服务器出问题时候才看得出成效,没问题时候就是铁铁办公成本。要维持一个稳定服务器环境,你需要房间里温度稳定,...
  • 了解域名是什么之后,我们再来深入浅出地讲一讲什么是服务器。没接触过人一听...以前,大小企业都是自己建机房,自己招聘运维(服务器运行维护)人员,运维这种事,只有在服务器出问题时候才看得出成效,没...
  • 关于这点,腾讯云官方文档介绍比较清晰,我就咱借来,供大家查阅:1、全面腾讯云 CVM 为您提供全面广泛服务内容。多地域多可用区:中国大陆地域覆盖华南、华东、华北、西南四个地域。境外节点覆盖东南亚、亚太、...
  • 不仅要购买大量的物理服务器,还需要有大量的技术人员运行及维护产生的费用大大增加了企业的负担。那么企业应如何选择服务器就变成了一个亟需解决的问题。 云服务器的出现给了大家一个好的解决方案。 云服务器是一...
  • 目前,云服务器已经是企业上云首选产品,而腾讯云经过在云计算行业多年深耕,已经打造了丰富产品线,腾讯云CVM云服务器官方文档产品更是受到广大用户一致好评,但腾讯云服务器配置繁多,很多初次购买的企业...
  • 而且腾讯云是国内互联网龙头企业,信得过,它们产品是值得信任。好了,废话不多说,我现在教下新手怎样选择和购买腾讯云服务器。这篇教程我写很详细,因为有些个人建议和忠告,帮助你不要选错。 第一步:选择...
  • 而且腾讯云是国内互联网龙头企业,信得过,它们产品是值得信任。好了,废话不多说,我现在教下新手怎样选择和购买腾讯云服务器。这篇教程我写很详细,因为有些个人建议和忠告,帮助你不要选错。 第一步:选择...
  • 届时将无法使用此镜像购买新 CVM 实例和重装 CVM 实例,自定义镜像、服务市场镜像及导入镜像使用不受影响。 如需购买请选择Windows Server2012以及2016相关版本,给您带来不便望您谅解,欢迎使用更高版本
  • 而且腾讯云是国内互联网龙头企业,信得过,它们产品是值得信任。好了,废话不多说,我现在教下新手怎样选择和购买腾讯云服务器。这篇教程我写很详细,因为有些个人建议和忠告,帮助你不要选错。 第一步:选择...
  • Tencent SD Router在云计算中应用实践 余言波 腾讯云专家工程师 | 企业上云互联互通需求 客户分支 客户分支 运营商 客户IDC 上海VPC CVM 用户 CVM Internet Internet CDB 华东
  • 本文介绍如何基于各种云服务优雅且低成本地搭建个人网站,涉及云产品有云服务器、SSL、企业邮箱、对象存储、CDN、云函数、API网关、云监控等。 概述 如今云服务提供商们提供了大量涵盖计算、网络、存储等方面...
  • 云计算是建立在真实存在集群服务器上虚拟化产品,能够提供快速计算能力和数据服务,企业或者用户只需要接入云数据中心,就可以申请各类服务,让使用者花更少经历去获取更多资源或者资料 优点: 1、方便 2...
  • 近日,腾讯云在业内率先发布第二代云服务器CVM2.0,内测一发布,就引来多家大企业争相申请,第二代云服务器...究竟为何获得企业的青睐?应大家的要求,腾讯云基础产品团队首次公开亮相腾讯云第二代云服务器的独门秘籍。
  • 腾讯云轻量应用服务器(Lighthouse)是一种易于使用和管理、适合承载轻量级业务负载云服务器,能帮助个人和企业在云端快速构建网站、博客、电商、论坛等各类应用以及搭建开发测试环境,并提供应用部署、配置和管理...
  • 而且腾讯云是国内互联网龙头企业,信得过,它们产品是值得信任。好了,废话不多说,我现在教下新手怎样选择和购买腾讯云服务器。这篇教程我写很详细,因为有些个人建议和忠告,帮助你不要选错。 第一步:选择...
  • 腾讯云网络连接产品网络连接产品公网接入企业DC连接对等连接云联网 网络连接产品 公网接入 弹性IP VPC里服务器分配私有IP,无法访问公网,可以绑定公网IP来实现 普通公网IP:在CVM上申请绑定,与账号无关,...
  • 而且腾讯云是国内互联网龙头企业,信得过,它们产品是值得信任。好了,废话不多说,我现在教下新手怎样选择和购买腾讯云服务器。这篇教程我写很详细,因为有些个人建议和忠告,帮助你不要选错。 第一步:选择...
  • 而且腾讯云是国内互联网龙头企业,信得过,它们产品是值得信任。好了,废话不多说,我现在教下新手怎样选择和购买腾讯云服务器。这篇教程我写很详细,因为有些个人建议和忠告,帮助你不要选错。 第一步:选择...
  • 而且腾讯云是国内互联网龙头企业,信得过,它们产品是值得信任。好了,废话不多说,我现在教下新手怎样选择和购买腾讯云服务器。这篇教程我写很详细,因为有些个人建议和忠告,帮助你不要选错。 第一步:选择...
  • 而且腾讯云是国内互联网龙头企业,信得过,它们产品是值得信任。好了,废话不多说,我现在教下新手怎样选择和购买腾讯云服务器。这篇教程我写很详细,因为有些个人建议和忠告,帮助你不要选错。 第一步:选择...
  • 此轮价格调整中,腾讯云CVM多款产品降价,AMD标准型实例降价30%,搭载英伟达P40卡GPU机型GN8在西南地区降价20%,而为批量计算量身打造离线计算机型降价50%。同时,CDN官网也全线降价,最高降幅达20%,西南区...
  • 而且腾讯云是国内互联网龙头企业,信得过,它们产品是值得信任。好了,废话不多说,我现在教下新手怎样选择和购买腾讯云服务器。这篇教程我写很详细,因为有些个人建议和忠告,帮助你不要选错。 第一步:选择...
  • 而且腾讯云是国内互联网龙头企业,信得过,它们产品是值得信任。好了,废话不多说,我现在教下新手怎样选择和购买腾讯云服务器。这篇教程我写很详细,因为有些个人建议和忠告,帮助你不要选错。 第一步:选择...

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

企业的cvm