MongoDB
一、mongodb復制集的工作原理
1.復制集是由一主兩從,3個節(jié)點構成。自帶自動監(jiān)控投票選主功能,有raft協(xié)議來支撐。
2.如果主庫發(fā)生宕機,復制集內(nèi)部會進行投票選舉,選擇新的主庫提供服務,同時會自動通知客戶端已經(jīng)切換,應用就會連接到新庫
二、MongoDB Sharding Cluster 分片集群架構原理
分片集群由三大部分組成:
第一部分:Router 路由
第二部分:Config Server 記錄復制集的節(jié)點信息 也需要創(chuàng)建復制集
第三部分:Shard 后端節(jié)點,每個節(jié)點都會創(chuàng)建復制集
原理:
1.所有用戶連接都會通過路由來連接,路由來分發(fā)請求,路由本身是無狀態(tài)的(沒腦子),用戶數(shù)據(jù)插入,路由沒辦法判斷處理
2.路由接收到用戶數(shù)據(jù)插入請求,會讀取配置節(jié)點里的信息,得知數(shù)據(jù)應該放在哪個節(jié)點。
三、MongoDB如何實現(xiàn)自動分片
通過balancer,自動巡檢Shard節(jié)點上chunk(數(shù)據(jù)塊)狀況,自動做chunk遷移
四、MongoDB的oplog作用是什么
1.相當于是mysql的binlog,記錄了mongodb實例一段時間內(nèi)數(shù)據(jù)庫的所有變更(插入、更新、刪除)操作
2.默認大小是磁盤空間%5,空間使用完,新紀錄會自動覆蓋最老的。
3.oplog可以配合mongodump實現(xiàn)熱備。
4.可以根據(jù)oplog的時間點恢復數(shù)據(jù)
五、MongoDB用戶管理和Mysql的區(qū)別
MongoDB登錄庫必須要驗證庫,use test
MySQL 只需要驗證密碼信息,用戶信息,端口信息等。
六、Mongodump介紹
mongodump可以在mongodb運行時進行備份,它的工作原理是對運行的mongodb做查詢,然后將所有查到的文檔寫入磁盤,
存在的問題是使用mongodump產(chǎn)生的備份不一定是數(shù)據(jù)庫的實時快照,如果在備份時進行了寫入操作,則備份出的文件可能不完全和mongodb實時數(shù)據(jù)相等,另外在備份時可能會對其他客戶端性能產(chǎn)生不利的影響
七、MySQL數(shù)據(jù)遷移MongoDB
//mysql-->mongodb
1.導出mysql需要做遷移的數(shù)據(jù),文件結尾要以.csv格式
2.給文件加上mogodb屬主屬組
3.查看mysql導出原數(shù)據(jù)的列名
4.加上列名導入到mongodb庫中
Redis
一、redis cluster 分布式集群實現(xiàn)原理
搭建集群主要是解決哨兵的不足:
主庫寫壓力大的問題
資源利用率不高的問題
連接過程繁瑣,效率低的問題
原理:
1.在多分片節(jié)點中,將16384個槽位,均勻分配到多個節(jié)點中。
2.存數(shù)據(jù)時,將數(shù)據(jù)做crc-16算法,然后和16384進行取模,得出槽位值(0-16383之間)
3.根據(jù)計算得出的槽位值,找到對應的分片節(jié)點的主節(jié)點,存儲到相應槽位上
4.如果客戶當時連接的節(jié)點不是將來要存儲的分片節(jié)點,分片集群會將客戶端連接切換至真正的存儲節(jié)點進行數(shù)據(jù)存儲
二、Redis sentinel 哨兵高可用實現(xiàn)原理
1.監(jiān)控:哨兵會不斷監(jiān)控主服務器和從服務器是否運行正常
2.提醒:當被監(jiān)控的某個redis服務器出現(xiàn)問題時,哨兵可通過API向管理員或者其他應用程序發(fā)送通知
3.自動故障轉移:主服務器不正常時,哨兵會自動故障轉移,會將一個主從中的從服務器升級為新主,并讓其他的從服務器復制新的主??蛻舳诉B接失效的主服務器時,集群會會返回新主的地址,使集群可以使用新主代替失效的主。
三、Redis的主從原理
1.從服務器連接上主服務器,發(fā)送sync命令;
2.主服務器接收到sync命令后,立即觸發(fā)bgsave命令生成RBD文件發(fā)送給從服務器。
3.主服務器在發(fā)送期間會繼續(xù)記錄被執(zhí)行的命令,保存發(fā)送給從服務器
4.再此之后,主服務器發(fā)生新操作,都會以命令傳播方式發(fā)送給從服務器
5.所有復制相關信息,從info信息中都可查到,即使重啟任何節(jié)點,主從關系依然在
6.如果發(fā)生主從斷開,從庫數(shù)據(jù)沒有損壞,下次重連時,從庫發(fā)送psync給主庫,
7.主庫只會將從庫缺失部分數(shù)據(jù)同步給從庫應用,達到快速恢復主從目的
四、Redis事務和MySQL事務的區(qū)別
redis事務是基于隊列實現(xiàn)的
mysql事務是基于事務日志和鎖機制實現(xiàn)的
五、redis數(shù)據(jù)類型和應用場景
starings: 字符類型 常規(guī)計數(shù):微博數(shù),粉絲數(shù),訂閱,刷禮物
hash: 字典類型 數(shù)據(jù)庫緩存
list: 消息隊列類型 發(fā)朋友圈
SET: 集合類型 共同好友,可能認識的人
sortset: 有序集合類型 排行榜應用,取TOP N操作
六、redis持久化方式
RDB持久化:在指定的時間間隔內(nèi)生成數(shù)據(jù)集的時間點快照,
1.當執(zhí)行bdsave時,通知父進程分出一個子進程
2.父進程繼續(xù)響應其他命令
3.子進程生成RDB文件,備份數(shù)據(jù),備份完成通知父進程,子進程結束
AOF持久化:記錄服務器執(zhí)行的所有寫操作,并在服務器啟動時,通過重新執(zhí)行這些命令來還原數(shù)據(jù)集 相比于mysql的binlog
1.先把命令寫入緩沖區(qū)
2.緩沖區(qū)持久化到AOF文件中
3.如果重啟的話,會先讀取AOF文件
4.AOF文件一些數(shù)據(jù)過期了會自動處理
七、redis安全模式簡述
1.redis默認配置沒有用戶驗證,redis的server只需要知道ip和端口就連上了,同時還有操作權限,所以數(shù)據(jù)很危險。
2.但redis的設計者注意到這一點,引導做一些配置,默認是bind "127.0.0.1" 只接受本機的客戶端連接。要讓所有ip地址連接只需要注釋掉bind.
3. 3.2版本開始,redis增加了protected-mode,及時注釋了bind,遠程連接也會報錯
4.protected-mode默認是開啟的,它會在兩種情況同時存在時起作用,
①server沒有明確指定ip去bind
②沒有password配置
5.注釋點bind,沒有指定ip去server bind。默認配置文件是沒有密碼配置的,安全模式就回在這時起作用
6.如果不想設置密碼,又想被遠程連接,那就把protected-mode 的yes 改成 no
redis默認開啟了保護模式,只允許本地回環(huán)地址登錄并訪問數(shù)據(jù)庫。
禁止protected-mode
protected-mode yes/no (保護模式,是否只允許本地訪問)
配置文件中:
1.bind 指定ip進行監(jiān)聽
2.增加requirepass (密碼)