博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis - 主从复制与主从切换
阅读量:4589 次
发布时间:2019-06-09

本文共 9850 字,大约阅读时间需要 32 分钟。

redis2.8之前本身是不支持分布式管理的,一般建议使用redis3.0及以后版本

redis主从切换的方法 keepalive  或者 使用sentinel线程管理

说明如何使用sentinel实现主从管理(在已经配置好主从并启动的前提下)

1、sentinel.conf 配置文件

1 # Example sentinel.conf  2   3 # port 
4 # The port that this sentinel instance will run on 5 port 26379 6 protected-mode no 7 8 # sentinel announce-ip
9 # sentinel announce-port
10 # 11 # The above two configuration directives are useful in environments where, 12 # because of NAT, Sentinel is reachable from outside via a non-local address. 13 # 14 # When announce-ip is provided, the Sentinel will claim the specified IP address 15 # in HELLO messages used to gossip its presence, instead of auto-detecting the 16 # local address as it usually does. 17 # 18 # Similarly when announce-port is provided and is valid and non-zero, Sentinel 19 # will announce the specified TCP port. 20 # 21 # The two options don't need to be used together, if only announce-ip is 22 # provided, the Sentinel will announce the specified IP and the server port 23 # as specified by the "port" option. If only announce-port is provided, the 24 # Sentinel will announce the auto-detected local IP and the specified port. 25 # 26 # Example: 27 # 28 # sentinel announce-ip 1.2.3.4 29 30 # dir
31 # Every long running process should have a well-defined working directory. 32 # For Redis Sentinel to chdir to /tmp at startup is the simplest thing 33 # for the process to don't interfere with administrative tasks such as 34 # unmounting filesystems. 35 dir "/tmp" 36 37 # sentinel monitor
38 # 39 # Tells Sentinel to monitor this master, and to consider it in O_DOWN 40 # (Objectively Down) state only if at least
sentinels agree. 41 # 42 # Note that whatever is the ODOWN quorum, a Sentinel will require to 43 # be elected by the majority of the known Sentinels in order to 44 # start a failover, so no failover can be performed in minority. 45 # 46 # Slaves are auto-discovered, so you don't need to specify slaves in 47 # any way. Sentinel itself will rewrite this configuration file adding 48 # the slaves using additional configuration options. 49 # Also note that the configuration file is rewritten when a 50 # slave is promoted to master. 51 # 52 # Note: master name should not include special characters or spaces. 53 # The valid charset is A-z 0-9 and the three characters ".-_". 54 sentinel myid 920ad7dac87a4c853bbdf6417578e53ce261bdec 55 56 # sentinel auth-pass
57 # 58 # Set the password to use to authenticate with the master and slaves. 59 # Useful if there is a password set in the Redis instances to monitor. 60 # 61 # Note that the master password is also used for slaves, so it is not 62 # possible to set a different password in masters and slaves instances 63 # if you want to be able to monitor these instances with Sentinel. 64 # 65 # However you can have Redis instances without the authentication enabled 66 # mixed with Redis instances requiring the authentication (as long as the 67 # password set is the same for all the instances requiring the password) as 68 # the AUTH command will have no effect in Redis instances with authentication 69 # switched off. 70 # 71 # Example: 72 # 73 sentinel monitor mymaster 192.168.91.233 6379 1 74 75 # sentinel down-after-milliseconds
76 # 77 # Number of milliseconds the master (or any attached slave or sentinel) should 78 # be unreachable (as in, not acceptable reply to PING, continuously, for the 79 # specified period) in order to consider it in S_DOWN state (Subjectively 80 # Down). 81 # 82 # Default is 30 seconds. 83 sentinel failover-timeout mymaster 30000 84 85 sentinel auth-pass mymaster 123456 86 # 87 # How many slaves we can reconfigure to point to the new slave simultaneously 88 # during the failover. Use a low number if you use the slaves to serve query 89 # to avoid that all the slaves will be unreachable at about the same 90 # time while performing the synchronization with the master. 91 #sentinel config-epoch mymaster 0 92 93 #sentinel leader-epoch mymaster 21 94 # 95 # Specifies the failover timeout in milliseconds. It is used in many ways: 96 # 97 # - The time needed to re-start a failover after a previous failover was 98 # already tried against the same master by a given Sentinel, is two 99 # times the failover timeout.100 #101 # - The time needed for a slave replicating to a wrong master according102 # to a Sentinel current configuration, to be forced to replicate103 # with the right master, is exactly the failover timeout (counting since104 # the moment a Sentinel detected the misconfiguration).105 #106 # - The time needed to cancel a failover that is already in progress but107 # did not produced any configuration change (SLAVEOF NO ONE yet not108 # acknowledged by the promoted slave).109 #110 # - The maximum time a failover in progress waits for all the slaves to be111 # reconfigured as slaves of the new master. However even after this time112 # the slaves will be reconfigured by the Sentinels anyway, but not with113 # the exact parallel-syncs progression as specified.114 #115 # Default is 3 minutes.116 sentinel config-epoch mymaster 1117 #sentinel known-slave mymaster 192.168.91.233 6379118 119 # SCRIPTS EXECUTION120 #121 # sentinel notification-script and sentinel reconfig-script are used in order122 # to configure scripts that are called to notify the system administrator123 # or to reconfigure clients after a failover. The scripts are executed124 # with the following rules for error handling:125 #126 # If script exits with "1" the execution is retried later (up to a maximum127 # number of times currently set to 10).128 #129 # If script exits with "2" (or an higher value) the script execution is130 # not retried.131 #132 # If script terminates because it receives a signal the behavior is the same133 # as exit code 1.134 #135 # A script has a maximum running time of 60 seconds. After this limit is136 # reached the script is terminated with a SIGKILL and the execution retried.137 138 # NOTIFICATION SCRIPT139 #140 # sentinel notification-script
141 #142 # Call the specified notification script for any sentinel event that is143 # generated in the WARNING level (for instance -sdown, -odown, and so forth).144 # This script should notify the system administrator via email, SMS, or any145 # other messaging system, that there is something wrong with the monitored146 # Redis systems.147 #148 # The script is called with just two arguments: the first is the event type149 # and the second the event description.150 #151 # The script must exist and be executable in order for sentinel to start if152 # this option is provided.153 #154 # Example:155 #156 # sentinel notification-script mymaster /var/redis/notify.sh157 158 # CLIENTS RECONFIGURATION SCRIPT159 #160 # sentinel client-reconfig-script
161 #162 # When the master changed because of a failover a script can be called in163 # order to perform application-specific tasks to notify the clients that the164 # configuration has changed and the master is at a different address.165 #166 # The following arguments are passed to the script:167 #168 #
169 #170 #
is currently always "failover"171 #
is either "leader" or "observer"172 #173 # The arguments from-ip, from-port, to-ip, to-port are used to communicate174 # the old address of the master and the new address of the elected slave175 # (now a master).176 #177 # This script should be resistant to multiple invocations.178 #179 # Example:180 #181 # sentinel client-reconfig-script mymaster /var/redis/reconfig.sh182 183 # Generated by CONFIG REWRITE184 #sentinel current-epoch 21185 186 sentinel leader-epoch mymaster 1187 sentinel known-slave mymaster 192.168.91.234 6379188 sentinel current-epoch 1
seninel.conf

