Redis集群環(huán)境部署

1簡(jiǎn)介

在 Redis 3.0 之前,使用 哨兵(sentinel)機(jī)制來(lái)監(jiān)控各個(gè)節(jié)點(diǎn)之間的狀態(tài)腻贰。Redis Cluster 是 Redis 的 分布式解決方案迅腔,在 3.0 版本正式推出牍帚,有效地解決了 Redis 在 分布式 方面的需求银伟。當(dāng)遇到單機(jī)內(nèi)存伍伤、并發(fā)并徘、流量等瓶頸時(shí),可以采用 Cluster 架構(gòu)方案達(dá)到負(fù)載均衡的目的

2 Redis Cluster集群介紹

Redis Cluster 集群模式通常具有高可用扰魂、可擴(kuò)展性麦乞、分布式容錯(cuò)等特性劝评。Redis Cluster采用的是虛擬槽分區(qū)姐直。先來(lái)解釋一下什么是虛擬槽分區(qū)

2.1 虛擬槽分區(qū)介紹

虛擬槽分區(qū)巧妙地使用了哈希空間蒋畜,使用分散度良好哈希函數(shù)把所有數(shù)據(jù)映射到一個(gè)固定范圍整數(shù)集合中声畏,整數(shù)定義為(slot)。這個(gè)范圍一般遠(yuǎn)遠(yuǎn)大于節(jié)點(diǎn)數(shù)姻成,比如 Redis Cluster 槽范圍是 0 ~ 16383插龄。是集群內(nèi)數(shù)據(jù)管理遷移基本單位。采用大范圍槽的主要目的是為了方便數(shù)據(jù)拆分集群擴(kuò)展科展。每個(gè)節(jié)點(diǎn)會(huì)負(fù)責(zé)一定數(shù)量的槽均牢,如圖所示:

當(dāng)前集群有 5 個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)平均大約負(fù)責(zé) 3276 個(gè)才睹。由于采用高質(zhì)量哈希算法徘跪,每個(gè)槽所映射的數(shù)據(jù)通常比較均勻,將數(shù)據(jù)平均劃分到 5 個(gè)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)分區(qū)砂竖。Redis Cluster 就是采用虛擬槽分區(qū)真椿。

節(jié)點(diǎn)1: 包含 0 到 3276 號(hào)哈希槽。

節(jié)點(diǎn)2:包含 3277 到 6553 號(hào)哈希槽乎澄。

節(jié)點(diǎn)3:包含 6554 到 9830 號(hào)哈希槽突硝。

節(jié)點(diǎn)4:包含 9831 到 13107 號(hào)哈希槽。

節(jié)點(diǎn)5:包含 13108 到 16383 號(hào)哈希槽置济。

這種結(jié)構(gòu)很容易添加或者刪除節(jié)點(diǎn)解恰。如果增加一個(gè)節(jié)點(diǎn) 6,就需要從節(jié)點(diǎn) 1 ~ 5 獲得部分分配到節(jié)點(diǎn) 6 上浙于。如果想移除節(jié)點(diǎn) 1护盈,需要將節(jié)點(diǎn) 1 中的移到節(jié)點(diǎn) 2 ~ 5 上,然后將沒(méi)有任何槽的節(jié)點(diǎn) 1 從集群中移除即可羞酗。

由于從一個(gè)節(jié)點(diǎn)將哈希槽移動(dòng)到另一個(gè)節(jié)點(diǎn)并不會(huì)停止服務(wù)腐宋,所以無(wú)論添加刪除或者改變某個(gè)節(jié)點(diǎn)的哈希槽的數(shù)量都不會(huì)造成集群不可用的狀態(tài).

2.2 Redis數(shù)據(jù)分區(qū)

上面說(shuō)過(guò),Redis Cluster 采用虛擬槽分區(qū),所有的根據(jù)哈希函數(shù)映射到 0~16383 整數(shù)槽內(nèi)胸竞,計(jì)算公式:slot = CRC16(key)& 16383欺嗤。每個(gè)節(jié)點(diǎn)負(fù)責(zé)維護(hù)一部分槽以及槽所映射的鍵值數(shù)據(jù),如圖所示:

3 Redis集群搭建

3.1 環(huán)境準(zhǔn)備

3.1.1 安裝GCC

Redis 安裝需要依托GCC環(huán)境

\1.? 檢查是否安裝gcc

