數據庫分爲:關係型數據庫(mysql、mariadb)和非關係型數據庫(redis等)
mysql主從複製的原理:
主從複製:
- master開啓binlog日誌
- master和slave的server-id不同
- slave主動連接master
mysql複製是將主庫的DDL和DML操作通過二進制日誌傳遞到複製服務器(從庫)上,然後從庫對這些日誌重新執行(重做),從而使得主庫和從庫保持數據一致。
vim /etc/my.conf (主:server-id=1 bin 從:server-id =2)
mysql(8080)複製的優點:
如果主庫出現問題,可以快速切換到從庫提供服務
可以在從庫執行查詢操作,降低主庫的訪問壓力。
可以在從庫進行備份,以免備份期間影響主庫的服務。
基於GTID的主從複製
優點:不用手工設置日誌偏移量, 可以很方便地進行故障轉移,如果啓用log_slave_updates 那麼從庫不會丟失主庫上的任何修改。
缺點:僅支持 MySQL 5.6 之後的版本, 而且不建議使用早期 5.6 版本。
在兩邊的配置文件/etc/my.cnf 都加上:
gtid_mode=ON
enforce-gtid-consistency=true
proxy實現mysql讀寫分離
在/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua修改最小連接數和最大連接數,
mysql proxy 會檢測客戶端連接, 當連接沒有超過 max_idle_connections 值時, 不會進行讀寫分離, 即查詢操作會發生到 master 上。
創建腳本 /usr/local/mysql-proxy/conf/mysql-proxy.conf
[mysql-proxy]
user=root
proxy-address=0.0.0.0:3306
proxy-backend-addresses=172.25.254.11:3306 //master
proxy-read-only-backend-addresses=172.25.254.12:3306 //slave
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
test3和test4實現主從複製,test2的proxy實現讀寫分離功能
redis(6379)(6380) 的主從複製及高可用集羣的原理:
redis的優點和缺點:
存儲在內存中,所以其性能極高;豐富的數據類型、原子性
redis是key-value數據庫,無法自己實現獨立的高可用,需要藉助其他外力或者手動干預進行實現
redis支持各種不同方式的排序.與memcached一樣,爲了保證效率,數據都是緩存在內存中;區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
主從複製:
一主兩備
redis-4.0.8 端口:6379
redis-cli 進入數據庫
vim /etc/redis/6379.conf
從數據庫配置:
slaveof 主機ip 主機端口(6379)
redis提供了哨兵,實現高可用。sentinel哨兵節點(26379)
哨兵節點進行自主監控主從節點以及其他哨兵節點,當發現主節點掛掉時自動故障轉移。
vim /etc/redis/sentinel.conf 給test1、test2和test3都配置master爲test1的ip
redis的集羣:
最少三個節點,因爲投票機制應該滿足半數以上的節點認爲某個節點是掛掉的,此時才能認爲該節點掛掉。
memcache+nginx+php緩存 memcache (11211)
nginx+tomcat+memcache實現session共享 memcache(11211) tomcat(8080) 用到nginx的jsp模塊
/usr/local/tomcat/conf/context.xml test1爲nginx 配置n1和n2 ,並且test2指定n1,test1指定n2
爲了對數據的保存更加牢靠,我們選擇交叉存放session的方法,即將訪問tomcat1上的數據存放在memcache2中,將訪問tomcat2上的數據存放在memcache1中,這樣存放,當某個tomcat服務斷了之後,訪問它的客戶session並不會消失,而是存放在了對立的memcache,如果存放session的memcache壞了,那麼它的數據會立即切換到另一個memcached中