天天看點

華為雲搭建雙主mysql

資源清單:

伺服器:兩台

配置:系統:Centos 6.9  ,磁盤:50G+500,CPU:  8C,記憶體:16G

架構思路:

1.兩台mysql都可讀寫,互為主備,預設隻使用一台(masterA)負責資料的寫入,另一台(masterB)備用;

2.masterA是masterB的主庫,masterB又是masterA的主庫,它們互為主從;

3.兩台主庫之間做高可用,可以采用keepalived等方案(使用VIP對外提供服務);

4.所有提供服務的從伺服器與masterB進行主從同步(雙主多從);

5.采用高可用政策的時候,masterA或masterB均不因當機恢複後而搶占VIP(非搶占模式);

這樣做可以在一定程度上保證主庫的高可用,在一台主庫down掉之後,可以在極短的時間内切換到另一台主庫上(盡可能減少主庫當機對業務造成的影響),減少了主從同步給線上主庫帶來的壓力;

但是也有幾個不足的地方:

1.masterB可能會一直處于空閑狀态(可以用它當從庫,負責部分查詢);

2.主庫後面提供服務的從庫要等masterB先同步完了資料後才能去masterB上去同步資料,這樣可能會造成一定程度的同步延時;

架構的簡易圖如下:

華為雲搭建雙主mysql

安裝步驟:

一、磁盤挂載:

1. 檢視可用磁盤 fdisk -l

2. 新增磁盤 fdisk /dev/可用磁盤

輸入n:添加新分區,

輸入p:主分區,

輸入1:表示1個分區,

輸入回車:從磁盤開始,

輸入回車:到磁盤結尾

輸入t:改變分區類型

輸入8e:改變分區LVM

輸入w:儲存退出

說明:p表示列印目前狀态

3.磁盤挂載

mkfs.ext3 /dev/磁盤1 mkfs.ext4 /dev/磁盤1 mkfs.xfs /dev/磁盤1

等待設定完成後就可以挂載到相應的檔案夾下進行使用了

我在目前系統根目錄下建立了一個挂載目錄 目錄并用來做一個挂載點:

mount /dev/磁盤1 /挂載目錄

自動挂載

vgdisplay 或 blkid /裝置 檢視UUID

寫入 /etc/fstab

mount -a 檢視是否自動挂載

二、下載下傳mysql服務:

       1.從網上下載下傳安裝包,然後上傳。

        2.解壓tar包 .

cd /usr/local/

tar -zxvf mysql**** 解壓

mv mysql**** mysql 重命名

groupadd mysql 建立使用者組

useradd -r -g mysql mysql 建立使用者添加進使用者組 -r辨別系統内部使用者

chown -R mysql mysql 給使用者加mysql檔案權限

chgrp -R mysql mysql 給使用者組mysql檔案權限

ln -s /usr/local/mysql/bin/mysql /usr/bin

三、.修改my.ini 或者 my.cnf  (配置檔案部分内容可根據實際調整,紅色部分是比較重要的)

[client]

port=1234 #用戶端端口

socket=/tmp/mysql.sock

[mysqld]

port=1234 #服務端口

#datadir=/var/lib/mysql

datadir=/usr/local/mysql/data #資料目錄

#socket=/var/lib/mysql/mysql.sock

socket=/tmp/mysql.sock #

character_set_server=utf8 #設定編碼

init_connect='SET NAMES utf8'

basedir=/usr/local/mysql #mysql目錄

user=mysql #使用者

skip-external-locking

key_buffer_size=256

max_allowed_packet=16M

#slave-skip-error=1060,1062,1032,1050,1061 #跳過錯誤同步代碼

myisam_sort_buffer_size=64M

slave_type_conversions=ALL_NON_LOSSY,ALL_LOSSY

#skip-grant-tables #跳過root登入修改密碼用的

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

#bind-address =192.168.11.72 監聽IPV6

bind-address=0.0.0.0 #監聽IPV4

relay-log=/usr/local/mysql/log/slave-relay-log

relay-log-index=/usr/local/mysql/log/slave-relay-log.index

server-id=72 #唯一id

auto-increment-offset = 2 #主備區分, 主=1 ,備=2

auto-increment-increment = 2 #主備都一樣

log-bin=mysql-bin #log-bin名稱 随意

binlog-format=MIXED

expire_logs_days=10 # 日志儲存天數

log_slave_updates=true

#replicate-ignore-table

default-storage-engine=INNODB

long_query_time=2

replicate-ignore-db=mysql,information_schema

innodb_file_per_table

max_connections=100 #最大連接配接數100

table_open_cache=2048

binlog_cache_size=1M

max_heap_table_size=64M

read_buffer_size=2M #緩存大小

read_rnd_buffer_size=16M

sort_buffer_size=8M

join_buffer_size=8M

thread_cache_size=8 #線程數量

#thread_concurrency=8