命令: gcc -v

如果能輸出gcc版本信息,卫枝,說(shuō)明安裝了gcc煎饼。反之需要安裝gcc

\2.? 安裝gcc

創(chuàng)建目錄/usr/local/gccSrc

上傳以下rpm文件至/usr/local/gccSrc目錄下

cpp-4.8.5-11.el7.x86_64.rpm

gcc-4.8.5-11.el7.x86_64.rpm

glibc-devel-2.17-157.el7.x86_64.rpm

glibc-headers-2.17-157.el7.x86_64.rpm

kernel-headers-3.10.0-514.el7.x86_64.rpm

libmpc-1.0.1-3.el7.x86_64.rpm

mpfr-3.1.1-4.el7.x86_64.rpm

\3.? 依次進(jìn)行安裝

rpm -ivh mpfr-3.1.1-4.el7.x86_64.rpm

rpm -ivh libmpc-1.0.1-3.el7.x86_64.rpm

rpm -ivh kernel-headers-3.10.0-514.el7.x86_64.rpm

rpm -ivh glibc-headers-2.17-157.el7.x86_64.rpm

rpm -ivh glibc-devel-2.17-157.el7.x86_64.rpm

rpm -ivh cpp-4.8.5-11.el7.x86_64.rpm

rpm -ivh gcc-4.8.5-11.el7.x86_64.rpm

\4.? 都安裝成功后黑滴,驗(yàn)證gcc -v

3.1.2 安裝zlib

因?yàn)镽edis集群環(huán)境需要使用到ruby的接口辅柴,需要使用到redis的gem包,而安裝gem包時(shí)需要有zlib的環(huán)境

1置侍、上傳zlib-1.2.11.tar.gz到/usr/local目錄下

2马篮、解壓 tar -xzvf zlib-1.2.11.tar.gz

3沾乘、cd zlib-1.2.11

4、./configure --prefix=/usr/local/zlib

(如果報(bào)錯(cuò)check for gcc浑测,需要先安裝gcc意鲸,安裝完GCC再來(lái)執(zhí)行)

5、make

6尽爆、make install

3.1.3 安裝openssl

因?yàn)镽edis集群環(huán)境需要使用到ruby的接口,需要使用到redis的gem包读慎,而安裝gem包時(shí)需要有openssl的環(huán)境

1漱贱、上傳openssl-1.0.1h.tar.gz到/usr/local/目錄下

2、解壓 tar -xzvf openssl-1.0.1h.tar.gz

3夭委、cd openssl-1.0.1h/

4幅狮、./config -fPIC --prefix=/usr/local/openssl enable-shared

5、./config -t

6株灸、make && make install

7崇摄、which openssl? ? //查看系統(tǒng)openssl的路勁

8、rm -rf /usr/bin/openssl? // /usr/bin/openssl是which openssl 查看到的舊版本的openssl的路徑

9慌烧、cp /usr/local/openssl/bin/openssl /usr/bin/openssl //拷貝新版本的安裝路徑到系統(tǒng)路徑

10逐抑、執(zhí)行openssl version

輸出版本信息

3.1.4 安裝ruby

在安裝Redis集群環(huán)境是需要使用到Ruby

1、上傳ruby-2.5.7.tar.gz到/usr/local目錄下

2屹蚊、解壓 tar -xzvf ruby-2.5.7.tar.gz

3厕氨、cd ruby-2.5.7

4、./configure –-prefix=/usr/local/ruby? //-prefix是將ruby安裝到指定目錄

5汹粤、make && make install

成功安裝如圖所示

6命斧、配置環(huán)境變量

vi /etc/profile

添加環(huán)境變量,如圖所示

7嘱兼、執(zhí)行命令使配置文件生效

source /etc/profile

8国葬、執(zhí)行命令校驗(yàn)ruby是否安裝成功,安裝配置成功會(huì)輸出ruby版本信息

ruby -v

9、進(jìn)入/usr/local/ruby-2.5.7/ext/zlib/目錄下

cd /usr/local/ruby-2.5.7/ext/zlib/

(備注:/usr/local/ruby-2.5.7這個(gè)目錄是ruby安裝包后解壓的目錄)

10汇四、執(zhí)行命令:ruby extconf.rb --with-zlib-include=/usr/local/zlib/include/ --with-zlib-lib=/usr/local/zlib/lib

