【云计算】Openstack配置Redis服务—一主二从三哨兵模式

Redis一主二从三哨兵模式

复制代码
hostnamectl set-hostname   //修改主机名

将提供的Redis安装文件下载redis-3.2.12.tar.gz到三台虚拟机中,解压到/opt目录中,并配置yum源使用本地目录,命令如下(三台虚拟机操作一致,以redis1主机为例):

shell 复制代码
[root@redis1 ~]# curl -O #下载地址
[root@redis1 ~]# tar -xf redis-3.2.12.tar.gz -C /opt/
[root@redis1 ~]# mv /etc/yum.repos.d/* /media/
[root@redis1 ~]# cat << EOF >> /etc/yum.repos.d/redis.repo
[redis]
name=redis
baseurl=file:///opt/redis
gpgcheck=0
enabled=1
EOF
[root@redis1 ~]# yum clean all && yum repolist

在三个节点使用yum命令安装Redis服务并启动。 命令如下(三台虚拟机操作一致,以redis1主机为例):

shell 复制代码
[root@redis1 ~]# yum install -y redis 
... ...
Complete!
[root@redis1 ~]# systemctl start redis
[root@redis1 ~]# systemctl enable redis

按照主从Redis配置,将redis2节点和redis3节点作为redis1节点的从节点。 配置完成后的一主二从Redis集群将作为哨兵模式的基础。 命令如下:

redis1节点:

修改redis1节点的配置文件/etc/redis.conf如下:

shell 复制代码
[root@redis1 ~]# vi /etc/redis.conf
#第一处修改
# bind 127.0.0.1                     //找到bind 127.0.0.1这行并注释掉
#第二处修改
protected-mode no                //将yes修改为no,外部网络可以访问
#第三处修改
daemonize yes                       //将no修改为yes,开启守护进程
#第四处修改
requirepass "123456"                   //添加设置访问密码
#第五处修改,设定主库密码与当前库密码同步,保证从库能够提升为主库
masterauth "123456"
#第六处修改,将no修改为yes,打开AOF持久化支持
appendonly yes

至此,redis1主节点配置完毕,重启服务,命令如下:

shell 复制代码
[root@redis1 ~]# systemctl restart redis

edis2节点:

修改redis2节点的配置文件/etc/redis.conf如下:

shell 复制代码
[root@redis2 ~]# vi /etc/redis.conf
#第一处修改
# bind 127.0.0.1                     //找到bind 127.0.0.1这行并注释掉
#第二处修改
protected-mode no                    //将yes修改为no,外部网络可以访问
#第三处修改
daemonize yes                       //将no修改为yes,开启守护进程
#第四处修改
# requirepass foobared                 //找到该行
requirepass "123456"                   //在下方添加设置访问密码
#第五处修改
# slaveof <masterip> <masterport>       //找到该行
slaveof 192.168.200.21 6379          //在下方添加访问的主节点IP与端口
#第六处修改
# masterauth <master-password>        //找到该行
masterauth "123456"                   //在下方添加访问主节点密码
#第七处修改,将no修改为yes,打开AOF持久化支持
appendonly yes

至此,redis2主节点配置完毕,重启服务,命令如下:

shell 复制代码
[root@redis2 ~]# systemctl restart redis

redis2主节点和redis2主节点配置相同

复制代码
scp /etc/redis.conf root@ip:/etc/

验证:

redis1主节点:

shell 复制代码
[root@redis1 ~]# redis-cli -h 192.168.200.21 -p 6379 -a 123456 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.200.22,port=6379,state=online,offset=9383,lag=0
slave1:ip=192.168.200.23,port=6379,state=online,offset=9238,lag=1
master_repl_offset:9383
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:9382

redis2从节点:

shell 复制代码
[root@redis2 ~]# redis-cli -h 192.168.200.22 -p 6379 -a 123456 info replication
# Replication
role:slave
master_host:192.168.200.21
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:2648
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

redis3从节点:

shell 复制代码
[root@redis3 ~]# redis-cli -h 192.168.200.23 -p 6379 -a 123456 info replication
# Replication
role:slave
master_host:192.168.200.21
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:8658
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

(2)Redis哨兵模式配置

redis1节点:

修改redis1节点的/etc/redis-sentinel.conf配置文件,具体内容如下:

shell 复制代码
[root@redis1 ~]# vi /etc/redis-sentinel.conf 
# 1. 保护模式修改为否,允许远程连接
protected-mode no
# 2. 修改监控地址,为主redis库的主机ip地址
sentinel monitor mymaster 192.168.200.21 6379 2
# 3. 添加配置5秒内没有响应,就反馈服务器挂了
sentinel down-after-milliseconds mymaster 5000
# 4. 修改配置15秒内master没有活起来,就重新选举主
sentinel failover-timeout mymaster 15000
# 5. 表示如果master重新选出来后,其它slave节点能同时并行从新master同步缓存的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最安全的设置为1,只同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。这里设置为2。
sentinel parallel-syncs mymaster 2
# 6. 添加配置主数据库密码为123456
sentinel auth-pass mymaster 123456

