一、部署主从架构(一主二从)
由于 src 下文件非常多,我们可以将几个常用的命令和 conf 配置文件复制出来进行统一管理,如下:
1、新建bin目录和etc目录
cd /data/server/redis/
mkdir etc
mkdir bin
cd etc/
mkdir redis_master
mkdir redis_slave1
mkdir redis_slave2
说明:
redis_master作为master节点配置文件的目录
redis_slave1作为第一个slave节点配置文件的目录
redis_slave2作为第二个slave节点配置文件的目录
2、回到安装目录将配置文件拷贝对应目录下
cp redis.conf /data/server/redis/etc/redis_master
cp redis.conf /data/server/redis/etc/redis_slave1
cp redis.conf /data/server/redis/etc/redis_slave2
3、进入 src 文件夹下,是否存在mkreleasehdr.sh、redis-benchmark、redis-check-aof、redis-check-rdb、redis-cli、redis-server、redis-sentinel
没有的话将文件复制到 bin 文件夹
cd src/
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /data/server/redis/bin/
4、启动一个redis服务,redis是否可以正常启动
cd /data/server/redis/bin
./redis-server ../etc/redis_master/redis.conf
ps -ef | grep redis 查看redis是否启动
验证后关闭服务
redis-cli -p 6379 shutdown
或者
kill 进程号(84080)
5、分别修改各节点配置文件
cd etc/redis_master
vim redis.conf
主节点配置
bind:0.0.0.0 ##Redis 默认只允许本机访问,把 bind 修改为 0.0.0.0 表示允许所有远程访问。如果想指定限制访问,可设置对应的 ip。
port:6379
protected-mode:no ##关闭保护模式,可以外部访问
daemonize:yes ##设置为后台启动
pidfile "/var/run/redis_01.pid" ##pid存储位置
logfile "" ##日志文件存储位置,根据需求填写
requirepass:123456 ##设置 redis 连接密码 (重要)
masterauth:123456 ##slave 服务连接 master 的密码(可以用redis启动密码)重要!!!
从节点配置
从机的配置和主机相似,不同的地方是需要使用replicaof指定主机(master)的IP地址和端口,需要注意的是老版本使用的是 slaveof,新版本 replicaof ,如下。
bind:0.0.0.0
port:6378
protected-mode:no
daemonize yes
pidfile "/var/run/redis_01.pid"
logfile ""
requirepass:123456
masterauth:123456
replicaof 192.**.**.** 6379 ##主节点的IP 端口
replicaof 192.**.**.** 6379 或 slaveof 192.**.**.** 6379
指定当本机为 slave 服务时,设置 master 服务的IP地址及端口,在 redis 启动的时候会自动跟 master 进行数据同步,所以两台从机都这样配置即可。
照样修改另一个从节点的配置文件,端口可为6377。
主节点配置完成
三:主从验证
1、分别启动三个节点
cd bin/
./redis-server ../etc/redis_master/redis.conf
./redis-server ../etc/redis_slave1/redis.conf
./redis-server ../etc/redis_slave2/redis.conf
查看redis启动情况
ps -ef | grep redis
2、连上一个节点查看主从信息
./redis-cli -h xx.xx.xx.xx -p 6379
auth 密码
四:哨兵模式搭建
哨兵的配置文件是:sentinel.conf
1、同样为了方便管理,将sentinel.conf复制至对应的目录下
cd /data/servers/redis
cp sentinel.conf /data/servers/redis/etc/redis_master/
cp sentinel.conf /data/servers/redis/etc/redis_slave1/
cp sentinel.conf /data/servers/redis/etc/redis_slave2/
2、分别编辑 sentinel.conf
master节点6379对应的sentinel.conf端口为6376
slave1节点6378对应的sentinel.conf端口为6375
slave2节点6377对应的sentinel.conf端口为6374
vim sentinel.conf
port:6376 ## 默认端口为26379。
protected-mode:no ## 关闭保护模式,可以外部访问
daemonize yes ##设置为后台启动,没有:号
pidfile "/var/run/redis-sentinel_6376.pid" ##redis sentinel pid文件位置
logfile "" ##日志文件,
sentinel monitor mymaster 192.**.**.** 6379 2 ##指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换
sentinel auth-pass mymaster 123456 ##当在Redis实例中开启了requirepass,这里就需要提供密码
sentinel down-after-milliseconds mymaster 3000 ##这里设置了主机多少秒无响应,则认为挂了
snetinel parallel-syncs mymaster 1 ##主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1
sentinel failover-timeout mymaster 180000 ##故障转移的超时时间,这里设置为三分钟
3、启动三个哨兵
cd bin/
redis-sentinel ../etc/redis_master/sentinel.conf
redis-sentinel ../etc/redis_slave1/sentinel.conf
redis-sentinel ../etc/redis_slave2/sentinel.conf
4、查看哨兵信息
./redis-cli -h 172.**.**.** -p 6375
五:容灾切换
1、模拟主机宕机:手动停掉master节点
./redis-cli -h 172.**.**.** -p 6379
auth 123456
info Replication 查看是否为主节点
# Replication
role:master 是否为主节点
connected_slaves:2 从库
slave0:ip=172.**.**.***,port=6377,state=online,offset=44077,lag=1
slave1:ip=172.**.**.***,port=6378,state=online,offset=43935,lag=1
master_repl_offset:44077
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:44076
执行:shutdown
停止标志
2、查看从库是否变为住节点
./redis-cli -h 172.**.**.** -p 6378
auth 123456
info Replication 查看是否为主节点
原-----
# Replication
role:slave
master_host:172.**.**.156
master_port:6378
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:29046
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
因主库停止所以应是
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
至此主从搭建成功
易错点
1.主节点与从节点redis.conf中配置一致
masterauth "redis登录密码"
2.出现以下错误解决方法
*** FATAL CONFIG FILE ERROR *** Reading the configuration file, at line 1056 >>> 'replicaof 192.**.**.** 6379' Bad directive or wrong number of arguments
需要注意的是老版本使用的是 slaveof,新版本 replicaof。
3.出现以下错误解决方法
*** FATAL CONFIG FILE ERROR *** Reading the configuration file, at line 1056 >>> 'daemonize:yes' Bad directive or wrong number of arguments
修改为
daemonize yes
4.出现以下异常
# Replication
role:slave
master_host:172.**.**.**
master_port:6378 ==》连接的时自己slaves配置端口号,不是master的端口号,因此主从连接不成功。
master_link_status:down ==》这个时down,并不是up,表示主从并没有连接上
master_last_io_seconds_ago:-1
解决方法
由上述查看的信息发现redis.conf的从配置文件端口号配置错误导致主从连接错误,在从配置的redis.conf下更改为主的端口号就可以了。
slaveof 172.****.** 主节点IP 2
如:slaveof 172.0.0.1 6379 2
同时查看一下哨兵的配置文件sentinel.conf里面的
sentinel monitor mymaster 172.**.**.** 主节点 2
如:sentinel monitor mymaster 172.0.0.1 6379 2