query_cache_size=64M

query_cache_limit=2M

ft_min_word_len=4

transaction_isolation=REPEATABLE-READ

tmp_table_size=64M

slow_query_log

#innodb_additional_mem_pool_size=16M  

innodb_buffer_pool_size=512m

innodb_write_io_threads=8

innodb_read_io_threads=8

innodb_thread_concurrency=16

innodb_flush_log_at_trx_commit=1

innodb_log_buffer_size=8M

innodb_log_file_size=8M

innodb_log_files_in_group=8M

innodb_max_dirty_pages_pct=90

innodb_lock_wait_timeout=120

[mysqldump]

quick

max_allowed_packet=16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size=64M

sort_buffer_size=64M

read_buffer=2M

write_buffer=2M

[mysqld_safe]

log-error=/usr/local/mysql/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

lower_case_table_names=1

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

max_connections=100 default-time_zone = '+8:00'

四、初始化

vi /var/log/mysqld.log 儲存

chmod 777 /var/log/mysqld.log #賦權

chown mysql:mysql /var/log/mysqld.log #賦權

/usr/local/mysql/bin/mysqld --initialize --user=mysql --lc_messages_dir=/usr/local/mysql/share --lc_messages=en_US  #初始化

1.檢視初始密碼

cat /var/log/mysqld.log

2..啟動mysql服務

将mysql.server 啟動腳本複制到服務中

#cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld

将腳本授權

#chmod 700 /etc/init.d/mysqld

啟動mysql服務

service mysqld start

注意點: xxx.pid缺失問題

cd /var/run/

mkdir mysqld

chmod 777 mysqld/

cd mysqld/

vi xxx.pid //建立xxx.pid檔案儲存

chmod 777 xxx.pid

chown mysql:mysql xxx.pid

service mysqld start //啟動成功

登入修改root密碼

/usr/local/mysql/bin/mysql -u root -p

set password for [email protected] = password('密碼'); #如果修改密碼報錯,先執行 flush privileges;

flush privileges;

use mysql ;

update user set host = '%' where user ='root';

flush privileges;

建立對應的資料庫 或者對應的使用者

create database 資料庫;

use 資料庫;

create user '使用者'@'%' identified by '密碼';

update mysql.user set authentication_string=password('[email protected]') where user='aoma';

賦權限

GRANT ALL PRIVILEGES ON *.* TO '使用者'@'%' IDENTIFIED BY '密碼' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO '使用者'@'%' WITH GRANT OPTION;

主從資料庫都運作後

show slave status\G;

stop slave ;

show master status\G; # 可以為root 使用者

change master to master_host='192.168.70.71', master_port=1234,master_user='使用者', master_password='密碼',master_log_file='master-bin.xxx',master_log_pos=xxx; #主備都要執行

#change master to master_host='192.168.70.72', master_port=1234,master_user='使用者', master_password='密碼',master_log_file='master-bin.xxx',master_log_pos=xxx; 

start slave ;

觀察同步情況 show slave status\G;

五、.keepalived

1.yum install -y keepalived /如果沒聯網 自行下載下傳再上傳

2.修改keepalived配置檔案

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_id MASTER-HA

}

vrrp_script chk_mysql_port { #檢測mysql服務是否在運作。有很多方式,比如程序,用腳本檢測等等

script "/etc/keepalived/chk_mysql.sh" #這裡通過腳本監測

interval 3 #腳本執行間隔,每2s檢測一次

weight -5 #腳本結果導緻的優先級變更,檢測失敗(腳本傳回非0)則優先級 -5

fall 5 #檢測連續2次失敗才算确定是真失敗。會用weight減少優先級(1-255之間)

rise 1 #檢測1次成功就算成功。但不修改優先級

}

vrrp_instance VI_1 {

state BACKUP #主備都為BACKUP 防止腦裂

interface eth1 #指定虛拟ip的網卡接口

#nopreempt #主要添加,防止主恢複後自動切回搶奪VIP資源 ,添加後priority 意義不大,隻用于最初的主備判斷。

mcast_src_ip 192.168.70.72   #另一個節點為 192.168.70.71

virtual_router_id 79 #路由器辨別,MASTER和BACKUP必須是一緻的

priority 101 #定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER的優先級必須大于BACKUP的優先級。這樣MASTER故障恢複後,就可以将VIP資源再次搶回來

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.70.70 #虛拟ip vip

}

track_script {

chk_mysql_port

}

}

3.編寫檢查腳本 可根據情況自行修改

vi chk_mysql.sh

#!/bin/bash

counter=$(netstat -na|grep "LISTEN"|grep "1234"|wc -l)

if [ "${counter}" -eq 0 ]; then

/etc/init.d/keepalived stop

fi

最後

雲平台要申請虛拟ip ,然後進行網卡的綁定。

兩台伺服器都綁定申請的虛拟ip即可 。

繼續閱讀