(備注:/usr/local/zlib是zlib安裝目錄接奈,命令執(zhí)行后會(huì)生成Makefile文件)

11、打開(kāi)Makefile文件船殉,找到下面一行(在文件倒數(shù)第3行)把路徑修改一下

把zlib.o: $(top_srcdir)/include/ruby.h 改zlib.o: ../../include/ruby.h

12鲫趁、make && make install

13、進(jìn)入 /usr/local/ruby-2.5.7/ext/openssl/目錄下

cd /usr/local/ruby-2.5.7/ext/openssl/

14利虫、執(zhí)行命令:

ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib

(備注:/usr/local/openssl是openssl的安裝目錄挨厚,命令執(zhí)行后會(huì)生成Makefile文件)

15、打開(kāi)Makefile文件糠惫,在topdir = /usr/local/ruby/include/ruby-xxx后面新增一行 top_srcdir = /usr/local/ruby-2.5.7

(備注/usr/local/ruby-2.5.7是ruby解壓的目錄)

16疫剃、make && make install

3.1.5 安裝redis-4.1.3.gem

安裝集群環(huán)境時(shí)需要使用到ruby的接口,這個(gè)redis-4.1.3.gem提供了這個(gè)接口

1硼讽、上傳redis-4.1.3.gem到/usr/local/目錄下

2巢价、執(zhí)行命令 gem install redis-4.1.3.gem

成功安裝如圖所示

3.2 安裝單機(jī)Redis

1、創(chuàng)建/usr/local/redis目錄固阁,上傳redis-4.0.14.tar.gz至/usr/local/redis目錄

2壤躲、cd /usr/local/redis

3、解壓 tar -xzvf redis-4.0.14.tar.gz

4备燃、cd redis-4.0.14/

5碉克、make && make install

看到如下信息,redis安裝成功了

進(jìn)入安裝目錄 cd /usr/local/redis/redis-4.0.14

6并齐、修改配置文件redis.conf

bind 127.0.0.1 改為bind 0.0.0.0 【說(shuō)明:表示所有ip都可以連接這個(gè)redis】

daemonize no 改為 daemonize yes 【說(shuō)明:?jiǎn)?dòng)守護(hù)進(jìn)程】

protected-mode yes 改為 protected-mode no 【說(shuō)明:取消保護(hù)模式漏麦,如果啟用保護(hù)模式需要設(shè)置密碼】

logfile "" 改為 logfile "redis日志存儲(chǔ)文件路徑" 【說(shuō)明:指定日志存儲(chǔ)路徑】

7、啟動(dòng)redis的命令

進(jìn)入redis安裝目錄/usr/local/redis/redis-4.0.14况褪,執(zhí)行如下命令啟動(dòng)redis

redis-server redis.conf

啟動(dòng)后執(zhí)行如下命令連接redis

redis-cli -p 6379 -h 192.169.1.86

(備注:6379是redis默認(rèn)端口 192.169.1.86是redis所在服務(wù)器ip)

并執(zhí)行命令set 1 1存入值至redis中測(cè)試一下

3.3 部署集群環(huán)境

集群模式相當(dāng)于將數(shù)據(jù)槽分片撕贞。每個(gè)節(jié)點(diǎn)分一段數(shù)據(jù)片。這樣的話测垛,當(dāng)一個(gè)節(jié)點(diǎn)宕機(jī)后捏膨,這個(gè)節(jié)點(diǎn)沒(méi)有備份的話,此段分片將不再可以使用食侮。所以脊奋,官方推薦,集群內(nèi)的每個(gè)節(jié)點(diǎn)都應(yīng)該配備一個(gè)從節(jié)點(diǎn)疙描,作為冷備诚隙。

官網(wǎng)推薦的模式,是三主三從的集群部署方式起胰,這里以配置三主三從為例.

需要配置的節(jié)點(diǎn)信息

節(jié)點(diǎn)名稱端口號(hào)是主是從所屬主節(jié)點(diǎn)

Redis70017001主

Redis70027002主

Redis70037003主

Redis70047004從Redis7004

Redis70057005從Redis7001

Redis70067006從Redis7002

1久又、進(jìn)入/usr/local/redis/目錄

cd /usr/local/redis

2巫延、執(zhí)行mkdir redis700{1,2,3,4,5,6} 創(chuàng)建文件夾redis7001、redis7002地消、redis7003炉峰、redis7004、redis7005脉执、redis7006

