Redis主从和哨兵模式搭建
一、系统环境和redis版本:
- 系统:CentOS-7-x86_64
- Redis:redis-5.0.2
- 环境配置:一台master,二台slave
|
名称 |
IP |
端口 |
密码 |
|
Master |
192.168.8.111 |
6379 |
1+1=2?Yes |
|
Slave |
192.168.8.112 |
6379 |
1+1=2?Yes |
|
slave |
192.168.8.113 |
6379 |
1+1=2?Yes |
二、安装配置CentOS7:
a)安装系统太简单不描述,linux主要系统目录如下:
|
/etc/sysconfig/network-scripts/ifcfg-eth0 #网卡配置文件 /etc/resolv.conf #客户端DNS /etc/hosts #本地的主机名解析的文件 /etc/sysconfig/network #主机名 /etc/fstab #开机磁盘自动挂载的文件 /etc/rc.local #把命令写在此处,系统自启动时会执行 /etc/inittab #开机加载先后级别的脚本 /etc/init.d # yum、rpm安装的软件默认的启动命令放在目录下 /etc/profile #全局(所有用户) /etc/bashrc #全局(所有用户) ~/.bashrc #局部(当前用户) /usr/local #C盘Program默认的安装目录 /usr/src #源码安装目录 /var/log/messages #系统日志 /var/log/secure #安全日志 |
b)配置网络:
vim /etc/sysconfig/network-scripts/ifcfg-eth0 # 网卡配置文件一般为ifcfg-xxxxxx
|
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth0 UUID=7a752861-020f-427c-bc29-fd8f1eeb80bc DEVICE=eth0 ONBOOT=yes IPADDR=192.168.8.111 PREFIX=24 GATEWAY=192.168.8.1 DNS1=114.114.114.114 |
Service network restart
Ip addr
c) 防火墙策略:
firewall-cmd --zone=public --add-port=6379/tcp --permanent # 开放6379端口
firewall-cmd --zone=public --remove-port=6379/tcp --permanet # 删除6379端口
firewall-cmd --zone=public --add-port=26379/tcp --permanent # 开放26379端口
firewall-cmd --zone=public --remove-port=26379/tcp --permanet # 删除26379端口
firewall-cmd --reload # 配置立即生效
firewall-cmd --zone=public --list-ports # 查看当前防火墙开放的端口
systemctl stop firewalld.service # 关闭防火墙
firewall-cmd --state # 查看防火墙状态
netstat -lnpt # 查看端口开放状态
ss -tanl #查看端口
d) 配置环境:
yum -y install gcc automake autoconf libtool make
yum -y install tcl
yum -y install telnet
yum -y install openssh*
systemctl enable sshd
vim /etc/ssh/sshd_config # 配置ssh文件
|
Port 22 ListenAddress 192.168.8.111 PermitRootLogin yes PasswordAuthentication yes AllowUsers root #添加允许远程SSH登陆的用户名,空格隔开(需reboot) |
三、配置redis:
a) 上传或wget得到redis-5.0.2.tar.gz压缩包:
cd /root
wget http://download.redis.io/releases/redis-5.0.2.tar.gz
b) 安装redis:
tar -xzvf redis-5.0.2.tar.gz
ll
cd redis-5.0.2 #进入redis目录
make # 编译
make install # 执行安装,可用参数指定安装路径”PREFIX=/xxx/xxx”
c) 测试redis正确安装:
redis-server redis.conf # 启动redis服务,顺便看一下是否安装成功
redis-cli -h 192.168.8.111 -p 6379 -a 1+1=2?Yes # 登陆redis命令界面
redis-cli -h 192.168.8.111 -p 6379 -a 1+1=2?Yes shutdown # 关闭redis进程或kill
d) 配置主从复制模式:
1. Master端,修改conf文件:
vim /root/redis-5.0.2/redis.conf #修改redis配置,完成后可用mv改名
|
protected-mode no # 允许远程访问 daemonize yes # redis服务后台运行 port 6379 # 端口号 logfile 7000.log # 日志文件及路径 dir ./ # 数据文件目录 requirepass 1+1=2?Yes # 配置redis登陆密码 masterauth 1+1=2?Yes # 配置哨兵模式选举时的内部访问密码 bind 192.168.8.111 127.0.0.1 # 配置外网访问IP # AOF 数据持久化,主从模式必须开启 appendonly yes appendfilename aof-7000.aof appendfsync everysec no-appendfsync-on-rewrite yes auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb |
2. Slave端,修改conf配置文件:
vim /root/redis-5.0.2/redis.conf #修改redis配置,完成后可用mv改名
|
protected-mode no # 允许远程访问 daemonize yes # redis服务后台运行 port 6379 # 端口号 logfile 7000.log # 日志文件及路径 dir ./ # 数据文件目录 requirepass 1+1=2?Yes # 配置redis登陆密码 slaveof 192.168.8.111 6379 # 绑定master的IP和端口 masterauth 1+1=2?Yes # 配置哨兵模式选举时的内部访问密码 bind 192.168.8.111 127.0.0.1 # 配置外网访问IP # AOF 数据持久化,主从模式必须开启 appendonly yes appendfilename aof-7000.aof appendfsync everysec no-appendfsync-on-rewrite yes auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb |
3. 配置redis服务系统启动:
cd /root/redis-5.0.2/untils/
./install_server.sh # 执行redis提供的系统启动解决方案,一路回车即可
(注:执行完毕,会自动生成”/etc/init.d/redis_6379”脚本文件)
chkconfig –add redis_6379 # 将生成的脚本写入自定义系统服务
systemctl start redis_6379 # 启动服务,重启也成
systemctl daemon-reload # 重启系统也可以
e) 配置哨兵模式:
1. 哨兵模式Sentinel架构示意图:

