系统性能优化

Redis主从及哨兵模式的部署

2021-12-23  本文已影响0人  Rami

一. Redis安装

官网地址:https://redis.io/download
下载包:wget http://download.redis.io/releases/redis-3.2.12.tar.gz

1.将安装包解压至/usr/local/下(可以自己定义)

tar xf redis-3.2.12.tar.gz -C /usr/local/
cd /usr/local/
mv redis-3.2.12 redis

2.安装环境依赖

yum -y install gcc automake autoconf libtool make       #由于redis是由C语言编写的,它的运行需要C环境,因此我们需要先安装gcc以及所需依赖

3.根据redis自带的Makefile进行编译安装

cd /usr/local/redis/
make   #开始编译
make install #安装

4.配置环境变量

vim /etc/profile
export PATH=/usr/local/redis/src:$PATH
source  /etc/profile

5.编写配置文件

daemonize yes                 #是否后台运行
port 6379                     #默认端口
logfile /usr/local/redis/6379/redis.log   #日志文件位置
dir /usr/local/redis/6379/               #持久化文件存储位置
pidfile /usr/local/redis/6379/redis.pid  #pid文件存储位置
dbfilename dump.rdb        #RDB持久化数据文件:
protected-mode no          #默认开启了保护模式,只允许本地回环地址登录并访问数据库。
#bind 127.0.0.1            #这里的bind指的是只有指定的网段才能远程访问这个redis,注释掉后,就没有这个限制了
requirepass 123456    #设置登录密码

6.启动

redis-server /usr/local/redis/6379/redis.conf   #因为配置了环境变量所以直接redis-server启动

7.客户端连接测试

[root@redis-2 6379]# redis-cli    
127.0.0.1:6379> set name wangwu    
(error) NOAUTH Authentication required.       #因为配置了密码,所以这里需要先进行身份验证
127.0.0.1:6379> auth 123456        #输入密码ok
OK
127.0.0.1:6379> set name wangwu
OK
127.0.0.1:6379> 
[root@redis-2 6379]# redis-cli  -a 123456
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> 

8.设置开机自启

vim /etc/rc.d/rc.local
/usr/local/bin/redis-server /usr/local/redis/6379/redis.conf
chmod +x /etc/rc.d/rc.local

9.关闭redis

redis-cli shutdown                         #方法一
[root@redis-2 ~]# redis-cli -a 123456      #方法二
127.0.0.1:6379> shutdown
not connected> 
pkill redis-server                        #方法三

10.redis配置,按需添加

daemonize:如需要在后台运行,把该项的值改为yes
pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址
bind:指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项
port:监听端口,默认为6379
timeout:设置客户端连接时的超时时间,单位为秒
loglevel:等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice
logfile:配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上
database:设置数据库的个数,默认使用的数据库是0
save:设置redis进行数据库镜像的频率
rdbcompression:在进行镜像备份时,是否进行压缩
dbfilename:镜像备份文件的文件名
dir:数据库镜像备份的文件放置的路径
slaveof:设置该数据库为其他数据库的从数据库
masterauth:当主数据库连接需要密码验证时,在这里设定
requirepass:设置客户端连接后进行任何其他指定前需要使用的密码
maxclients:限制同时连接的客户端数量
maxmemory:设置redis能够使用的最大内存
appendonly:开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态
appendfsync:设置appendonly.aof文件进行同步的频率
vm_enabled:是否开启虚拟内存支持
vm_swap_file:设置虚拟内存的交换文件的路径
vm_max_momery:设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0
vm_page_size:设置虚拟内存页的大小
vm_pages:设置交换文件的总的page数量
vm_max_thrrads:设置vm IO同时使用的线程数量

二.Redis主从复制实现

1.环境及配置:

准备两个或两个以上redis实例,这里直接用一台机器做演示了

mkdir /data/638{0..2}

配置文件示例:
cat >> /data/6380/redis.conf <<EOF
port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
requirepass 123
masterauth 123
EOF