3疼阔、將/usr/local/bin/ 目錄下的redis-cli和redis-server復(fù)制到redis7001、...redis7006目錄下

1半夷、在redis7001目錄下創(chuàng)建redis.conf文件

vim redis.conf

文件內(nèi)容

#端口號(hào)(6個(gè)對(duì)應(yīng)各自的端口號(hào))

port 7001

appendonly yes

#啟動(dòng)集群

cluster-enabled yes

#yes 啟用守護(hù)進(jìn)程

daemonize yes

#關(guān)聯(lián)集群配置文件

cluster-config-file "nodes.conf"

#設(shè)置超時(shí)

cluster-node-timeout 5000

#日志信息

logfile "redis7001.log"

#指定訪問(wèn)地址

bind 0.0.0.0

tcp-keepalive 300

redis7002目錄下創(chuàng)建redis.conf文件

文件內(nèi)容為

port 7002

appendonly yes

cluster-enabled yes

daemonize yes

cluster-config-file "nodes.conf"

cluster-node-timeout 5000

logfile "redis7002.log"

bind 0.0.0.0

tcp-keepalive 300

依次類推婆廊,redis7003至redis7006目錄下都創(chuàng)建redis.conf文件

每個(gè)目錄下(redis7001至redis7006)都應(yīng)該有這三個(gè)文件

分別將這6個(gè)服務(wù)啟動(dòng)起來(lái),啟動(dòng)命令:redis-server redis.conf

一個(gè)一個(gè)啟動(dòng)有點(diǎn)麻煩巫橄,在/usr/local/redis/目錄下創(chuàng)建一下sh腳本來(lái)啟動(dòng)redis實(shí)例

vim startall.sh

cd redis7001

./redis-server redis.conf

cd ..

cd redis7002

./redis-server redis.conf

cd ..

cd redis7003

./redis-server redis.conf

cd ..

cd redis7004

./redis-server redis.conf

cd ..

cd redis7005

./redis-server redis.conf

cd ..

cd redis7006

./redis-server redis.conf

賦予 startall.sh腳本可執(zhí)行權(quán)限

chmod 777 startall.sh

執(zhí)行 startall.sh腳本

./startall.sh

執(zhí)行ps -ef|grep redis情況查看redis運(yùn)行情況淘邻,啟動(dòng)成功如圖所示

創(chuàng)建集群,將這幾個(gè)節(jié)點(diǎn)加入集群湘换。首先進(jìn)入redis-trib.rb所在目錄

進(jìn)入/usr/local/redis/redis-4.0.14/src/目錄

cd /usr/local/redis/redis-4.0.14/src/

執(zhí)行如下命令:

./redis-trib.rb create --replicas 1 192.169.1.86:7001 192.169.1.86:7002 192.169.1.86:7003 192.169.1.86:7004 192.169.1.86:7005 192.169.1.86:7006

【備注:192.169.1.86是redis所在服務(wù)器ip,注意這個(gè)ip不能寫127.0.0.1,否則只有本機(jī)才能連接】

輸入yes 回車 宾舅,redis-trib.rb 開(kāi)始執(zhí)行節(jié)點(diǎn)握手槽分配操作,如圖所示加入集群成功

說(shuō)明:M表示是主節(jié)點(diǎn)彩倚,S表示是從節(jié)點(diǎn)】

執(zhí)行集群檢查筹我,檢查各個(gè) redis 節(jié)點(diǎn)占用的哈希槽(slot)的個(gè)數(shù)以及 slot覆蓋率。16384 個(gè)槽位中帆离,主節(jié)點(diǎn)Redis7001崎溃、主節(jié)點(diǎn)Redis7002和,主節(jié)點(diǎn)Redis7003分別占用了 5461盯质、5462 和 5461 個(gè)槽位。

連接集群測(cè)試

連接命令:redis-cli -p 其中一個(gè)節(jié)點(diǎn)的端口 -h 其中一個(gè)節(jié)點(diǎn)的ip -c

[備注:一定要有-c , -c表示以集群方式連接概而,沒(méi)有-c就是單點(diǎn)連接了]

并往redis存一個(gè)值進(jìn)行測(cè)試:set a a ,如下圖表示成功

3.3 集群環(huán)境中每個(gè)節(jié)點(diǎn)加入密碼

