1. 程式人生 > >雲部署(2)keepalived+postgresql主從切換

雲部署(2)keepalived+postgresql主從切換

在主從部署成功後,主庫寫入資料會同步到備庫中。

keepalived檢測pgsql的狀態,當主庫停止時,keepalived會將自己殺死,vip移到備庫中,此時備庫對外提供服務,但是不能寫入。

下面配置主從切換後,從變成主,可讀寫。主變成從,只同步資料。

此時基於雲部署(1),我的兩個主從伺服器狀態同步正常

1.主從停掉postgres庫,然後主從的keepalived都會停止,最好再檢查一下讓它們都停止。

2.修改主從的配置檔案,如下:

[[email protected] keepalived]# cat keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     ***@qq.com
   }
   notification_email_from ***@***.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ss
}

vrrp_script chk_pgsql {
   script "/etc/keepalived/pgsql_check.sh"
   interval 2
   weight -5
   fall 2
   rise 1
}
vrrp_instance VI_1 {
    state BACKUP  #主從都是BACKUP
    interface eth0
    virtual_router_id 51
    priority 100 #從改成96
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
       track_script {
       chk_pgsql
  }
   virtual_ipaddress {
        192.168.12.100
    }
}

3.修改主從的keepalived檢測指令碼,如下:

[[email protected] keepalived]# cat pgsql_check.sh 
#!/bin/bash
A=`ps -C postgres --no-header | wc -l` #判斷pg是否活著
B=`ip a | grep 192.168.12.100 | wc -l` #判斷vip浮到哪裡
C=`ps -ef | grep postgres | grep 'startup process' | wc -l` #判斷是否是從庫處於等待的狀態
D=`ps -ef | grep postgres | grep 'receiver' | wc -l` #判斷從庫連結主庫是否正常
E=`ps -ef | grep postgres | grep 'sender' | wc -l` #判斷主庫連線從庫是否正常
if [ $A -eq 0 ];then #如果pg死了,將訊息寫入日記並且關閉keepalived
    echo "`date "+%Y-%m-%d--%H:%M:%S"` postgresql stop so vip stop " >> /etc/keepalived/check_pg.log
    systemctl stop keepalived
else
	if [ $B -eq 1 -a $C -eq 1 -a $D -eq 0 ];then #判斷出主掛了,vip浮到了從,提升從的地位讓他可讀寫
		su - postgres -c "pg_ctl promote -D /usr/local/pgsql/pgdata" 
		echo "`date "+%Y-%m-%d--%H:%M:%S"` standby promote " >> /etc/keepalived/check_pg.log
	fi
	if [ $B -eq 1 -a $C -eq 0 -a $D -eq 0 -a $E -eq 0 ];then #判斷出自己是主並且和從失去聯絡
                sleep 10
       		echo "`date "+%Y-%m-%d--%H:%M:%S"` can't find standby " >> /etc/keepalived/check_pg.log
	fi
fi

依次啟動主pg,從pg,主keepalived,從keepalived

將firewalld、selinux關掉

檢測:

檢視ms與ss的資料庫是否一致,並在ms上寫入資料,再到ss上檢視是否同步過去了。若ms與ss主從同步沒有問題

cs上,連結vip寫入資料

[[email protected] pgsql]$ psql -h 192.168.12.100
psql (9.6.5)
Type "help" for help.

postgres=# \c hedb;
You are now connected to database "hedb" as user "postgres".
hedb=# select * from hetb;
   name   | age 
----------+-----
 heyajing |  24
 heyaya   |  23
(2 rows)
hedb=# insert into hetb values('yayajing',25);
INSERT 0 1
hedb=# select * from hetb;
   name   | age 
----------+-----
 heyajing |  24
 heyaya   |  23
 yayajing |  25
(3 rows)

hedb=# 

再分別到主從上檢視是否都新生成一行資料,目前現象和(1)沒什麼區別

下面我們停掉主的pg

[[email protected] pgdata]$ pg_ctl stop -D $PGDATA
waiting for server to shut down.... done
server stopped

再向客戶端插入資料

hedb=# insert into hetb values('noco',21);
INSERT 0 1
hedb=# 

成功,現在只有一臺伺服器執行(主ms已經停了),說明從庫ss現在的身份是主,不信你可以去從庫檢視並插入資料,
======