cat >>   /data/6381/redis.conf <<EOF
port 6381
daemonize yes
pidfile /data/6381/redis.pid
loglevel notice
logfile "/data/6381/redis.log"
dbfilename dump.rdb
dir /data/6381
requirepass 123
masterauth 123
EOF


cat >>   /data/6382/redis.conf <<EOF
port 6382
daemonize yes
pidfile /data/6382/redis.pid
loglevel notice
logfile "/data/6382/redis.log"
dbfilename dump.rdb
dir /data/6382
requirepass 123
masterauth 123
EOF


启动:
redis-server /data/6380/redis.conf
redis-server /data/6381/redis.conf
redis-server /data/6382/redis.conf

2、开启主从

主节点:6380
从节点:6381、6382

6381/6382这两台机器命令行操作:
redis-cli -p 6381 -a 123 SLAVEOF 10.0.0.22 6380  #这里的ip跟端口是主的
redis-cli -p 6382 -a 123 SLAVEOF 10.0.0.22 6380

3、查询主从状态

 redis-cli -p 6380 -a 123 info replication
 redis-cli -p 6381 -a 123 info replication
 redis-cli -p 6382 -a 123 info replication

4. 解除主从身份

redis-cli -p 6382 -a 123 SLAVEOF no one

三、哨兵

1.哨兵原理

Sentinel 使用的算法核心是 Raft 算法,主要用途就是用于分布式系统,系统容错,以及Leader选举,每个Sentinel都需要定期的执行以下任务:

每个 Sentinel 会自动发现其他 Sentinel 和从服务器,它以每秒钟一次的频率向它所知的主服务器、从服务器以及其他 Sentinel 实例发送一个 PING 命令。

如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 那么这个实例会被 Sentinel 标记为主观下线。 有效回复可以是: +PONG 、 -LOADING 或者 -MASTERDOWN 。

如果一个主服务器被标记为主观下线, 那么正在监视这个主服务器的所有Sentinel要以每秒一次的频率确认主服务器的确进入了主观下线状态。

如果一个主服务器被标记为主观下线, 并且有足够数量的Sentinel(至少要达到配置文件指定的数量)在指定的时间范围内同意这一判断, 那么这个主服务器被标记为客观下线。

在一般情况下, 每个Sentinel会以每 10 秒一次的频率向它已知的所有主服务器和从服务器发送 INFO 命令。 当一个主服务器被Sentinel标记为客观下线时,Sentinel向下线主服务器的所有从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。

当没有足够数量的Sentinel同意主服务器已经下线, 主服务器的客观下线状态就会被移除。 当主服务器重新向Sentinel的 PING 命令返回有效回复时, 主服务器的主观下线状态就会被移除。

2.sentinel搭建过程

mkdir /data/26380
cd /data/26380

vim sentinel.conf
port 26380

#守护进程模式(是否后台运行)
daemonize yes

##默认开启了保护模式,只允许本地回环地址登录并访问数据库(这里是关闭)
protected-mode no

#指明日志文件名
logfile "./sentinel.log"

#哨兵监控的master(指示 Sentinel 去监视一个被命名为 mymaster 的master,可指定为任何名字,Master IP为127.0.0.1 , 端口号为 6379 ,这个master判断为失效至少需要 1 个 Sentinel 同意)
sentinel monitor mymaster 10.0.0.22 6380 1

#master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds mymaster 3000

#若哨兵在配置值内未能完成故障转移操作,则任务本次故障转移失败
sentinel failover-timeout mymaster 18000

#如果redis配置了密码,那这里必须配置认证,否则不能自动切换
sentinel auth-pass mymaster 123

3.启动

redis-sentinel  /data/26380/sentinel.conf
[root@redis-1 data]# ps -ef |grep sentinel
root       7820      1  0 16:05 ?        00:00:00 redis-sentinel *:26380 [sentinel]
root       7835   7111  0 16:07 pts/0    00:00:00 grep --color=auto sentinel

4.停主库测试

killl 7453(主库进程pid)
redis-cli  -p 6381 -a 123 info replication
redis-cli  -p 6382 -a 123 info replication
此时会发现其中一台从库成了主
上一篇下一篇

猜你喜欢

热点阅读