Redis 一主两从三哨兵

本次实验的是一主两从三个哨兵,单机服务器搭建

1、redis 安装配置

首先从 redis 官网下载 redis 源代码并解压,这里使用的是 redis-4.0.6.tar.gz 版本。

先去 http://download.redis.io/releases/   下载 redis 安装包
mkdir /data
tar -xf redis-4.0.6.tar.gz -C /data
yum -y install gcc-c++		# 编译用

cd /data/redis-4.0.6/
make MALLOC=libc		# 加 MALLOC=libc 为了防止编译出错,具体百度 make MALLOC=libc
make install PREFIX=/data/redis		# 目标安装路径

安装完成后,/data/redis/bin 目录下会生成几个可执行的文件

可执行文件作用
redis-server启动 redis 服务
redis-cli命令行客户端
redis-benchmarkredis 基准测试工具
redis-check-aofredis AOF 持久化文件检测和修复工具
redis-check-rdbredis RDB 持久化文件检测和修复工具
redis-sentinel启动 sentinel

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

cd /data/redis/bin/
cp redis-server redis-cli redis-sentinel /usr/local/bin/

准备 redis 配置文件

mkdir /data/redis/{conf,db,log,redispid,sentinel}		# 配置文件及相关目录
cd /data/redis/conf
cp /data/redis-4.0.6/redis.conf redis1000.conf
cp /data/redis-4.0.6/redis.conf redis2000.conf
cp /data/redis-4.0.6/redis.conf redis3000.conf
cp /data/redis-4.0.6/sentinel.conf sentinel1001.conf
cp /data/redis-4.0.6/sentinel.conf sentinel2001.conf
cp /data/redis-4.0.6/sentinel.conf sentinel3001.conf

vim redis1000.conf (主库) 修改以下

bind 192.168.128.128			# 绑定本机 IP地址
protected-mode no				# 保护模式修改为否,允许远程连接
port 1000					# 端口号
timeout 300					# 客户端闲置多长时间后关闭连接,默认此参数为0即关闭此功能
daemonize yes					# 设置后台启动
pidfile "/data/redis/redispid/redis_1000.pid"	# pid 文件
loglevel notice					# 日志级别,可用的级别有debug.verbose.notice.warning
logfile "/data/redis/log/redis1000.log"		# 日志目录
databases 16					# 数据库数量
rdbcompression yes				# 指定存储至本地数据库时是否压缩文件,默认为yes即启用存储
dbfilename "dump1000.rdb"		# 数据文件名称
dir "/data/redis/db"			# 数据目录
masterauth "123456"				# 设定主库密码与当前库密码同步,保证从库能够提升为主库
slave-priority 10				# 优先级,哨兵将挑选优先级最小数字为master
requirepass "123456"			# 设定密码
maxclients 100					# 设置同一时间最大客户连接数
appendonly yes					# 打开 AOF 持久化
appendfilename "appendonly1000.aof"		# 指定更新日志文件名
从库 redis2000.conf 和 redis3000.conf 与主库 redis1000.conf 基本相同,需要修改各自的ip、端口、优先级等等
从库需要添加主库同步配置:slaveof 192.168.128.128 1000

vim sentinel1001.conf (哨兵配置) 含有 mymaster 的配置,都必须放置在 sentinel monitor mymaster 192.168.128.128 1000 2 之后,否则会出现问题。修改以下

protected-mode no		# 关闭保护模式
daemonize yes			# 守护进程模式
port 1001			# 端口号
logfile "/data/redis/log/sentinel1001.log"		# 日志文件

sentinel myid 37e5b3bd915b4cb956e743927237b900c8c15578	# 这一行由启动成功的哨兵自己写入

sentinel monitor mymaster 192.168.128.128 1000 2	# 监控master节点所在的IP端口,并设置2个哨兵监控到master节点挂掉才能启动故障转移,把其中一台slave升级为master,如果旧master恢复正常,加入slave。

sentinel down-after-milliseconds mymaster 5000		# 5秒内服务器没有响应,说明服务器挂了

sentinel failover-timeout mymaster 15000		# 15秒内master没有活起来,就重新选举主节点

sentinel parallel-syncs mymaster 2		# 表示如果master重新选出来后,其它slave节点能同时并行从新master同步缓存的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保定的设置为1,只同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。

sentinel auth-pass mymaster 123456		# 主数据库密码

# 集群启动成功后自动生成
sentinel config-epoch mymaster 2
sentinel leader-epoch mymaster 2
sentinel known-slave mymaster 192.168.128.128 2000
sentinel known-slave mymaster 192.168.128.128 3000
sentinel known-sentinel mymaster 192.168.128.128 2001 ad9ea7f15c79cf466b74589d52a984c06bb995bb
sentinel known-sentinel mymaster 192.168.128.128 3001 58cea0bd40d7dc5a06259a3f61de0111e83dacb0
sentinel current-epoch 2
哨兵 sentinel2001.conf 和 sentinel3001.conf 与哨兵 sentinel1001.conf 基本相同,需要修改各自的ip和端口号

