Linux运维-搭建高可用Redis缓存
Redis是一个高性能的
key-value数据库,现时越来越多企业与应用使用
Redis作为缓存服务器。楼主是一枚
JAVA后端程序员,也算是半个运维工程师了。在
Linux服务器上搭建
Redis,怎么可以不会呢?下面楼主就带着大家从0开始,依次搭建:
Redis单机服务器 ->
Redis主从复制 ->
Redis-Sentinel高可用。逐步搭建出高可用的Redis缓存服务器。java学习交流扣qun:925895158
搭建Redis
1. 下载并解压
首先从
Redis官网下载
Redis并解压,楼主使用的版本是4.0.2。依次执行如下命令:
[code]cd /usr/local/ wget http://download.redis.io/releases/redis-4.0.2.tar.gz tar -zxvf redis-4.0.2.tar.gz 复制代码
如果没有安装
gcc依赖包,则安装对应依赖包
[code]yum install -y gcc-c++ tcl 复制代码
2. 编译并安装
下载并解压完毕后,则对源码包进行编译安装,楼主的
Redis安装路径为
/usr/local/redis,同学们可以自行修改语句:
make install PREFIX=你想要安装的路径
[code]cd /usr/local/redis-4.0.2/ make install PREFIX=/usr/local/redis 复制代码
复制
Redis相关命令到
/usr/sbin目录下,这样就可以直接执行这些命令,不用写全路径
[code]cd /usr/local/redis/bin/ sudo cp redis-cli redis-server redis-sentinel /usr/sbin/ 复制代码
3. 建立Redis配置文件
安装完成之后将
Redis配置文件拷贝到系统配置目录
/etc/下,
redis.conf是
Redis的配置文件,
redis.conf在
Redis源码目录,
port默认 6379。
[code]cp /usr/local/redis-4.0.2/redis.conf /etc/ 复制代码
Redis配置文件主要参数解析参考
[code]daemonize no #redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端) pidfile /var/run/redis.pid #指定redis进程的PID文件存放位置 port 6379 #redis进程的端口号 bind 127.0.0.1 #绑定的主机地址 timeout 300 #客户端闲置多长时间后关闭连接,默认此参数为0即关闭此功能 loglevel verbose #redis日志级别,可用的级别有debug.verbose.notice.warning logfile stdout #log文件输出位置,如果进程以守护进程的方式运行,此处又将输出文件设置为stdout的话,就会将日志信息输出到/dev/null里面去了 databases 16 #设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id save <seconds> <changes> #指定在多少时间内刷新次数达到多少的时候会将数据同步到数据文件; rdbcompression yes #指定存储至本地数据库时是否压缩文件,默认为yes即启用存储; dbfilename dump.db #指定本地数据库文件名 dir ./ #指定本地数据问就按存放位置; slaveof <masterip> <masterport> #指定当本机为slave服务时,设置master服务的IP地址及端口,在redis启动的时候他会自动跟master进行数据同步 masterauth <master-password> #当master设置了密码保护时,slave服务连接master的密码; requirepass footbared #设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭 maxclients 128 #设置同一时间最大客户连接数,默认无限制;redis可以同时连接的客户端数为redis程序可以打开的最大文件描述符,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息 maxmemory<bytes> #指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区 appendonly no #指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no appendfilename appendonly.aof #指定跟新日志文件名默认为appendonly.aof appendfsync everysec #指定更新日志的条件,有三个可选参数no:表示等操作系统进行数据缓存同步到磁盘(快),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值); 复制代码
3.1 设置后端启动:
由于
Redis默认是前端启动,必须保持在当前的窗口中,如果使用
ctrl + c退出,那么
Redis也就退出,不建议使用。
[code]vi /etc/redis.conf 复制代码
修改
Redis配置文件把旧值
daemonize no改为 新值
daemonize yes
3.2 设置访问:
Redis默认只允许本机访问,可是有时候我们也需要 Redis 被远程访问。
[code]vi /etc/redis.conf 复制代码
找到 bind 那行配置,默认是:
# bind 127.0.0.1
去掉
#注释并改为:
bind 0.0.0.0此设置会变成允许所有远程访问。如果想指定限制访问,可设置对应的IP。
3.3 配置Redis日志记录:
找到
logfile那行配置,默认是:
logfile "",改为
logfile /var/log/redis_6379.log
3.4 设置 Redis 请求密码:
[code]vi /etc/redis.conf 复制代码
找到默认是被注释的这一行:
# requirepass foobared
去掉注释,把
foobared改为你想要设置的密码,比如我打算设置为:
123456,所以我改为:
requirepass "123456"
修改之后重启下服务
有了密码之后,进入客户端,就得这样访问:
redis-cli -h 127.0.0.1 -p 6379 -a 123456
4. Redis常用操作
4.1 启动
[code]/usr/local/redis/bin/redis-server /etc/redis.conf 复制代码
4.2 关闭
[code]/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown 复制代码
4.3 查看是否启动
[code]ps -ef | grep redis 复制代码
4.4 进入客户端
[code]redis-cli 复制代码
4.5 关闭客户端
[code]redis-cli shutdown 复制代码
4.6 设置开机自动启动配置
[code]echo "/usr/local/redis/bin/redis-server /etc/redis.conf" >> /etc/rc.local 复制代码
4.7 开放防火墙端口
[code]添加规则:iptables -I INPUT -p tcp -m tcp --dport 6379 -j ACCEPT 保存规则:service iptables save 重启 iptables:service iptables restart 复制代码
5. 将Redis注册为系统服务
在/etc/init.d目录下添加Redis服务的启动,暂停和重启脚本:
[code]vi /etc/init.d/redis 复制代码
脚本内容如下:
[code]#!/bin/sh # # redis - this script starts and stops the redis-server daemon # # chkconfig: - 85 15 # description: Redis is a persistent key-value database # processname: redis-server # config: /usr/local/redis/bin/redis-server # config: /etc/redis.conf # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 redis="/usr/local/redis/bin/redis-server" prog=$(basename $redis) REDIS_CONF_FILE="/etc/redis.conf" [ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis lockfile=/var/lock/subsys/redis start() { [ -x $redis ] || exit 5 [ -f $REDIS_CONF_FILE ] || exit 6 echo -n $"Starting $prog: " daemon $redis $REDIS_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { stop start } reload() { echo -n $"Reloading $prog: " killproc $redis -HUP RETVAL=$? echo } force_reload() { restart } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart| reload|orce-reload}" exit 2 esac 复制代码
赋予脚本权限
[code]chmod 755 /etc/init.d/redis 复制代码
启动、停止和重启:
[code]service redis start service redis stop service redis restart 复制代码
至此,
Redis单机服务器已搭建完毕,下面我们看看主从架构如何搭建。
搭建Redis主从架构
1. redis-server说明
[code]172.16.2.185:6379 主 172.16.2.181:6379 从 复制代码
2. Redis主从架构配置
-
编辑从机的
Redis
配置文件,找到 210 行(大概),默认这一行应该是注释的:# slaveof <masterip> <masterport>
-
我们需要去掉该注释,并且填写我们自己的主机的 IP 和 端口,比如:
slaveof 172.16.2.185 6379
,如果主机设置了密码,还需要找到masterauth <master-password>
这一行,去掉注释,改为masterauth 主机密码
。 -
配置完成后重启从机
Redis
服务 -
重启完之后,进入主机的
redis-cli
状态下redis-cli -h 127.0.0.1 -p 6379 -a 123456
,输入:INFO replication
可以查询到当前主机的Redis
处于什么角色,有哪些从机已经连上主机。
主机信息
172.16.2.185
[code]# Replication role:master connected_slaves:1 slave0:ip=172.16.2.181,port=6379,state=online,offset=28,lag=1 master_replid:625ae9f362643da5337835beaeabfdca426198c7 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:28 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:28 复制代码
从机信息
172.16.2.181
[code]# Replication role:slave master_host:172.16.2.185 master_port:6379 master_link_status:up master_last_io_seconds_ago:3 master_sync_in_progress:0 slave_repl_offset:210 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:625ae9f362643da5337835beaeabfdca426198c7 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:210 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:210 复制代码
- 此时已经完成了主从配置,我们可以测试下: 我们进入主机的
redis-cli
状态,然后set
某个值,比如:set myblog YouMeek.com
- 我们切换进入从机的
redis-cli
的状态下,获取刚刚设置的值看是否存在:get myblog
,此时,我们可以发现是可以获取到值的。
3. Redis主从架构总结
-
需要注意的是:从库不具备写入数据能力,不然会报错。 从库只有只读能力。
-
主从架构的优点:除了减少主库连接的压力,还有可以关掉主库的持久化功能,把持久化的功能交给从库进行处理。
-
第一个从库配置的信息是连上主库,后面的第二个从库配置的连接信息是连上第一个从库, 假如还有第三个从库的话,我们可以把第三个从库的配置信息连上第二个从库上,以此类推。
Redis Sentinel高可用架构搭建
1. 自动故障转移
- 虽然使用主从架构配置
Redis
做了备份,看上去很完美。但由于Redis
目前只支持主从复制备份(不支持主主复制),当主Redis
挂了,从Redis
只能提供读服务,无法提供写服务。所以,还得想办法,当主Redis
挂了,让从Redis
升级成为主Redis
。 - 这就需要自动故障转移,
Redis Sentinel
带有这个功能,当一个主Redis
不能提供服务时,Redis Sentinel
可以将一个从Redis
升级为主Redis
,并对其他从Redis
进行配置,让它们使用新的主Redis
进行复制备份。
注意:搭建
Redis Sentinel推荐至少3台服务器,但由于楼主偷懒,下面用例只用了2台服务器。
Redis Sentinel的主要功能如下:
-
监控:哨兵不断的检查
master
和slave
是否正常的运行。 -
通知:当监控的某台
Redis
实例发生问题时,可以通过API
通知系统管理员和其他的应用程序。 -
自动故障转移:如果一个
master
不正常运行了,哨兵可以启动一个故障转移进程,将一个slave
升级成为master
,其他的slave
被重新配置使用新的master
,并且应用程序使用Redis
服务端通知的新地址。 -
配置提供者:哨兵作为
Redis
客户端发现的权威来源:客户端连接到哨兵请求当前可靠的master
的地址。如果发生故障,哨兵将报告新地址。
默认情况下,每个
Sentinel节点会以每秒一次的频率对
Redis节点和其它的
Sentinel节点发送
PING命令,并通过节点的回复来判断节点是否在线。
如果在
down-after-millisecondes毫秒内,没有收到有效的回复,则会判定该节点为主观下线。
如果该节点为
master,则该
Sentinel节点会通过
sentinel is-master-down-by-addr命令向其它
sentinel节点询问对该节点的判断,如果超过
<quorum>个数的节点判定
master不可达,则该
sentinel节点会将
master判断为客观下线。
这个时候,各个
Sentinel会进行协商,选举出一个领头
Sentinel,由该领头
Sentinel对
master节点进行故障转移操作。
故障转移包含如下三个操作:
-
在所有的
slave
服务器中,挑选出一个slave
,并将其转换为master
。 -
让其它
slave
服务器,改为复制新的master
。 -
将旧
master
设置为新master
的slave
,这样,当旧的master
重新上线时,它会成为新master
的slave
。
2. 搭建Redis Sentinel高可用架构
这里使用两台服务器,每台服务器上开启一个
redis-server和
redis-sentinel服务。
redis-server说明
[code]172.16.2.185:6379 主 172.16.2.181:6379 从 复制代码
redis-sentinel说明
[code]172.16.2.185:26379 172.16.2.181:26379 复制代码
2.1 建立Redis配置文件
如果要做自动故障转移,则建议所有的
redis.conf都设置
masterauth,因为自动故障只会重写主从关系,即
slaveof,不会自动写入
masterauth。如果
Redis原本没有设置密码,则可以忽略。
Redis程序上面已经安装过了,我们只需增加
redis-sentinel的相关配置即可,将
redis-sentinel的配置文件拷贝到系统配置目录
/etc/下,
sentinel.conf是
redis-sentinel的配置文件,
sentinel.conf在
Redis源码目录。
[code]cp /usr/local/redis-4.0.2/sentinel.conf /etc/ 复制代码
修改
sentinel.conf配置文件内容如下:
[code]vi /etc/sentinel.conf 复制代码
[code]protected-mode no sentinel monitor mymaster 172.16.2.185 6379 2 # redis在搭建时设置了密码,所以要进行密码配置 sentinel auth-pass mymaster “123456“ #5秒内mymaster没有响应,就认为SDOWN sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 15000 复制代码
在配置最后加上
[code]logfile /var/log/sentinel.log pidfile /var/run/sentinel.pid daemonize yes 复制代码
配置文件说明:
1.port :当前Sentinel服务运行的端口
2.dir : Sentinel服务运行时使用的临时文件夹
3.sentinel monitor master001 192.168.110.10163792:Sentinel去监视一个名为master001的主redis实例,这个主实例的IP地址为本机地址192.168.110.101,端口号为6379,而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
4.sentinel down-after-milliseconds master001 30000:指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行
5.sentinel parallel-syncs master001 1:指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
6.sentinel failover-timeout master001 180000:如果在该时间(ms)内未能完成failover操作,则认为该failover失败
7.sentinel notification-script :指定sentinel检测到该监控的redis实例指向的实例异常时,调用的报警脚本。该配置项可选,但是很常用
2.2 开放防火墙端口
[code]添加规则:iptables -I INPUT -p tcp -m tcp --dport 26379 -j ACCEPT 保存规则:service iptables save 重启 iptables:service iptables restart 复制代码
2.3 启动redis-sentinel
[code]redis-sentinel /etc/sentinel.conf 复制代码
在任意一台机子均可查看到相关服务信息
[code]redis-cli -h 127.0.0.1 -p 26379 INFO sentinel 复制代码
[code]# Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=172.16.2.185:6379,slaves=1,sentinels=2 复制代码
3. 自动故障转移测试
3.1 停止主Redis
[code]redis-cli -h 172.16.2.185 -p 6379 -a 123456 shutdown 复制代码
3.2 查看redis-sentinel的监控状态
[code]# Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=172.16.2.181:6379,slaves=1,sentinels=2 复制代码
发现从库提升为主库。
3.3 注意事项
-
如果停掉
master
后,Sentinel
显示足够数量的sdown
后,没有出现odown
或try-failover
,则检查密码等配置是否正确 -
如果停掉
master
后,试图切换的时候,发现日志出现failover-abort-not-elected
,则分2种情况分别解决:
- 如果
Redis
实例没有配置
[code]protected-mode yes bind 172.16.2.185 复制代码
则在
Sentinel配置文件加上
protected-mode no即可
- 如果
Redis
实例有配置
[code]protected-mode yes bind 172.16.2.185 复制代码
则在
Sentinel配置文件加上
[code]protected-mode yes bind 172.16.2.185 复制代码
至此,redis的高可用方案已经搭建完成。
VIP对外提供虚拟IP实现高可用
1. 现有情况概述
客户端程序(如JAVA程序)连接
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的
ip和
port,然后用返回的
ip和
port连接
Redis。
这种方法的缺点是显而易见的,每次操作
Redis至少需要发送两次连接请求,第一次请求
Sentinel,第二次请求
Redis。
更好的办法是使用
VIP,当然这对配置的环境有一定的要求,比如
Redis搭建在阿里云服务器上,可能不支持
VIP。
VIP方案是,
Redis系统对外始终是同一ip地址,当
Redis进行故障转移时,需要做的是将
VIP从之前的
Redis服务器漂移到现在新的主
Redis服务器上。
比如:当前
Redis系统中主
Redis的
ip地址是
172.16.2.185,那么
VIP(172.16.2.250)指向
172.16.2.185,客户端程序用
VIP(172.16.2.250)地址连接
Redis,实际上连接的就是当前主
Redis,这样就避免了向
Sentinel发送请求。
当主
Redis宕机,进行故障转移时,
172.16.2.181这台服务器上的
Redis提升为主,这时
VIP(172.16.2.250)指向
172.16.2.181,这样客户端程序不需要修改任何代码,连接的是
172.16.2.181这台主
Redis。
2.漂移VIP实现Redis故障转移
那么现在的问题是,如何在进行
Redis故障转移时,将
VIP漂移到新的主
Redis服务器上。
这里可以使用
Redis Sentinel的一个参数
client-reconfig-script,这个参数配置执行脚本,
Sentinel在做
failover的时候会执行这个脚本,并且传递6个参数
<master-name>、 <role>、 <state>、 <from-ip>、 <from-port>、 <to-ip> 、<to-port>,其中
<to-ip>是新主
Redis的
IP地址,可以在这个脚本里做
VIP漂移操作。
[code]sentinel client-reconfig-script mymaster /opt/notify_mymaster.sh 复制代码
修改两个服务器的
redis-sentinel配置文件
/etc/sentinel.conf,增加上面一行。然后在
/opt/目录下创建
notify_mymaster.sh脚本文件,这个脚本做
VIP漂移操作,内容如下:
[code]vi /opt/notify_mymaster.sh 复制代码
[code]#!/bin/bash echo "File Name: $0" echo "Quoted Values: $@" echo "Quoted Values: $*" echo "Total Number of Parameters : $#" MASTER_IP=${6} #第六个参数是新主redis的ip地址 LOCAL_IP='172.16.2.185' #当前服务器IP,主机172.16.2.185,从机172.16.2.181 VIP='172.16.2.250' NETMASK='24' INTERFACE='eth1' 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会一直执行这个脚本 复制代码
赋予脚本权限
[code]chmod 755 /opt/notify_mymaster.sh 复制代码
现在当前主
Redis是
172.16.2.185,需要手动绑定
VIP到该服务器上。
[code]/sbin/ip addr add 172.16.2.250/24 dev eth1 /sbin/arping -q -c 3 -A 172.16.2.250 -I eth1 复制代码
由于VIP只能绑定只有一台机子,所以建议将改为
bind 0.0.0.0添加至
redis.conf中
[code]vi /etc/redis.conf 复制代码
设置
bind 0.0.0.0
由于VIP只能绑定只有一台机子,所以建议将改为
bind 0.0.0.0添加至
sentinel.conf中
[code]vi /etc/sentinel.conf 复制代码
设置
bind 0.0.0.0
重启
Redis
[code]service redis restart` 复制代码
重启
Sentinel
[code]redis-sentinel /etc/sentinel.conf 复制代码
随后我们在另一台机器
172.16.2.181上,通过
VIP访问主机
[code]redis-cli -h 172.16.2.250 -p 6379 -a 123456 INFO replication 复制代码
可正常通讯,信息如下:
[code]# Replication role:master connected_slaves:1 slave0:ip=172.16.2.181,port=6379,state=online,offset=0,lag=0 master_replid:325b0bccab611d329d9c2cd2c35a1fe3c01ae196 master_replid2:c1f7a7d17d2c35575a34b00eb10c8abf32df2243 master_repl_offset:22246293 second_repl_offset:22241024 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:22237293 repl_backlog_histlen:9001 复制代码
访问主机的
Sentinel
[code]redis-cli -h 172.16.2.250 -p 26379 INFO sentinel 复制代码
可正常通讯,信息如下:
[code]# Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=172.16.2.185:6379,slaves=1,sentinels=3 复制代码
下面关闭主机的
Redis服务,看看VIP是否漂移到另一台服务器上。
[code]redis-cli -h 172.16.2.185 -p 6379 -a 123456 shutdown 复制代码
查看是否已进行切换
[code]redis-cli -h 172.16.2.250 -p 26379 INFO sentinel 复制代码
[code]# Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=172.16.2.181:6379,slaves=1,sentinels=3 复制代码
通过查询
Sentinel发现从机
172.16.2.181提升为主。
通过访问
VIP的方式连接
Redis
[code]redis-cli -h 172.16.2.250 -p 6379 -a 123456 INFO replication 复制代码
[code]# Replication role:master connected_slaves:0 master_replid:cab30a4083f35652053ffcd099d70b9aaf7a80f3 master_replid2:3da856dd33cce4bedd54926df6797b410f1ab9e8 master_repl_offset:74657 second_repl_offset:36065 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:74657 复制代码
博主最近把所有学习java的资料整理了一遍,以文档的形式备份在电脑里,还有java高清视频教程
有需要的可以滴滴博主,现免费送几百份,给需要的小伙伴,关注一下私信博主即可获取
- linux-运维进阶-27 Discuz论坛搭建
- FastDFS - Linux下搭建FastDFS 文件服务器与Nginx配置(部署和运维)
- redis缓存在linux上搭建的过程
- Linux下redis缓存配置、搭建、集群(3)
- linux学习之使用keepalived+haproxy搭建高可用服务器
- 无人值守安装系统及lamp和storage架构的搭建【Linux运维之道之脚本案例】
- Linux运维学习笔记之十三:搭建LAMP经典组合(Linux Apache MySQL PHP)
- DayDayUP_Linux运维学习_Jsp 相关环境的搭建
- Linux 下搭建 SQL Server 高可用服务之一
- 使用Nginx从零开始搭建基于LNMP架构的电影系统之一_Linux运维
- Linux多种负载均衡、高可用环境搭建
- linux运维之LAMP(apache+mariadb+php)搭建
- 搭建Linux系统运维与架构环境(二)
- Linux搭建高并发高可用Redis集群
- Linux运维进阶-文档总结-LNMP架构之PHP的安装和测试和简单论坛搭建
- linux学习之搭建高可用分布式文件系统MFS
- Linux运维笔记-文档总结-第三方软件仓库的搭建
- 学习如何搭建Linux运维环境
- Linux之搭建redis缓存服务器