haproxyベースredis高可用性環境構築

5050 ワード

詳細
一redis主従構築
10.21.6.55にredisをマスターとして配備
10.21.6.56 slaveとしてredisを配備
マスター構成:
参照
daemonize yes
###スレーブライブラリの場合は、メインライブラリのパスワードを設定する必要があります
#masterauth "Ifeng888"
###ログインにはパスワード認証が必要です
requirepass "Ifeng888"
###パスワードの変更を忘れないでください
pidfile/data/redis/6379/redis.pid
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel warning
logfile/data/logs/redis/redis.log
databases 16
save 1200 1
save 900 10000
save 300 100000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir/data/redis/6379
slave-serve-stale-data yes
slave-read-only no
slave構成
参照
daemonize yes
###スレーブライブラリの場合は、メインライブラリのパスワードを設定する必要があります
masterauth "Ifeng888"
###ログインにはパスワード認証が必要です
requirepass "Ifeng888"
###パスワードの変更を忘れないでください
pidfile/data/redis/6379/redis.pid
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel warning
logfile/data/logs/redis/redis.log
databases 16
save 1200 1
save 900 10000
save 300 100000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir/data/redis/6379
##主従の設定
slaveof 10.21.6.55 6379
slave-serve-stale-data yes
slave-read-only no
マスターslaveのredisを起動
マスター上
参照
redis-cli -a Ifeng888
127.0.0.1:6379> get Ifeng777
"14"
127.0.0.1:6379> set Ifeng777 18
OK
slave上
参照
redis-cli -a Ifeng888
127.0.0.1:6379> get Ifeng888
(nil)
127.0.0.1:6379> get Ifeng777
"14"
127.0.0.1:6379> get Ifeng777
"18"
主従環境の構築に成功
二、haproxy配置
1、haproxyをインストールする
参照
yum install haproxy
2、プロファイルの変更
参照
vim/etc/haproxy/haproxy.cfg
プロファイル
参照
listen redis_cluster:6380#実行ポートおよびホスト名
        bind *:6380
        server redis-master_6.55 10.21.6.55:6379 check port 6379 inter 2000 rise 3 fall 3 maxconn 10000 weight 1
        server redis-slaver_6.56 10.21.6.56:6379 check port 6379 inter 2000 rise 3 fall 3 maxconn 10000 weight 1 backup
haproxy構成完了
実装済み:
1、redis主従配置
2、haproxy高可用性実現
slaveに対してbackupを構成するため、masterが正常に動作すると、redisリクエストはすべてmasterに転送され、masterが停止すると、リクエストはslaveに転送されます.
簡単なjavaコードを書いて検証し、redisclientがhaproxyに構成されたIPポートは6380です.
プログラムが半分行われた場合、masterを停止します.
コマンド:redis-cli-a Ifeng 888 shutdown
テストコード

public class Test {

    public static void main(String[] args){
        String key = "Ifengtest1";

        RedisClient.set(key,0);
        while (true){
            Integer rv= RedisClient.get(key,Integer.class);
            System.out.println("test redis "+rv);
            if (rv!=null){
                rv++;
                RedisClient.set(key,rv);
            }

            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }


    }
}


出力結果:
参照
test redis 0
test redis 1
test redis 2
test redis 3
test redis 4
test redis 5
test redis 6
2017-10-31 10:05:30,154  INFO main com.ifeng.auto.we_provider.cache.redis.RedisClient - Redis
redis.clients.jedis.exceptions.JedisConnectionException: It seems like server has closed the connection.
at redis.clients.util.RedisInputStream.readLine(RedisInputStream.java:91)
at redis.clients.jedis.Protocol.processStatusCodeReply(Protocol.java:80)
at redis.clients.jedis.Protocol.process(Protocol.java:69)
at redis.clients.jedis.Protocol.read(Protocol.java:122)
at redis.clients.jedis.Connection.getBinaryBulkReply(Connection.java:172)
at redis.clients.jedis.BinaryJedis.get(BinaryJedis.java:74)
at com.ifeng.auto.we_provider.cache.redis.RedisClient.get(RedisClient.java:571)
at com.ifeng.auto.we_provider.main.Test.main(Test.java:16)
test redis null
test redis 7
test redis 8
test redis 9
test redis 10
test redis 11
test redis 12
test redis 13
三、主にredisからパスワードを交換する
1、マスターパスワードの変更
参照
###ログインにはパスワード認証が必要です
requirepass "Ifeng999"
2、マスターを止める
構成変更前のパスワードを使用してredisを停止
参照
redis-cli -a Ifeng888 shutdown
3、マスターを起動する
参照
service redis start
4、slaveパスワードの変更
masterauthもrequirepassも新しいパスワードに変更する必要があります
参照
###スレーブライブラリの場合は、メインライブラリのパスワードを設定する必要があります
masterauth "Ifeng999"
###ログインにはパスワード認証が必要です
requirepass "Ifeng999"
5、slave停止
構成変更前のパスワードを使用してredisを停止
参照
redis-cli -a Ifeng888 shutdown
6、slaveを起動する
参照
service redis start
7、各業務システムにおけるredisパスワードプロファイルを修正し、プロジェクトを再起動する
これでredisパスワードの変更が完了しました.