在一台linux服务器上如何部署redis哨兵模式
目标:在一台linux服务器上部署一主两从三哨兵。大致操作需要先创建一个redis文件夹,然后在该目录中下载安装redis。在redis目录下新建三个文件夹分别命名为redis1,redis2,redis3。然后将下载后解压后的redis-5.0.5文件夹复制到在redis1,redis2,redis3目录下。然后分别修改这三个文件夹中的redis.conf文件和sentinel.conf文件。最后分别启动redis1,redis2,redis3的redis.conf,然后再启动redis1,redis2,redis3的sentinel.conf。
此文章以ip为127.0.0.1的服务器为例来部署redis哨兵模式。部署工具:finalshell。
第一步:用FInalshell连接到服务器,进入usr/local目录后创建用于存放redis的文件夹。根据自己需要创建存放redis的文件目录,此处默认存放
在/usr目录下。
1.cd /usr/local
2.mkdir redis
第二步:下载并解压redis。
1.下载:进入到/usr/local/redis目录下执行以下命令下载redis。
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
2.解压:进入到/usr/local/redis目录下执行以下命令解压redis压缩包。
tar -zxvf redis-5.0.5.tar.gz
第三步:安装redis。
执行解压命令后,在/usr/redis目录下会出现两个文件夹。
1.进入redis-5.0.5目录执行以下命令安装redis
cd /usr/local/redis/redis-5.0.5
make && make install
2.初始化redis-5.0.5目录结构,创建用于存放数据和日志的目录文件夹。
cd /usr/local/redis/redis-5.0.5/
mkdir data
mkdir log
3.此时在redis-5.0.5目录下,直接进入新创建好的日志文件夹log,创建日志文件
cd log
touch redis.log
touch sentinel.log
第四步:在redis目录下新建三份文件夹,分别命名为redis1,redis2,redis3。然后将redis-5.0.5文件夹分别复制到redis1,redis2,redis3中
1.进入redis目录,新建redis1,redis2,redis3文件夹
cd /usr/local/redis
mkdir redis1
mkdir redis2
mkdir redis3
2.将redis-5.0.5复制到新建的redis1,redis2,redis3中
cp -r redis-5.0.5 /usr/redis/redis1
cp -r redis-5.0.5 /usr/redis/redis2
cp -r redis-5.0.5 /usr/redis/redis3
执行复制操作后,可以通过查看文件命令查看当前redis目录的所有文件包括redis1,redis2,redis3,redis-5.0.5,redis-5.0.5.tar.gz。
第五步:分别进入redis1,redis2,redis3文件夹,修改redis.conf和sentinel.conf文件。
如果在服务器中不好操作修改文件,可以选择在本地新建文档文件,将下面的配置直接CV大法。修改好以后再上传到服务器对应的文件目录下。
redis1作为主节点,redis2和redis3作为从节点。三个节点的配置主要port、bind、pidfile、logfile、dir属性不一致,其他的基本一致,对比以下配置来基本上没有问题。至于每个配置属性的意义就请大家自行百度咯。。。另外建议可以将下面的配置文件直接替换redis-5.0.5目录下的原始的redis.conf和sentinel.conf文件,不需要在原始配置文件上进行修改,如果大家闲来没事也可以去原始文件上修改,锻炼锻炼眼力见也是可以的。。。
1.redis1的redis.conf配置如下:
daemonize yes
pidfile “/usr/local/redis/redis1/redis-5.0.5/redis_7000.pid”
port 7000
bind 127.0.0.1
timeout 0
tcp-keepalive 60
loglevel notice
logfile “/usr/local/redis/redis1/redis-5.0.5/log/redis7000.log”
dbfilename “dump7000.rdb”
dir “/usr/local/redis/redis1/redis-5.0.5/data”
databases 16
requirepass “123456”
masterauth “123456”
slave-serve-stale-data no
slave-read-only yes
repl-diskless-sync yes
repl-diskless-sync-delay 0
repl-ping-slave-period 3
repl-timeout 10
repl-disable-tcp-nodelay no
2.redis1的sentinel.conf配置如下:
daemonize yes
port 27100
bind 127.0.0.1
sentinel deny-scripts-reconfig yes
sentinel monitor redismaster 127.0.0.1 7000 2
logfile “/usr/local/redis/redis1/redis-5.0.5/log/sentinel.log”
dir “/usr/local/redis/redis1/redis-5.0.5”
protected-mode no
sentinel down-after-milliseconds redismaster 5000
sentinel parallel-syncs redismaster 2
sentinel config-epoch redismaster 0
sentinel leader-epoch redismaster 0
sentinel current-epoch 0
3.redis2的redis.conf配置如下:
daemonize yes
pidfile “/usr/local/redis/redis2/redis-5.0.5/redis_7000.pid”
port 7001
bind 127.0.0.1
timeout 0
tcp-keepalive 60
loglevel notice
logfile “/usr/local/redis/redis2/redis-5.0.5/log/redis7000.log”
dbfilename “dump7000.rdb”
dir “/usr/local/redis/redis2/redis-5.0.5/data”
databases 16
requirepass “123456”
masterauth “123456”
slave-serve-stale-data no
slave-read-only yes
repl-diskless-sync yes
repl-diskless-sync-delay 0
repl-ping-slave-period 3
repl-timeout 10
repl-disable-tcp-nodelay no
slaveof 127.0.0.1 7000
4.redis2的sentinel.conf配置如下:
daemonize yes
port 27101
bind 127.0.0.1
sentinel deny-scripts-reconfig yes
sentinel monitor redismaster 127.0.0.1 7000 2
logfile “/usr/local/redis/redis2/redis-5.0.5/log/sentinel.log”
dir “/usr/local/redis/redis2/redis-5.0.5”
protected-mode no
sentinel down-after-milliseconds redismaster 5000
sentinel parallel-syncs redismaster 2
sentinel config-epoch redismaster 0
sentinel leader-epoch redismaster 0
sentinel current-epoch 0
5.redis3的redis.conf配置如下:
daemonize yes
pidfile “/usr/lcoal/redis/redis3/redis-5.0.5/redis_7000.pid”
port 7002
bind 127.0.0.1
timeout 0
tcp-keepalive 60
loglevel notice
logfile “/usr/lcoal/redis/redis3/redis-5.0.5/log/redis7000.log”
dbfilename “dump7000.rdb”
dir “/usr/redis/redis3/redis-5.0.5/data”
databases 16
requirepass “123456”
masterauth “123456”
slave-serve-stale-data no
slave-read-only yes
repl-diskless-sync yes
repl-diskless-sync-delay 0
repl-ping-slave-period 3
repl-timeout 10
repl-disable-tcp-nodelay no
replicaof 127.0.0.1 7000
6.redis3的sentinel.conf配置如下:
daemonize yes
port 27102
bind 127.0.0.1
sentinel deny-scripts-reconfig yes
sentinel monitor redismaster 127.0.0.1 7000 2
logfile “/usr/local/redis/redis3/redis-5.0.5/log/sentinel.log”
dir “/usr/local/redis/redis3/redis-5.0.5”
protected-mode no
sentinel down-after-milliseconds redismaster 5000
sentinel parallel-syncs redismaster 2
sentinel config-epoch redismaster 0
sentinel leader-epoch redismaster 0
sentinel current-epoch 0
第六步:启动redis1,redis2,redis3。启动顺序主-从-哨兵。启动命令如下:
启动主从
1.cd /usr/local/redis/redis1/redis-5.0.5 进入到redis1的redis-5.0.5目录下
./src/redis-server ./redis.conf
2.cd /usr/lcoal/redis/redis2/redis-5.0.5 进入到redis2的redis-5.0.5目录下
./src/redis-server ./redis.conf
3.cd /usr/lcoal/redis/redis3/redis-5.0.5 进入到redis3的redis-5.0.5目录下
./src/redis-server ./redis.conf
启动哨兵
4.cd /usr/lcoal/redis/redis1/redis-5.0.5 进入到redis1的redis-5.0.5目录下
./src/redis-sentinel ./sentinel.conf
5.cd /usr/local/redis/redis2/redis-5.0.5 进入到redis2的redis-5.0.5目录下
./src/redis-sentinel ./sentinel.conf
6.cd /usr/local/redis/redis3/redis-5.0.5 进入到redis3的redis-5.0.5目录下
./src/redis-sentinel ./sentinel.conf
第七步:启动之后,任何目录下输入:ps -ef|grep redis 查看redis进程。可以看到如下效果表示redis启动成功。下图显示ip应该为大家的服务器ip。
第八步:验证效果。
1.验证主从数据是否同步。输入以下命令:
cd /usr/local/redis/redis1/redis-5.0.5
redis-cli -h 127.0.0.1 -c -p 7000
127.0.0.1:7000>KEYS *
(empty list or set)
127.0.0.1:7000> set k1 123 //主上写入数据
OK
127.0.0.1:7000> set k2 456
OK
cd /usr/local/redis/redis2/redis-5.0.5
redis-cli -h 127.0.0.1 -c -p 7001
127.0.0.1:7001>KEYS * //从上查看是否数据同步
“k2”
“k1”
127.0.0.1:7001> get k1
“123”
127.0.0.1:7001> get k2
“456”
cd /usr/local/redis/redis2/redis-5.0.5
redis-cli -h 127.0.0.1 -c -p 7002
127.0.0.1:7002> KEYS * //从上查看是否数据同步
“k2”
“k1”
127.0.0.1:7002> get k1
“123”
127.0.0.1:7002> get k2
“456”
如果大家验证之后效果如上,说明主从数据已经同步成功。
2.验证哨兵
停止redis1上的Redis,kill -9 杀掉端口号为7000的redis进程,查看Redis的主从变化。如果主从发生变化,而且redis.conf文件的replicaof 属性会发生变化,会从之前的127.0.0.1 7000变化为127.0.0.1 7001。哨兵验证大家可以自行详细测试,这里就不再赘述了。
到此在一台liunx服务上部署redis一主二从三哨兵模式就完成了。第一次部署,如有不妥,请大家多多指点。
查看节点信息名-命令
./src/redis-cli -h 127.0.0.1 -p 7000 -a 123456 info replication
再来实现三台服务器上部署redis一主二从三哨兵就很容易理解了。主要操作核心就是将redis1,redis2,redis3的配置分别CV大法到你要部署的三台服务器中就OK了。
以主服务器ip:127.0.0.1。从服务器ip127.0.0.2。从服务器2ip:127.0.0.3为例 ,redis.conf和sentinel.conf两个配置文件中部分属性都要做对应的修改。修改如下:
1:三台服务器的port(端口号)都用同一个。
2:绑定的ip(bind)分别为你使用的对应服务器ip。
3:slaveof 属性为你自己定义的主服务器ip 端口号。
4:sentinel monitor redismaster 属性为你自己定义的主服务器ip 端口号 2