Redis主從複製和主從切換

來源:互聯網
上載者:User

標籤:


  1. 配置主從複製

    1. 建立從檔案夾,譬如 /usr/local/slaves/下建立 6380 6381 兩個檔案夾(兩個從伺服器)

    2. 複製redis.conf到剛建立的兩個檔案夾中

    3. 修改redis.conf 中的

      1. port 6380

      2. slaveof 127.0.0.1 6379  ------ip表示主伺服器的ip  連接埠表示主伺服器連接埠

      3. 儲存退出,另一個從伺服器做同樣修改,如果連接埠不是6380,修改斷開即可,此處修改為6381

    4. 啟動主伺服器 redis-server redis.conf

    5. 進入從伺服器檔案夾,啟動從伺服器

    6. 查看主伺服器資訊:redis-cli -p 6379 info Replication,可以看到有兩個從伺服器

    7. redis-cli -p 6379 進去主伺服器,儲存資料 set key val

    8. 進入從伺服器,redis-cli -p 6380 查看資料 get key  查看是否能取出資料

  2. 配置主從切換

    1. 建立三個檔案 6379-sentinel.conf 6380-sentinel.conf 6381-sentinel.conf

    2. 編輯檔案

    3. ####master  sentinel.conf##sentinel執行個體之間的通訊連接埠port 26379####sentinel需要監控的master資訊:<mastername> <masterIP> <masterPort> <quorum>.####<quorum>應該小於叢集中slave的個數,只有當至少<quorum>個sentinel執行個體提交"master失效" 才會認為master為ODWON("客觀"失效) .sentinel monitor mymaster 127.0.0.1 6381 2####授權密碼,在安全的環境中可以不設定##sentinel auth-pass mymaster luyx30####master被當前sentinel執行個體認定為“失效”(SDOWN)的間隔時間sentinel failover-timeout mymaster 900000####當新master產生時,同時進行“slaveof”到新master並進行同步複製的slave個數。##在salve執行salveof與同步時,將會終止用戶端請求。##此值較大,意味著“叢集”終止用戶端請求的時間總和和較大。##此值較小,意味著“叢集”在容錯移轉期間,多個salve向用戶端提供服務時仍然使用舊資料。sentinel config-epoch mymaster 4####failover到期時間,當failover開始後,在此時間內仍然沒有觸發任何failover操作,當前sentinel將會認為此次failoer失敗。sentinel leader-epoch mymaster 4
    4. 其他兩個檔案只需要修改連接埠即可

    5. 分別開機檔案:redis-sentinel 6379-sentinel

  3. 通過java讀寫主從伺服器

    1. 需要添加Spring配置和其他兩個jar包

    2. <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <springVersion>3.2.9.RELEASE</springVersion></properties><dependencies>    <dependency>        <groupId>org.apache.commons</groupId>        <artifactId>commons-pool2</artifactId>        <version>2.4.2</version>    </dependency>    <dependency>        <groupId>org.springframework.data</groupId>        <artifactId>spring-data-redis</artifactId>        <version>1.6.0.RELEASE</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context</artifactId>        <version>${springVersion}</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-tx</artifactId>        <version>${springVersion}</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context-support</artifactId>        <version>${springVersion}</version>    </dependency>    <dependency>        <groupId>cglib</groupId>        <artifactId>cglib-nodep</artifactId>        <version>3.1</version>    </dependency>    <dependency>        <groupId>org.apache.commons</groupId>        <artifactId>commons-lang3</artifactId>        <version>3.1</version>    </dependency>    <dependency>        <groupId>com.alibaba</groupId>        <artifactId>fastjson</artifactId>        <version>1.2.5</version>    </dependency>    <dependency>        <groupId>org.aspectj</groupId>        <artifactId>aspectjweaver</artifactId>        <version>1.8.2</version>    </dependency>    <dependency>        <groupId>junit</groupId>        <artifactId>junit</artifactId>        <version>4.8</version>        <scope>test</scope>    </dependency>    <dependency>        <groupId>net.sf.ehcache</groupId>        <artifactId>ehcache</artifactId>        <version>2.7.5</version>    </dependency>    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-api</artifactId>        <version>1.6.6</version>    </dependency>    <dependency>        <groupId>redis.clients</groupId>        <artifactId>jedis</artifactId>        <version>2.4.2</version>    </dependency>    <dependency>        <groupId>commons-pool</groupId>        <artifactId>commons-pool</artifactId>        <version>1.6</version>    </dependency>    <dependency>        <groupId>commons-logging</groupId>        <artifactId>commons-logging</artifactId>        <version>1.1.1</version>    </dependency>    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-log4j12</artifactId>        <version>1.7.10</version>        <scope>test</scope>    </dependency></dependencies>
    3. Spring配置

      1. <bean id="redisSentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">    <property name="master">        <bean class="org.springframework.data.redis.connection.RedisNode">            <property name="name" value="mymaster"/>        </bean>    </property>    <property name="sentinels">        <set>            <bean class="org.springframework.data.redis.connection.RedisNode">                <constructor-arg name="host" value="127.0.0.1"></constructor-arg>                <constructor-arg name="port" value="26479"></constructor-arg>            </bean>            <bean class="org.springframework.data.redis.connection.RedisNode">                <constructor-arg name="host" value="127.0.0.1"></constructor-arg>                <constructor-arg name="port" value="26579"></constructor-arg>            </bean>        </set>    </property></bean><bean id="jeidsConnectionFactory"      class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">    <constructor-arg ref="redisSentinelConfiguration"/></bean><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">    <property name="connectionFactory" ref="jeidsConnectionFactory"/></bean>
    4. java測試

      1. import org.junit.Before;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.dao.DataAccessException;import org.springframework.data.redis.connection.RedisConnection;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.core.RedisTemplate;/** * Created by vincent on 15-10-13. */public class CommonTest {    private ApplicationContext context ;    private RedisTemplate redisTemplate;    final String key ="key7";    @Before    public void init(){        context = new ClassPathXmlApplicationContext("applicationContext.xml");        redisTemplate= context.getBean("redisTemplate",RedisTemplate.class);    }    @Test    public void test1(){        redisTemplate.execute(new RedisCallback() {            @Override            public Long doInRedis(RedisConnection redisConnection) throws DataAccessException {                 redisConnection.set(key.getBytes(),(System.currentTimeMillis()+"").getBytes());                return 1L;            }        });    }    @Test    public void  test2(){        Object execute = redisTemplate.execute(new RedisCallback() {            @Override            public Object doInRedis(RedisConnection redisConnection) throws DataAccessException {                return redisConnection.get(key.getBytes());            }        });        System.out.println(new String((byte[])execute));    }}



Redis主從複製和主從切換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.