2、启动 redis

启动需要按照 master --> slave --> sentinel 的顺序进行启动

cd /data/redis/conf
redis-server redis1000.conf
redis-server redis2000.conf
redis-server redis3000.conf
redis-sentinel sentinel1001.conf
redis-sentinel sentinel2001.conf
redis-sentinel sentinel3001.conf
ps aux | grep redis

3、检查集群同步状态

>> redis-cli -h 192.168.128.128 -p 1000 -a 123456
>> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.128.128,port=3000,state=online,offset=53159307,lag=0
slave1:ip=192.168.128.128,port=2000,state=online,offset=53159163,lag=1
master_replid:05ec360afadbd0de717c76e42b9459b10a839e30
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:53159465
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:52110890
repl_backlog_histlen:1048576
>> exit

>> redis-cli -h 192.168.128.128 -p 2000 -a 123456
>> info replication
# Replication
role:slave
master_host:192.168.128.128
master_port:1000
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:53188591
slave_priority:50
slave_read_only:1
connected_slaves:0
master_replid:05ec360afadbd0de717c76e42b9459b10a839e30
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:53188591
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:52140016
repl_backlog_histlen:1048576
>> exit

>> redis-cli -h 192.168.128.128 -p 3000 -a 123456
>> info replication
# Replication
role:slave
master_host:192.168.128.128
master_port:1000
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:53205119
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:05ec360afadbd0de717c76e42b9459b10a839e30
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:53205119
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:52156544
repl_backlog_histlen:1048576
>> exit

4、测试读写是否同步

>> redis-cli -h 192.168.128.128 -p 1000 -a 123456
>> set xm wxk
OK
>> get xm
"wxk"
>> exit

>> redis-cli -h 192.168.128.128 -p 2000 -a 123456
>> get xm
"wxk"
>> exit

>> redis-cli -h 192.168.128.128 -p 3000 -a 123456
>> get xm
"wxk"
>> exit

>> redis-cli -h 192.168.128.128 -p 2000 -a 123456
>> set xm zx
(error) READONLY You can't write against a read only slave.
>> exit

>> redis-cli -h 192.168.128.128 -p 3000 -a 123456
>> set xm zx
(error) READONLY You can't write against a read only slave.
>> exit

从数据库只允许读操作,不允许写操作。
想要从节点有写操作,修改主节点的配置文件:  slave-read-only yes(只读)(默认)
				      slave-read-only no (读写) 一般不用

5、查看 sentinel

查看 sentinel1001.log 日志 (sentinel2001.log 和 sentinel3001.log 与 sentinel1001.log 一样,不做累述了)

cat /data/redis/log/sentinel1001.log
11337:X 16 Dec 17:15:22.329 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
11337:X 16 Dec 17:15:22.330 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=11337, just started
11337:X 16 Dec 17:15:22.330 # Configuration loaded
11338:X 16 Dec 17:15:22.332 * Increased maximum number of open files to 10032 (it was originally set to 1024).
11338:X 16 Dec 17:15:22.334 * Running mode=sentinel, port=1001.
11338:X 16 Dec 17:15:22.335 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
11338:X 16 Dec 17:15:22.340 # Sentinel ID is 37e5b3bd915b4cb956e743927237b900c8c15578
11338:X 16 Dec 17:15:22.340 # +monitor master mymaster 192.168.128.128 1000 quorum 2
11338:X 16 Dec 17:15:22.342 * +slave slave 192.168.128.128:2000 192.168.128.128 2000 @ mymaster 192.168.128.128 1000
11338:X 16 Dec 17:15:22.344 * +slave slave 192.168.128.128:3000 192.168.128.128 3000 @ mymaster 192.168.128.128 1000
11338:X 16 Dec 17:15:28.174 * +sentinel sentinel ad9ea7f15c79cf466b74589d52a984c06bb995bb 192.168.128.128 2001 @ mymaster 192.168.128.128 1000
11338:X 16 Dec 17:15:32.192 * +sentinel sentinel 58cea0bd40d7dc5a06259a3f61de0111e83dacb0 192.168.128.128 3001 @ mymaster 192.168.128.128 1000

查看 sentinel 的连接状态 (其他两个连接状态与这个一样,不做累述了)

>> redis-cli -h 192.168.128.128 -p 1001 info sentinel
# 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=192.168.128.128:1000,slaves=2,sentinels=3

6、测试是否可以自动切换

>> redis-cli -h 192.168.128.128 -p 1000 -a 123456 shutdown
>> redis-server /data/redis/conf/redis1000.conf

查看 sentinel1001.log 日志
主从节点自动切换,端口为 2000 的成为了主节点,端口为 1000 的成为了从节点

redis1000.conf 配置文件:结尾自动添加:slaveof 192.168.128.128 2000
redis2000.conf 配置文件:关于 slaveof 的自动删除
redis3000.conf 配置文件:slaveof 192.168.128.128 1000 自动改为 slaveof 192.168.128.128 2000

OK

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值