此配置文件为实际运行的,最后的一些配置是sentinel自动写进去的,而不是配置的。

值得注意的是,需要配置protected mode为no

sentinel monitor mymaster 这个参数不要用默认的127.0.0.1  使用真实的IP地址

部分参数,在样例中是有的,但在这个配置文件中注释掉的

2、接下来启动sentinel

  ./src/redis-sentinel sentinel.conf &

3、登录sentinel

  ./src/redis-cli -h 192.168.91.234 -p 26379

  查看主从信息:info

  关键是最后一句:master0:name=mymaster,status=ok,address=192.168.91.234:6379,slaves=1,sentinels=1

  status 是ok就是可用的;

  sdown 是主观不可用,这种情况下;当足够多的sentinel检测到master为sdown后,就会将master 置为odown

  odown 是客观不可用。

4、客户端开发,使用jedis的JedisSentinelPool连接池

  需要引入:commons-pool2-2.4.2.jar  和   jedis-2.8.1.jar包

  代码如下:

import java.util.HashSet;import java.util.Set;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import org.junit.Test;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisSentinelPool;public class JedisSentinel {    @Test    public final void test() {        String masterName="mymaster";        //sentinel地址集合        Set
set=new HashSet
(); set.add("192.168.91.234:26379"); GenericObjectPoolConfig gPoolConfig=new GenericObjectPoolConfig(); gPoolConfig.setMaxIdle(10); gPoolConfig.setMaxTotal(10); gPoolConfig.setMaxWaitMillis(10); gPoolConfig.setJmxEnabled(true); JedisSentinelPool jSentinelPool=new JedisSentinelPool(masterName,set,gPoolConfig); //------------------------------------------ Jedis jedis=null; jedis=jSentinelPool.getResource(); jedis.auth("123456"); //jedis.set("key1", "value2"); String key1 = jedis.get("key1"); System.out.println(key1); jedis.close(); }}

 

  此时,当一个主redis挂掉之后,sentinel线程会改变从redis的配置文件,并使其成为主redis。当主redis启动后,会变为从redis.

  sentinel可以配置多个,配置文件没有区别,客户端连接略有区别!

  这样就实现了redis的主从复制、主从切换!

  最简配置如下:

  

port 26379protected-mode nodir /tmpsentinel monitor mymaster 192.168.37.101 6379 1sentinel down-after-milliseconds mymaster 3000sentinel parallel-syncs mymaster 1sentinel failover-timeout mymaster 180000

 

转载于:https://www.cnblogs.com/tengpan-cn/p/5993731.html

你可能感兴趣的文章
bzoj 1226: [SDOI2009]学校食堂Dining
查看>>
spm3构建多入口项目
查看>>
Java:基本语法
查看>>
HTTP头的Expires与Cache-control
查看>>
ASIHTTPRequest 详解 例子
查看>>
多线程并发库
查看>>
Props 和 IActorRef 3
查看>>
转载 页面加载完后执行js代码
查看>>
远程SSH连接服务与基本排错
查看>>
浏览器渲染页面原理
查看>>
VC dumpbin dll 导出 lib
查看>>
【Lua】Lua的几点优化原则
查看>>
兼容IE8以下,获取className节点的元素(document.getElementsByClassName()兼容写法)。
查看>>
安装apache
查看>>
git链接远程库
查看>>
[转]asp.net 防止外部提交数据
查看>>
android用户界面之Gallery3D学习资料汇总
查看>>
[编写高质量代码:改善java程序的151个建议]建议62 警惕数组的浅拷贝
查看>>
h5移动端适配iOS遇到的问题
查看>>
20. 最长公共子串(ToDo)[LCS]
查看>>