那麼ms故障恢復如何將它作為ss的從呢?

1.同步資料

這個地方最好弄read-wind但是我一直沒成功,如果後來成功我會更新的

暫時就用pg_basebackup吧

[[email protected] pgsql]$ cp pgdata pgdata.bbk -R
[[email protected] pgsql]$ rm -rf pgdata/*
[[email protected] pgsql]$ pg_basebackup -F p --progress -D $PGDATA -h 192.168.12.8 -p 5432 -U replica --password
Password: 
37503/37503 kB (100%), 1/1 tablespace
NOTICE:  WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup
[[email protected] pgsql]$ 

2.修改recovery.done表明自己降為從庫

[[email protected] pgdata]$ mv recovery.done recovery.conf
[[email protected] pgdata]$ vim recovery.conf 
將host改為192.168.12.8
[[email protected] pgdata]$ pg_ctl start -D $PGDATA -l $PGDATA/logfile
server starting
[[email protected] pgdata]$ ps -ef | grep postgres
有從庫程序標誌
postgres 127141 127140  0 17:27 ?        00:00:00 postgres: startup process   recovering 000000020000000000000007
postgres 127142 127140  0 17:27 ?        00:00:00 postgres: wal receiver process   streaming 0/7000140
[[email protected] pgdata]$ 

看ss上是否有主庫程序標識:

[[email protected] pgdata]$ ps -ef | grep postgres
postgres  25704  25597  0 17:27 ?        00:00:00 postgres: wal sender process replica 192.168.12.7(45848) streaming 0/7000140 #有

3.檢測

cs 插入資料是ok的

ss與ms都可以檢視到,ms作為從只讀,但是此時ms的keepalived還沒有開啟,開啟後vip卻浮到了ms,這裡說明我的keepalived的配置有問題。這裡我只能手動降級。

還是覺得我的配置不嚴謹。

相關推薦

部署2keepalived+postgresql主從切換

在主從部署成功後,主庫寫入資料會同步到備庫中。 keepalived檢測pgsql的狀態,當主庫停止時,keepalived會將自己殺死,vip移到備庫中,此時備庫對外提供服務,但是不能寫入。 下面配置主從切換後,從變成主,可讀寫。主變成從,只同步資料。 此時基於雲部署(1

docke+jenkins+git自動打包部署2--jenkins網頁配置

上篇將jenkins在伺服器上跑起來了,這篇主要是將jenkins的外掛安裝和系統配置設定一下 瀏覽器輸入10.17.191.211:8080(上篇中跑jenkins的伺服器) 一、這裡的pas

CM部署2:CM環境配置及安裝

一、機器分配 172.16.0.147 server(主節點)/agent mysql、namenode、resource manager、master、zookeeper、hiveserver、flume、SecondaryNamenode 172.16.0.115

teuthology安裝部署2

Tags: teuthology ceph 自動化測試 ceph自動化測試環境teuthology的安裝部署具體步驟 再次強調,本文所述均建立在Ubuntu14.0LTS系統之上,這是一個非常普通的系統,也是ceph官方推薦使用的。 本文中所克隆的源,有c

利用Helm簡化Kubernetes應用部署2

目錄 定義Charts  使用Helm部署Demo  Helm常用操作命令   定義Charts 回到之前的“charts”目錄,我們依次進行解讀並進行簡單的修改。 Chart.yaml 配置示例:

部署Django到伺服器centos+nginx+mysql+uwsgi+python3【操作篇2

接上篇操作篇(1):https://blog.csdn.net/jacky_zhuyuanlu/article/details/82880612 (七)建立Django專案 (1)建立資料夾,存放網站 mkdir -p /data/wwwroot

如何在阿里部署django網站2——使用MySQL資料庫

如果要在阿里雲上部署django網站,建議不要使用django自帶的sqlite,雖然一時省事,但帶來了很多其他的麻煩。建議使用MySQL或者PostgreSQL。由於MySQL比較流行,我就選擇了MySQL。 安裝MySQL 在使用MySQL之前,首先需要安裝。在ubuntu系

基於rhel7.2的Zabbix平臺搭建和部署

linux 監控軟件 zabbix nginx mysql php lnmp基於rhel7.2的zabbix平臺搭建和部署(一)一、實驗環境:(1)虛擬機:rhel7.2 x86_64(2)數據庫:mysql5.7.13(3)nginx1.10.2(4)PHP5.6.27(5)zabbix二、安裝編譯工具及

基於rhel7.2的Zabbix平臺搭建和部署

linux 監控軟件 zabbix nginx mysql php lnmp基於rhel7.2的Zabbix平臺搭建和部署(四)一、實現zabbix添加監測項,添加對Linux主機的監控、說明:先在“配置”-“主機”裏添加主機監控,監控os資源:內存,cpu,io,負載,帶寬等.(1)登錄zabbix,先在

基於centos6的mysql5.7.13主從部署

linux mysql5.7.13 安裝 部署基於centos6的mysql5.7.13主從部署(一)一、實驗環境:兩臺主機安裝Centos6.7 32位操作系統;兩臺Linux安裝同一版本的MySQL,這裏使用mysql5.7.13;mysql1的IP:192.168.100.129mysql2的IP:1

基於centos6的mysql5.7.13主從部署

linux mysql主從 部署基於centos6的mysql5.7.13主從部署(二)一、部署主mysql說明:mysql1是主機,mysql2是備機。創建庫[[email protected]/* */ ~]# mysql -uroot -p123456mysql> create da

