mysql主從備份+keepalived自動切換

數據庫這一層須要作到避免單點故障能夠是主從備份和主主備份,主主備份可能有性能損耗和數據同步的問題。這裏記錄下主從備份,mysql

mysql進行備份以前確保mysql的版本是同樣的,我這裏用的都是mysql5.7.18nginx

一、原文博客地址:http://qizhanming.com/blog/2017/06/20/how-to-config-mysql-57-master-slave-replication-on-centos-7sql

這篇博客已經寫的很好了,再也不記錄了。shell

mysql備份好了之後,操做主mysql上面的數據能夠看到從數據庫的數據實時同步的。數據庫

二、那問題來了,若是在項目中主mysql掛了,咱們是要手動切換msyql嗎,這樣會比較麻煩的,並且這段時間項目是不能用的。這裏用keepalived實現IP的vip漂移,centos

keepalived就是一個軟件,在主mysql和從mysql上面都安裝後,會有一個虛擬IP在其中的一臺服務器上面,若是這臺服務器宕機了,這個IP就會出如今另外一臺服務器上面,這是keepalived的功能,可以判斷是否可用和權重大小,而後自動漂移IP,這個IP是虛擬IP,咱們能夠本身隨意設置,不過要跟主,從mysql的IP在同一個網段,雲服務器好像須要再設置下默認是關閉的,若是是主機是能夠直接用的。服務器

一、安裝keepalived
  # yum install keepalived –y
二、備份keepalived.conf
  cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.back
三、編輯keepalived.conf
  global_defs {
  notification_email{
    xxx@qq.com
  }
  notification_email_from waterlufei123@qq.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id KeepAlive_Mysql
  }
  vrrp_script vs_mysql_82 {
  script "/etc/keepalived/checkMySQL.sh"
  interval 60
  }
  vrrp_instance VI_82 {
  state BACKUP
  nopreempt
  interface eth1
  virtual_router_id 82
  priority 100
  advert_int 5
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  track_script {
  vs_mysql_82  
  }
  virtual_ipaddress {
  192.168.108.156/24 brd 192.168.108.255 dev eth1 label eth1:1
  }
  }
  virtual_server 192.168.108.156 3306 {
  delay_loop 2
  lb_algo wrr
  lb_kind DR
  persistence_timeout 60
  protocol TCP
  real_server 192.168.108.146 3306 {
  weight 3
  TCP_CHECK {
  connect_timeout 10
  nb_get_retry 3
  delay_before_retry 3
  connect_port 3306
  }
  }
  }
其中/etc/keepalived/checkMySQL.sh須要新建,內容爲:
  echo "enter mysql_check.sh" >> /etc/keepalived/check_mysql.log
  MYSQL=/usr/bin/mysql
  MYSQL_HOST=127.0.0.1
  MYSQL_USER=user
  MYSQL_PASSWORD=password
  MYSQL_PORT=3306
  # 日誌文件
  LOG_FILE=/etc/keepalived/check_mysql.log
  # 檢查次數  
  CHECK_TIME=3
  #mysql is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0
  MYSQL_OK=1oop

  function check_mysql_helth (){
    $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p${MYSQL_PASSWORD} -P${MYSQL_PORT} -e "show status;" >/dev/null 2>&1
    if [ $? = 0 ] ;then
    MYSQL_OK=1
    else
    MYSQL_OK=0
    fi
    return $MYSQL_OK
  }
  while [ $CHECK_TIME -ne 0 ]
  do
  let "CHECK_TIME -= 1"
  check_mysql_helth
  if [ $MYSQL_OK = 1 ] ; then
  CHECK_TIME=0
  #echo `date --date=today +"%Y-%M-%d %H:%m:%S"` - [INFO] - mysql available: success[$MYSQL_OK] >> $LOG_FILE
  exit 0
  fi
  if [ $MYSQL_OK -eq 0 ] && [ $CHECK_TIME -eq 0 ]
  then
  /etc/init.d/keepalived stop
  echo `date --date=today +"%Y-%M-%d %H:%m:%S"` - [INFO] - mysql invaild. keepalived stop. >> $LOG_FILE性能

  exit 1
  fi
  sleep 1  
  done
  添加執行權限:
  shell > chmod +x /etc/keepalived/checkMySQL.sh
  手動執行下這個腳本,看看返回是不是0,若是是1,請檢查mysql連不上的緣由:
  shell > /etc/keepalived/checkMySQL.sh
  shell > echo $?
  從庫的keepalived.conf爲:
  global_defs {
  notification_email{
  1163804452@qq.com
  }
  notification_email_from waterlufei123@qq.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id KeepAlive_Mysql
  }
  vrrp_script vs_mysql_82 {
  script "/etc/keepalived/checkMySQL.sh"
  interval 60
  }
  vrrp_instance VI_82 {
  state BACKUP
  nopreempt
  interface eth0
  virtual_router_id 82
  priority 90
  advert_int 5
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  track_script {
  vs_mysql_82
  }
  virtual_ipaddress {
  192.168.108.156/24 brd 192.168.108.255 dev eth0 label eth0:1  
  }
  }
  virtual_server 192.168.108.156 3306 {
  delay_loop 2
  lb_algo wrr
  lb_kind DR
  persistence_timeout 60
  protocol TCP
  real_server 192.168.108.145 3306 {
  weight 3  
  TCP_CHECK {
  connect_timeout 10
  nb_get_retry 3
  delay_before_retry 3
  connect_port 3306
  }  
  }
 }
/etc/keepalived/checkMySQL.sh文件同樣。
而後主從服務器都啓動keepalived:
shell > service keepalived start
shell > chkconfig keepalived on
查看虛擬VIP
# ip addr
鏈接數據庫IP是192.168.108.156,當從庫壞了之後不該該主庫,當主庫壞了之後,VIP會漂移到145上,當咱們繼續訪問192.168.108.156時,實際訪問的是145上的數據庫日誌

總的來講就是keepalived能夠實現生成虛擬IP的功能,可是已什麼爲條件生成轉移VIP呢?因此這裏就加了checkMySQL.sh配置文件,根據mysql的狀態漂移vip,而後呢,而後這裏keepalived還能夠用到其餘地方,例如nginx,而後弄一個checkNginx.conf之類的,實現nginx的自動切換,這裏也就是 說說還沒作過

相關文章
相關標籤/搜索