第五週作業mysql高可用+ansible
一、如果主節點已經執行了一段時間,且有大量資料時,如何配置並啟動slave節點(寫出操作步驟)
1.節點配置
vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
log-bin
server-id=# 為當前節點設定一個全域性唯一的ID號
log-basename=master 可啥子datadir中日誌名稱,確保不依賴主機名稱
2. 重啟服務
systemctl restart mariadb
重啟後生成二進位制索引檔案和二進位制檔案
檢視當前二進位制位置
show master logs;
3.需要把資料庫做完全備分
建立資料夾給許可權
chown -R mysql.mysql 檔案
全部備份
mysqldump -A -F --single-transaction --master-data=1 > /data/backup/base.sql
把主的完全備份檔案傳入,從
$scp /data/backup/base.sql 10.0.0.20:/data/
4.建立有複製許可權的使用者賬戶
grant replication slave on *.* to repluser@'10.0.0.%' identified by 'tang';
GRANT REPLICATION SLAVEON*.* To 'repluser'@ 'HOST’IDENTIFIED BY 'replpass';
5.檢視從二進位制日誌的檔案和位置開始進行復制
MariaDB [(none)]> show master logs;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000004 | 389 |
+--------------------+-----------+
6.啟動中繼日誌
vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server_id=20 為當前節點設定一個全域性唯一的id號
log-bin
read_only=on 設定資料庫只讀,針對supper user無效
relay_log=relay-log reay log的檔案路徑,預設值hostanem-relay-bin
relay_log_index=relay-log.index 預設值hostname-relay-bin.index
設定完後重啟
systemctl restart mariadb
6.使用有複製許可權的使用者賬號連線主伺服器,並啟動複製執行緒
幫助文件
help change master to
CHANGE MASTER TO
MASTER_HOST='master2.mycompany.com', 指定主伺服器ip地址 ,
MASTER_USER='replication', 複製時候賬號的名稱
MASTER_PASSWORD='bigs3cret', 密碼
MASTER_PORT=3306, 埠號
下面三個已經在配置檔案裡自動生成了所以不用管
MASTER_LOG_FILE='master2-bin.001', 二進位制位置
MASTER_LOG_POS=4, 節點
MASTER_CONNECT_RETRY=10;
配置好後重啟服務
systemctl restart mariadb
8. 判斷主從同步狀態
show slave status\G
複製延遲,表示主節點和從節點之間差了多少時間,因為還沒有複製所以為 NULL 顯示0表示已經同步
9啟動執行緒
start slave;
start slave [IO_THREAD|SQL_THREAD];
- 通過備份恢復資料至從伺服器,複製起始位置為備份時
- 二進位制日誌檔案及其POS
二、當master伺服器當機,提升一個slave成為新的master(寫出操作步驟)
1. 找到哪個從節點的資料庫是最新,讓它成為新master
[root@centos8 ~]#cat /var/lib/mysql/relay-log.info
5
./mariadb-relay-bin.000001
1180
mysql-bin.000001
996
0
2. 新master修改配置檔案,關閉read-only配置
[root@slave1 ~]#vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=18
read-only=OFF
log-bin=/data/mysql/logbin/mysql-bin
3. 清除舊的master複製資訊3
MariaDB [hellodb]>set global read_only=off;
MariaDB [hellodb]>stop slave;//
MariaDB [hellodb]>reset slave all;
4. 在新master上完全備份
[root@slave1 ~]#mysqldump -A --single-transaction --master-data=1 -F >
backup.sql
[root@slave1 ~]#scp backup.sql 10.0.0.28:
#分析舊的master 的二進位制日誌,將未同步到至新master的二進位制日誌匯出來,恢復到新master,儘可能恢復資料
#其它所有 slave 重新還原資料庫,指向新的master
[root@slave2 ~]#vim backup.sql
CHANGE MASTER TO
MASTER_HOST='10.0.0.18',
MASTER_USER='test',
MASTER_PASSWORD='000000',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=371;
MariaDB [hellodb]>stop slave;
MariaDB [hellodb]>reset slave all;
MariaDB [hellodb]>set sql_log_bin=off;
MariaDB [hellodb]>source backup.sql;
MariaDB [hellodb]>set sql_log_bin=on;
MariaDB [hellodb]>start slave;
三、通過 MHA 0.58 搭建一個資料庫叢集結構
實驗裝置
10.0.0.71 管理節點
10.0.0.81 主
10.0.0.82 從
10.0.0.83 從
1.在管理節點安裝這個兩個包
yum -y install 通過yum安裝可以補全依賴包
mha4mysql-manager 不支援CentOS8,只支援Centos7以下版本
mha4mysql-node
2.被管理節點安裝
mha4mysql-node 支援centOS 6.7.8
3.在管理節點建立配置檔案
mkdir /etc/mastermha/ 建立配置檔案 檔案裡定義了你要監控的叢集服務地址,伺服器資訊
vim /etc/mastermha/app1.cnf app1名稱可以隨便起 代表著你監控的一組伺服器 如果要同時監控多組mysql伺服器要在建個app2
[server default]
user=mhauser 這個賬號用於遠端連線mysql所有節點的使用者,有一定的管理員許可權
password=magedus 密碼
manager_workdir=/data/mastermha/app1/ 目錄自動生成,無需手動建立
manager_log=/data/mastermha/app1/manager.log 自動生成 日誌用來觀察他的執行情況
remote_workdir=/data/mastermha/app1/ 自動生成指定正確的資料夾 遠端主機的工作目錄
ssh_user=root 用於實現遠端ssh基於KEY的連線,訪問二進位制日誌
repl_user=repluser 主從複製的賬號 用於修改主從關係 主服務掛了會提升一個從做為主,
那麼另外一個節點必然會把自己的主節點指向這個新主 用的複製賬號,所以要寫在配置檔案裡
repl_password=magedu
ping_interval=1 健康性檢查時間間隔,怎麼知道這個伺服器是否掛了,一秒鐘查一次
master_ip_failover_script=/usr/local/bin/master_ip_failover #切換VIP的perl指令碼
report_script=/usr/local/bin/sendmail.sh 當執行報警指令碼
check_repl_delay=0 #預設如果slave中從庫落後主庫reaylog超過100M 主庫不會選擇這個從庫為新的master,因為這個從庫進行恢復需要很長的時間.通過這個引數,mha觸發主從切換的時候會忽略複製的延時,通過check_repl_delay=0這個引數,mha觸發主從切換時會忽略複製的延時,對於設定candidate_master=1的從庫非常有用,這樣確保這個從庫一定能成為最新的master
master_binlog_dir=/data/mysql/ 指定二進位制日誌存放的目錄,mha4mysq1-manager-0.58必須指定,之前版本不需要指定
[server1] 伺服器地址
hostname=192.168.8.17
candidate_master=1
[server2]
hostname=192.168.8.27
candidate_master=1 設定誰優先成為主節點
設定為優先候選master,即使不時叢集中事件最新的slave,也會優先當master
[server3]
hostname=192.168.8.37
4.實現所有節點相互之間ssh key驗證
基於KEY 驗證
先生成公鑰私鑰對
ssh-keygen
把自己的鑰匙拷進去 拷到自己的電腦上登陸就不用驗證了
相當於自己連自己
ssh-copy-id 127.0.0.1
再把驗證拷貝到所有主機上
rsync -av .ssh 10.0.0.81:/root/
5.主
vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server_id=81
log_bin
skip_name_resolve=1 防止反向解析
啟動資料庫
systemctl start mariadb
檢視二進位制日誌檔案位置
MariaDB [(none)]> show master logs
-> ;
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin.000001 | 330 |
+--------------------+-----------+
1 row in set (0.001 sec)
建立有複製許可權的賬號
使用者名稱和密碼要一致
grant replication slave on *.* to repluser@'10.0.0.%' identified by '123456';
建立一個所有人的賬號,可以連線到所有的從節點
使用者和密碼要和管理點一致
grant all on *.* to mhauser@'10.0.0.%' identified by '123456';
6.從
vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server_id=82
log-bin 啟動二進位制日誌 如果主掛了,如果要提升他當主的話,必須開啟二進位制日誌
read_only 是個變數,支援set 命令動態修改
relay_log_purge=0
skip_name_resolve=1 禁止反向解析
sysetmctl start mariadb
7.從
vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server_id=82
log-bin 啟動二進位制日誌 如果主掛了,如果要提升他當主的話,必須開啟二進位制日誌
read_only 是個變數,支援set 命令動態修改
relay_log_purge=0
skip_name_resolve=1 禁止反向解析
systemctl start maridb
8.使用有複製許可權的使用者賬號連線主伺服器,並啟動複製執行緒
幫助文件
help change master to
CHANGE MASTER TO
MASTER_HOST='10.0.0.81', 指定主伺服器ip地址 ,
MASTER_USER='repluser', 複製時候賬號的名稱
MASTER_PASSWORD='123456', 密碼
MASTER_PORT=3306, 埠號
MASTER_LOG_FILE='mariadb-bin.000001 ', 二進位制位置
MASTER_LOG_POS=234, 節點位置
MASTER_CONNECT_RETRY=10; 可以不寫 重試時間10秒
9.啟動執行緒
start slave;
10. 檢查mha環境
masterha_check_ssh --conf=/etc/mastermha/one.cnf
masterha_check_repl --conf=/etc/mastermha/one.cnf
masterha_check_status--conf=/etc/mastermha/one.cnf
四、實戰案例:Percona XtraDB Cluster(PXC 5.7)
實驗環境
10.0.0.7
10.0.0.17
10.0.0.27
10.0.0.37
OS 版本目前不支援CentOS 8
[root@pxc1 ~]#cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
關閉防火牆和SELinux,保證時間同步
注意:如果已經安裝MySQL,必須解除安裝
2 安裝 Percona XtraDB Cluster 5.7
#此處使用清華大學yum源,官方源太慢了
[root@pxc1 ~]#vim /etc/yum.repos.d/pxc.repo
[percona]
name=percona_repo
baseurl =
https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
enabled = 1
gpgcheck = 0
[root@pxc1 ~]#scp /etc/yum.repos.d/pxc.repo 10.0.0.17:/etc/yum.repos.d
[root@pxc1 ~]#scp /etc/yum.repos.d/pxc.repo 10.0.0.27:/etc/yum.repos.d
#在三個節點都安裝好PXC 5.7
[root@pxc1 ~]#yum install Percona-XtraDB-Cluster-57 -y
[root@pxc2 ~]#yum install Percona-XtraDB-Cluster-57 -y
[root@pxc3 ~]#yum install Percona-XtraDB-Cluster-57 -y
3 在各個節點上分別配置mysql及叢集配置檔案
/etc/my.cnf為主配置檔案,當前版本中,其餘的配置檔案都放在/etc/percona-xtradb-cluster.conf.d目
錄裡,包括mysqld.cnf,mysqld_safe.cnf,wsrep.cnf 三個檔案
#主配置檔案不需要修改
[root@pxc1 ~]#cat /etc/my.cnf
# The Percona XtraDB Cluster 5.7 configuration file.
...省略...
!includedir /etc/my.cnf.d/
!includedir /etc/percona-xtradb-cluster.conf.d/
[root@pxc1 ~]#ls /etc/my.cnf.d/
[root@pxc1 ~]#ls /etc/percona-xtradb-cluster.conf.d/
mysqld.cnf mysqld_safe.cnf wsrep.cnf
#下面配置檔案不需要修改
[root@pxc1 ~]#cat /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
...省略...
[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
server-id=1 #建議各個節點不同
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log-bin #建議啟用,非必須項
log_slave_updates
expire_logs_days=7
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0 #下面配置檔案不需要修改
[root@pxc1 ~]#cat /etc/percona-xtradb-cluster.conf.d/mysqld_safe.cnf
...省略...
[mysqld_safe]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/lib/mysql/mysql.sock
nice = 0
#PXC的配置檔案必須修改
[root@pxc1 ~]#vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[root@pxc1 ~]#grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://10.0.0.7,10.0.0.17,10.0.0.27 #三個節點的IP
binlog_format=ROW
default_storage_engine=InnoDB
wsrep_slave_threads= 8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2
wsrep_node_address=10.0.0.7 #各個節點,指定自已的IP
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-1 #各個節點,指定自已節點名稱
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:s3cretPass" #取消本行註釋
[root@pxc2 ~]#grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://10.0.0.7,10.0.0.17,10.0.0.27
binlog_format=ROW
default_storage_engine=InnoDB
wsrep_slave_threads= 8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2 #各個節點,指定自已的IP
wsrep_node_address=10.0.0.17
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-2 #各個節點,指定自已節點名稱
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:s3cretPass" #取消本行註釋
[root@pxc3 ~]#grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://10.0.0.7,10.0.0.17,10.0.0.27
binlog_format=ROW
default_storage_engine=InnoDB
wsrep_slave_threads= 8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2
wsrep_node_address=10.0.0.27 #各個節點,指定自已的IP
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-3 #各個節點,指定自已的IP
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:s3cretPass" #取消本行註釋
五、通過 ansible 部署二進位制 mysql
實驗裝置
10.0.0.81 ansible
10.0.0.82 mysql
#配置epel源
#安裝ansible
[root@ansible ~]# yum -y install ansible
[root@ansible ~]# vim /etc/ansible/hosts
[dbsrvs]
10.0.0.82
#準備二進位制檔案,配置檔案
[root@ansible ~]# ll /data/ansible/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
-rw-r--r-- 1 root root 485074552 Oct 17 12:06 /data/ansible/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
[root@ansible ~]# cat /data/ansible/my.cnf
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
log_bin=/data/mysqlbinlog/mysql-bin
[client]
socket=/data/mysql/mysql.sock
#基於key驗證
[root@ansible ~]# ssh-keygen
[root@ansible ~]# scp -r .ssh 10.0.0.82:/root/
#安裝mysql相關模組檔案
[root@ansible ~]# ansible dbsrvs -m yum -a 'name=libaio,numactl-libs state=present'
#建立組和使用者
[root@ansible ~]# ansible dbsrvs -m group -a 'name=mysql gid=66 system=yes'
10.0.0.82 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"gid": 66,
"name": "mysql",
"state": "present",
"system": true
}
[root@ansible ~]# ansible dbsrvs -m user -a 'name=mysql uid=66 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql'
10.0.0.82 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"comment": "",
"create_home": false,
"group": 66,
"home": "/data/mysql",
"name": "mysql",
"shell": "/sbin/nologin",
"state": "present",
"system": true,
"uid": 66
}
#二進位制包解壓到mysql主機上
[root@ansible ~]# ansible dbsrvs -m unarchive -a 'src=/data/ansible/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz dest=/usr/local owner=root group=root'
#建立軟連線
[root@ansible ~]# ansible dbsrvs -m shell -a 'echo "PATH=/usr/local/mysql/bin:\$PATH" > /etc/profile.d/mysql.sh'
[root@ansible ~]# ansible dbsrvs -m shell -a '. /etc/profile.d/mysql.sh'
#拷貝配置檔案到mysql機器上
[root@ansible ~]# ansible dbsrvs -m copy -a 'src=/data/ansible/my.cnf dest=/etc/my.cnf'
#生成資料庫檔案
[root@ansible ~]# ansible dbsrvs -m shell -a 'mysqld --initialize --user=mysql --datadir=/data/mysql'
#啟動指令碼複製到系統檔案裡
[root@ansible ~]# ansible dbsrvs -m shell -a 'cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld'
#使用shell指令碼更改密碼
[root@ansible ~]# ansible dbsrvs -m script -a dbsrvs.sh
[root@ansible ~]# cat dbsrvs.sh
passwd=`awk '/temporary password/{print $NF}' /data/mysql/mysql.log`
mysqladmin -uroot -p"${passwd}" password "123456"
相關文章
- 部落格作業第五週-mysql主從複製、高可用性、運維自動化ansibleMySql運維
- 第五組【團隊作業】第六週作業
- 第五組【團隊作業】第三週作業1
- kolla-ansible安裝openstack(rocky)企業級高可用叢集
- 20242822《Linux核心原理與分析》第五週作業Linux
- 第五週-雲端計算運維作業運維
- 第五組【團隊作業】第二週使用者調研作業1
- 高可用 proxysql + mysql MGRMySql
- mysql高可用之keepalivedMySql
- Mysql 5.7 MHA 高可用MySql
- 高階語言程式設計第五次作業程式設計
- Mysql高可用架構方案MySql架構
- mysql高可用衡搭建(Keepalived)MySql
- 第五次作業
- 第五章作業
- MySQL高可用之GC-Galera Cluster for MySQLMySqlGC
- 基於 MHA 高可用的 MySQLMySql
- keepalived+MySQL實現高可用MySql
- MySQL資料庫高可用方案MySql資料庫
- mysql高可用架構MHA搭建MySql架構
- MySQL主主模式+Keepalived高可用MySql模式
- MySQL怎麼保證高可用MySql
- mysql高可用叢集之MMMMySql
- MySQL高可用架構對比MySql架構
- 高階語言程式設計第五次個人作業程式設計
- MySQL高可用架構:mysql+keepalived實現MySql架構
- MySQL高可用方案之DRBD+MySQL+RHCS(下)MySql
- MySQL高可用方案之DRBD+MySQL+RHCS(上)MySql
- MySQL 高可用性—keepalived+mysql雙主MySql
- MySQL高可用架構設計分析MySql架構
- MySQL5.7高可用版釋出MySql
- ansible高階應用ansible-vault
- 第五週週三
- 第五週週四
- MHA+MySQL主從配置實現MySQL高可用MySql
- C++第五次作業C++
- 第五週
- 第五組【團隊作業】第四周作業2