基於centos6的mysql5.7.13主從部署

linux mysql主從 部署基於centos6的mysql5.7.13主從部署(三) 主從測試登入(主)mysql1[[email protected]/* */ ~]# mysql -uroot -p123456mysql> unlock tables; #解鎖,對應上一章節的表的

Spark入門實戰系列--2.Spark編譯與部署--Hadoop編譯安裝

二進制包 1.10 不能 mapr 修復 att 機器 mave end 【註】該系列文章以及使用到安裝包/測試數據 能夠在《[傾情大奉送–Spark入門實戰系列] (http://blog.csdn.net/yirenboy/article/deta

微信小程序——豆瓣電影——2:小程序運行部署

images 放心 覆蓋 當前 .cn markup 必須 global 定義 Demo 預覽 演示視頻(流量預警 2.64MB) GitHub Repo 地址 倉庫地址:https://github.com/zce/weapp-demo 使用步驟 將倉庫克隆到本地

LVS+keepalived高可用負載均衡集群部署---LAMP網站服務器與LVS服務器

虛擬機l 系統環境: RHEL7 l 硬件環境:虛擬機l 項目描述:為解決網站訪問壓力大的問題,需要搭建高可用、負載均衡的 web集群。 l 架構說明:整個服務架構采用功能分離的方式部署。後端采用2臺mysql 數據庫,實現主從結構以及讀寫分離。中間LAMP網站服務器共有2臺, 前端 2臺LVS服務

2LVS+Keepalived高可用負載均衡架構原理及配置

LVS Keepalived1、keepalived 介紹2、keepalived 優缺點3、keepalived 應用場景4、keepalived 安裝配置5、keepalived+lvs 高可用6、keepalived+nginx 高可用7、keepalived 切換原理8、性能優化9、常見故障 一、k

MySQL主從復制雜記2

MySQL 主從復制 基礎 雜記MySQL主從復制架構及實現 雜項 1、設置從節點為只讀模式 MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE ‘read_only‘; +---------------+-------+ | Variable_name | Val

【AWS系列】鐳速RaySync VS FTP 2- AWS巴西聖保羅到阿裏深圳

傳輸 測試 數據 鐳速 測試軟件信息 鐳速RaySync下載地址: Windows Server: https://www.raysync.cn/support_for_windows.html Linux Server: https://www.raysync.cn/support_for

統一日誌ELK部署配置2——kafka

日誌收集前提:你服務器上已經安裝並配置了java運行環境; 一、zookeeper安裝1、從zookeeper官網:http://zookeeper.apache.org/ 下載;我這裏下載的是zookeeper-3.4.9.tar.gz;2、解壓到你安裝目錄:tar-zxvf zookeeper-3.4.9

阿裏 centos7 64位搭建JAVA環境-----安裝JDK2

命令 是什麽 vim 文件 解壓縮 inf exp ima 發現 mysql安裝好以後,把jdk環境配置一下。 首先下載jdk 8,在官網下載。 找到鏈接 http://download.oracle.com/otn-pub/java/jdk/8u171-b11/51