redis主从配置及其java的调用
环境:虚拟机是 CentOS ,版本CentOS6.5 IP:192.168.1.9 redis-3.2.4版本
1.下载redis安装包
命令:
cd /
mkdir app
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
2.解压
命令:
tar -zxvf redis-3.2.4.tar.gz
[root@jikang app]# ls
redis-3.2.4 redis-3.2.4.tar.gz
编译并且安装
[root@jikang redis-3.2.4]# cd src/
[root@jikang src]# make && make install
主从的主要配置文件夹
[root@jikang redis-3.2.4]# mkdir masterVslave/
创建三个文件夹,将配置分别放进去
[root@jikang redis-3.2.4]# cd masterVslave/
[root@jikang masterVslave]# tree
.
├── 6379
│ └── redis.conf
├── 6380
│ └── redis.conf
└── 6381
└── redis.conf
3 directories, 3 files
redis.conf配置相应的设置
port 6379 //端口6379,6380,6381
bind 192.168.1.9 //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,否则无法主从
daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应6379,6380,6381
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记
logfile "文件名" //和dir 有关系
dir ./ //路径
slaveof 192.168.1.9 6379 //在6380,6381里面配置,作为从
。。。。。。其他配置一句需求做响应的设置
requirepass 123456 本机redis密码 如果哨兵中配置,那么主从都配置
masterauth "123456" 主机redis密码 如果哨兵中配置,那么主从都配置
配置sentinel.conf
只需要配置这一个:
vim sentinel.conf
输入内容:
sentinel monitor mymaster 192.168.1.9 6379 1
bind 192.168.1.9 //一定要绑定当前ip,否则外界不能调用
daemonize yes
dir "/app/redis-3.2.4/src" //自己设置
logfile "./sentinel.log"
sentinel auth-pass mymaster 123456 //密码
说明:
mymaster:监控主数据的名称,自定义即可,可以使用大小写字母和“.-_”符号
192.168.1.9:监控的主数据库的IP
6379:监控的主数据库的端口
1:最低通过票数
启动redis
[root@jikang src]# ./redis-server ../masterVslave/6379/redis.conf
[root@jikang src]# ./redis-server ../masterVslave/6380/redis.conf
[root@jikang src]# ./redis-server ../masterVslave/6381/redis.conf
启动哨兵
[root@jikang src]# ./redis-sentinel ../sentinel.conf
查看进程
[root@jikang src]# ps -ef | grep redis
root 6625 1 0 13:02 ? 00:00:02 ./redis-server 192.168.1.9:6379
root 6629 1 0 13:02 ? 00:00:02 ./redis-server 192.168.1.9:6380
root 6633 1 0 13:02 ? 00:00:02 ./redis-server 192.168.1.9:6381
root 6679 1 0 13:03 ? 00:00:04 ./redis-sentinel 192.168.1.9:26379 [sentinel]
root 6802 1613 0 13:31 pts/0 00:00:00 grep redis
查看哨兵日志
[root@jikang src]# cat sentinel.log
6679:X 27 Dec 13:03:59.828 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.4 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 6679
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
6679:X 27 Dec 13:03:59.830 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
6679:X 27 Dec 13:03:59.855 # Sentinel ID is 959ab7ad8eda390abfcf88f57ad718efe59f6dfc 哨兵已经启动,它的id为9059917216012421e8e89a4aa02f15b75346d2b7
6679:X 27 Dec 13:03:59.856 # +monitor master mymaster 192.168.1.9 6379 quorum 1 为master数据库添加了一个监控
6679:X 27 Dec 13:03:59.856 * +slave slave 192.168.1.9:6380 192.168.1.9 6380 @ mymaster 192.168.1.9 6379
6679:X 27 Dec 13:03:59.858 * +slave slave 192.168.1.9:6381 192.168.1.9 6381 @ mymaster 192.168.1.9 6379 发现了2个slave(由此可以看出,哨兵无需配置slave,只需要指定master,哨兵会自动发现slave)
java调用代码
public static void main(String[] args) {
Set<String> sentinels = new HashSet<String>();
String hostAndPort1 = "192.168.1.9:26379";
sentinels.add(hostAndPort1);
String clusterName = "mymaster";
String password = "123456";
JedisSentinelPool pool = new JedisSentinelPool(clusterName, sentinels,password);
Jedis jedis = pool.getResource();
jedis.set("username", clusterName);
jedis.set("password", password);
String username = jedis.get("username");
String pass = jedis.get("password");
System.out.println(username +"=========="+pass);
}
结果:
十二月 27, 2017 1:38:46 下午 redis.clients.jedis.JedisSentinelPool initSentinels
信息: Trying to find master from available Sentinels...
十二月 27, 2017 1:38:46 下午 redis.clients.jedis.JedisSentinelPool initSentinels
信息: Redis master running at 192.168.1.9:6379, starting Sentinel listeners...
十二月 27, 2017 1:38:46 下午 redis.clients.jedis.JedisSentinelPool initPool
信息: Created JedisPool to master at 192.168.1.9:6379
mymaster==========123456
注:在这里,是可以使用spring配置,省的总是new对象,浪费资源
模拟其中主机宕机
[root@jikang redis-3.2.4]# ps -ef |grep redis
root 6625 1 0 13:02 ? 00:00:03 ./redis-server 192.168.1.9:6379
root 6629 1 0 13:02 ? 00:00:03 ./redis-server 192.168.1.9:6380
root 6633 1 0 13:02 ? 00:00:03 ./redis-server 192.168.1.9:6381
root 6679 1 0 13:03 ? 00:00:06 ./redis-sentinel 192.168.1.9:26379 [sentinel]
root 6884 3119 0 13:43 pts/2 00:00:00 grep redis
[root@jikang redis-3.2.4]# kill -9 6625
查看哨兵日志
[root@jikang src]# tail -fn 1000 sentinel.log
6679:X 27 Dec 13:03:59.828 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.4 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 6679
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
6679:X 27 Dec 13:03:59.830 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
6679:X 27 Dec 13:03:59.855 # Sentinel ID is 959ab7ad8eda390abfcf88f57ad718efe59f6dfc
6679:X 27 Dec 13:03:59.856 # +monitor master mymaster 192.168.1.9 6379 quorum 1
6679:X 27 Dec 13:03:59.856 * +slave slave 192.168.1.9:6380 192.168.1.9 6380 @ mymaster 192.168.1.9 6379
6679:X 27 Dec 13:03:59.858 * +slave slave 192.168.1.9:6381 192.168.1.9 6381 @ mymaster 192.168.1.9 6379
6679:X 27 Dec 13:44:19.665 # +sdown master mymaster 192.168.1.9 6379 说明master服务已经宕机
6679:X 27 Dec 13:44:19.665 # +odown master mymaster 192.168.1.9 6379 #quorum 1/1
6679:X 27 Dec 13:44:19.665 # +new-epoch 1
6679:X 27 Dec 13:44:19.665 # +try-failover master mymaster 192.168.1.9 6379 开始恢复故障
6679:X 27 Dec 13:44:19.690 # +vote-for-leader 959ab7ad8eda390abfcf88f57ad718efe59f6dfc 1 投票选举哨兵leader,现在就一个哨兵所以leader就自己
6679:X 27 Dec 13:44:19.690 # +elected-leader master mymaster 192.168.1.9 6379 选中leader
6679:X 27 Dec 13:44:19.690 # +failover-state-select-slave master mymaster 192.168.1.9 6379
6679:X 27 Dec 13:44:19.767 # +selected-slave slave 192.168.1.9:6380 192.168.1.9 6380 @ mymaster 192.168.1.9 6379 选中其中的一个slave当做master
6679:X 27 Dec 13:44:19.767 * +failover-state-send-slaveof-noone slave 192.168.1.9:6380 192.168.1.9 6380 @ mymaster 192.168.1.9 6379 发送slaveof no one命令
6679:X 27 Dec 13:44:19.823 * +failover-state-wait-promotion slave 192.168.1.9:6380 192.168.1.9 6380 @ mymaster 192.168.1.9 6379 等待升级master
6679:X 27 Dec 13:44:20.139 # +promoted-slave slave 192.168.1.9:6380 192.168.1.9 6380 @ mymaster 192.168.1.9 6379 升级6380为master
6679:X 27 Dec 13:44:20.139 # +failover-state-reconf-slaves master mymaster 192.168.1.9 6379
6679:X 27 Dec 13:44:20.190 * +slave-reconf-sent slave 192.168.1.9:6381 192.168.1.9 6381 @ mymaster 192.168.1.9 6379
6679:X 27 Dec 13:44:21.184 * +slave-reconf-inprog slave 192.168.1.9:6381 192.168.1.9 6381 @ mymaster 192.168.1.9 6379
6679:X 27 Dec 13:44:21.185 * +slave-reconf-done slave 192.168.1.9:6381 192.168.1.9 6381 @ mymaster 192.168.1.9 6379
6679:X 27 Dec 13:44:21.239 # +failover-end master mymaster 192.168.1.9 6379 故障恢复完成
6679:X 27 Dec 13:44:21.239 # +switch-master mymaster 192.168.1.9 6379 192.168.1.9 6380主数据库从6379转变为6380
6679:X 27 Dec 13:44:21.239 * +slave slave 192.168.1.9:6381 192.168.1.9 6381 @ mymaster 192.168.1.9 6380 添加6381为6380的从库
6679:X 27 Dec 13:44:21.239 * +slave slave 192.168.1.9:6379 192.168.1.9 6379 @ mymaster 192.168.1.9 6380添加6379为6380的从库
6679:X 27 Dec 13:44:51.261 # +sdown slave 192.168.1.9:6379 192.168.1.9 6379 @ mymaster 192.168.1.9 6380 发现6379已经宕机,等待6379的恢复 注意+sdown 是+
重启主redis
[root@jikang src]# ./redis-server ../masterVslave/6379/redis.conf
查看哨兵日志
6679:X 27 Dec 13:53:57.860 # -sdown slave 192.168.1.9:6379 192.168.1.9 6379 @ mymaster 192.168.1.9 6380 6379已经恢复服务注意:-sdown 是 —
6679:X 27 Dec 13:54:07.813 * +convert-to-slave slave 192.168.1.9:6379 192.168.1.9 6379 @ mymaster 192.168.1.9 6380 将6379设置为6380的slave
还可以模拟从redis宕机,以及多个哨兵模式:
vim sentinel.conf
输入内容:
sentinel monitor mymaster 127.0.0.1 6381 2
sentinel monitor mymaster2 127.0.0.1 6381 1
这里不再演示
名词解释
一:什么是哨兵
顾名思义,哨兵的作用就是对Redis的系统的运行情况的监控,它是一个独立进程。它的功能有2个:
1、监控主数据库和从数据库是否运行正常;
2、主数据出现故障后自动将从数据库转化为主数据库;
原理
单个哨兵架构:
多个哨兵结构:
配置多个哨兵,不仅同事监控主从数据库,哨兵之间也是互相监控
redis配置详解,参照:joshua317的博客
错误之处,欢迎指正。
未完。。。待续