修改redis2从节点和redis3从节点的/etc/redis-sentinel.conf配置文件,修改内容与redis1主节点的/etc/redis-sentinel.conf配置文件一致。

修改完配置文件后,哨兵模式配置就完毕了,接下来需要重启服务。 因为Redis服务已经启动,现在只需要启动Redis哨兵服务。 命令如下所示:

所有节点启动哨兵:

shell 复制代码
# systemctl restart redis-sentinel
# systemctl enable redis-sentinel

3)哨兵模式信息查看

在redis1节点,查看哨兵模式信息,命令如下:

shell 复制代码
[root@redis1 ~]# redis-cli -h 192.168.200.21 -p 26379 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.200.21:6379,slaves=2,sentinels=3

在redis2节点,查看哨兵模式信息,命令如下:

shell 复制代码
[root@redis2 ~]# redis-cli -h 192.168.200.22 -p 26379 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.200.21:6379,slaves=2,sentinels=3

在redis3节点,查看哨兵模式信息,命令如下:

shell 复制代码
[root@redis3 ~]# redis-cli -h 192.168.200.23 -p 26379 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.200.21:6379,slaves=2,sentinels=3

可以看到目前集群中有一个Redis主节点,两个Redis从节点,三个哨兵节点。

(4)哨兵模式验证

哨兵作为对Redis实例的监控,通过选举算法保证哨兵的鲁棒性和高可用,所以哨兵至少要部署3台,符合半数原则,需要5或者7,超过一半,不包含一半存活的时候,才能够选举出leader,才能进行主从的切换功能。

哨兵高可用测试:分别连接对应的Redis服务端,手动停止主Reids服务,看主从是否切换成功。

redis1节点,手动停止服务,然后查看主节点是否切换,命令如下:

SHELL 复制代码
[root@redis1 ~]# systemctl stop redis

切换到redis2节点,查看Redis集群的主从信息(访问reids2节点的Redis服务),命令如下(redis主节点随机切换到从节点):

SHELL 复制代码
[root@redis2 ~]# redis-cli -h 192.168.200.22 -p 6379 -a 123456 info replication
# Replication
role:slave
master_host:192.168.200.23
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:6591
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

可以看到,redis2节点的master_host变成了192.168.200.23,也就是说redis3节点变成了主节点。

然后切换到redis3节点,查看Redis集群的主从信息(访问reids3节点的Redis服务),命令如下:

shell 复制代码
[root@redis3 ~]# redis-cli -h 192.168.200.23 -p 6379 -a 123456 info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.200.22,port=6379,state=online,offset=7461,lag=0
master_repl_offset:7461
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:7460

redis3节点成功切换成了主节点。 可以看到,当主节点发生了宕机,其他的从节点可以自动切换成主节点。

切换到redis1节点,启动恢复Redis服务,查看redis集群的主从信息(访问reids1节点的Redis服务),命令如下:

shell 复制代码
[root@redis1 ~]# systemctl restart redis
[root@redis1 ~]# systemctl restart redis-sentinel
[root@redis1 ~]# redis-cli -h 192.168.200.21 -p 6379 -a 123456 info replication
# Replication
role:slave
master_host:192.168.200.23
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:103524
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

可以看见redis1节点变成了从节点。 Redis哨兵模式的验证成功。

相关推荐
zhengzizhe4 小时前
Redssion出现attempt to unlock lock, not locked by current thread by node id
redis
缘的猿8 小时前
云计算划分标准与Kubernetes NetworkPolicy深度解析
容器·kubernetes·云计算
互联网志8 小时前
云计算综合标准化体系建设提供系统性指引
云计算
兜兜风d'8 小时前
redis字符串命令
数据库·redis·缓存
西瓜er9 小时前
Docker 一键部署指南:GitLab、Nacos、Redis、MySQL 与 MinIO 全解析
redis·docker·gitlab
王道长服务器 | 亚马逊云9 小时前
AWS Shield 与海外高防服务器的对比分析
服务器·云计算·aws
weixin_307779139 小时前
AWS云上ClickHouse数据仓库部署方案详解
开发语言·clickhouse·自动化·云计算·aws
Amy_au9 小时前
AWS Lambda 学习笔
学习·云计算·aws
潇凝子潇9 小时前
AWS CLI自动删除资源脚本
chrome·云计算·aws
weixin_307779139 小时前
使用AWS IAM和Python自动化权限策略分析与导出
开发语言·python·自动化·云计算·aws