加入密碼有兩種方式:

u 方法一:修改所有Redis集群中的redis.conf配置文件

masterauth 123456 //設(shè)置master密碼呼巷,是為了Salve能夠連接上Masterrequirepass 123456 //設(shè)置Redis訪問(wèn)請(qǐng)求密碼復(fù)制代碼

u 方法二:進(jìn)入各個(gè)Redis集群中的實(shí)時(shí)配置

./redis-cli -c -p 7001 //分別進(jìn)入各個(gè)Redis片機(jī)進(jìn)行各自設(shè)置config set masterauth 123456 config set requirepass 123456 config rewrite復(fù)制代碼

注意:各個(gè)節(jié)點(diǎn)密碼都必須一致,否則Redirected就會(huì)失敗赎瑰。推薦使用第一種方式王悍。

先關(guān)閉所有的redis服務(wù),使用命令 redis-cli -p 7001 shutdown依次將redis實(shí)例關(guān)閉餐曼。經(jīng)過(guò)上面的步驟其實(shí)已經(jīng)生成了相應(yīng)的節(jié)點(diǎn)信息文件(nodes.conf)和數(shù)據(jù)信息文件(appendonly.aof压储,dump.rdb)。將所有redis7001 到redis7006的文件夾下的這三個(gè)文件都刪除源譬,然后修改redis.conf添加密碼如圖所示


然后找到client.rb文件(可以使用 find / -name “client.rb”命令)然后修改password集惋,如圖

然后使用腳本啟動(dòng)所有的集群節(jié)點(diǎn)。

再次運(yùn)行命令 ./redis-trib.rb create --replicas 1 192.169.1.21:7001 192.169.1.21:7002 192.169.1.21:7003 192.169.1.21:7004 192.169.1.21:7005 192.169.1.21:7006 創(chuàng)建集群踩娘。

測(cè)試集群

使用命令 redis-cli -c -p 7001 設(shè)置一個(gè)set name song刮刑,會(huì)提示需要認(rèn)證 輸入auth “123456”即可 ,然后再次set name song 會(huì)redirected 到7002,也需要密碼 雷绢,當(dāng)然可以直接再次使用 auth “123456”,這樣顯得有些繁瑣泛烙,可以直接使用命令,redis-cli -c -p 7001 -a 123456連接(-a 相當(dāng)于是輸入密碼驗(yàn)證)翘紊,這樣就可以直接跳轉(zhuǎn)蔽氨。如圖

加入密碼后的關(guān)閉redis實(shí)例的腳本也要相應(yīng)的修改一下,加入-a 123456 的參數(shù)? 修改后內(nèi)容如下:


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帆疟,一起剝皮案震驚了整個(gè)濱河市鹉究,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸯匹,老刑警劉巖坊饶,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異殴蓬,居然都是意外死亡匿级,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門染厅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)痘绎,“玉大人,你說(shuō)我怎么就攤上這事肖粮」乱常” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵涩馆,是天一觀的道長(zhǎng)行施。 經(jīng)常有香客問(wèn)我,道長(zhǎng)魂那,這世上最難降的妖魔是什么蛾号? 我笑而不...
    開(kāi)封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮涯雅,結(jié)果婚禮上鲜结,老公的妹妹穿的比我還像新娘。我一直安慰自己活逆,他們只是感情好精刷,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蔗候,像睡著了一般怒允。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锈遥,一...
    開(kāi)封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天误算,我揣著相機(jī)與錄音仰美,去河邊找鬼。 笑死儿礼,一個(gè)胖子當(dāng)著我的面吹牛咖杂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚊夫,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼诉字,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了知纷?” 一聲冷哼從身側(cè)響起壤圃,我...
    開(kāi)封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琅轧,沒(méi)想到半個(gè)月后伍绳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乍桂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年冲杀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睹酌。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡权谁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出憋沿,到底是詐尸還是另有隱情旺芽,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布辐啄,位于F島的核電站采章,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏壶辜。R本人自食惡果不足惜悯舟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望士复。 院中可真熱鬧,春花似錦翩活、人聲如沸阱洪。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)冗荸。三九已至,卻和暖如春利耍,著一層夾襖步出監(jiān)牢的瞬間蚌本,已是汗流浹背盔粹。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留程癌,地道東北人舷嗡。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嵌莉,于是被迫代替她去往敵國(guó)和親进萄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361