2. 配置三台机器的conf,以启动Sentinel:
cd /root/redis-5.0.2
vim sentinel-26379.conf
|
port 26379 # 指定哨兵模式端口 daemonize yes #后台运行 logfile "/root/redis-5.0.2/26379.log" # 日志位置 dir "./" # 数据目录 sentinel monitor mymaster 192.168.8.111 6379 2 # 指定监控主库mymaster的IP、端口、2台sentinel选举 sentinel down-after-milliseconds mymaster 30000 # 指定失效30秒后mymaster为不可用 sentinel parallel-syncs mymaster 1 # 主备时只允许1台slave同步 sentinel failover-timeout mymaster 15000 sentinel auth-pass mymaster 1+1=2?Yes # 主从密码必须一致 bind 192.168.8.111 127.0.0.1 # 映射对外IP |
redis-sentinel sentinel-26379.conf
# 其余2台slave的配置同上,只是bind映射的IP换成各自对外IP即可
3. 测试Sentinel:
当主mymaster故障关闭时,两台slavewf 选举出新的mymaster,自动切换主从,日志记录如下(可放大200%查看具体内容):

4. 为了sentinel更好的运行,需要修改一些系统限制:
(1) 修改open files:
ulimit -n 10032 # 系统默认是1024
ulimit -a # 再查看确认一下修改成功,重启后失效
|
永久修改open files数量,需要修改系统配置文件limits.conf如下: vim /etc/security/limits.conf
|
(2) 修改net.core.somaxconn:
vim /etc/sysctl.conf
|
net.core.somaxconn = 1024 #写入sysctl.conf,使系统默认128改成1024 |
sysctl -p #重载sysctl.conf配置
5. 配置sentinel服务系统运行:
chmod +x /etc/rc.d/rc.local #赋权限
chmod +x /etc/rc.local #赋软链接权限
ll /etc/rc.* #查看确认一下赋rc.local的权限成功
vim /etc/rc.local
|
redis-sentinel /root/redis-5.0.2/sentinel-26379.conf |
reboot #或init 6重启生效
f) Redis的一些常用操作命令:
redis-server redis.conf # 以redis.conf配置启动redis
redis-sentinel sentinel-26379.conf # sentinel-26379.conf配置启动哨兵模式
redis-cli -h 192.168.8.111 -p 6379 -h 1+1=2?Yes # 登陆redis命令界面
set #添加记录
get #获取一条记录
keys * #显示当前redis中所有的记录
info server #查询当前redis信息
info replication #查询主从复制状态和关系
info keyspace #查询keys所有数量
flushdb #清库
浙公网安备 33010602011771号