下載mysql安裝包:
https://dev.mysql.com/downloads/mysql/5.7.html#downloads
準備環境
1、準備三臺服務器并設置hosts
192.168.236.143 mysql1
192.168.236.144 mysql2
192.168.236.145 mysql3
2、設置免密登陸
#生成秘鑰
ssh-keygen -t rsa
#一直按Enter即可
#將秘鑰分別拷貝到另外兩個機器
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.236.144
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.236.145
#測試
ssh 192.168.236.143
3、關閉防火墻
#關閉防火墻
systemctl stop firewalld
#禁用防火墻
systemctl disable firewalld
4、關閉selinux
vi /etc/selinux/config
#設置
SELINUX=disabled
重啟服務器
安裝mysql
#解壓
[root@mysql1 data]# tar -xvf mysql-cluster-community-8.0.34-1.el7.x86_64.rpm-bundle.tar
mysql-cluster-community-client-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-client-plugins-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-common-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-data-node-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-debuginfo-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-devel-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-embedded-compat-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-icu-data-files-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-java-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-libs-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-libs-compat-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-management-server-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-ndbclient-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-ndbclient-devel-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-nodejs-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-server-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-server-debug-8.0.34-1.el7.x86_64.rpm
mysql-cluster-community-test-8.0.34-1.el7.x86_64.rpm
1、依次安裝
rpm -ivh mysql-cluster-community-common-8.0.34-1.el7.x86_64.rpm --nodeps --forcerpm -ivh mysql-cluster-community-libs-8.0.34-1.el7.x86_64.rpm --nodeps --forcerpm -ivh mysql-cluster-community-client-8.0.34-1.el7.x86_64.rpm --nodeps --forcerpm -ivh mysql-cluster-community-server-8.0.34-1.el7.x86_64.rpm --nodeps --force
2、配置mysql
#初始化mysql
mysqld --initialize
#給mysql分組中的mysql用戶賦權限
chown mysql:mysql /var/lib/mysql -R
#啟動mysql服務器
systemctl start mysqld.service
#設置開機啟動mysql
systemctl enable mysqld
3、查看mysql初始化的密碼
[root@mysql1 data]# cat /var/log/mysqld.log | grep password
2023-08-09T05:11:28.204159Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: )c=&)ea<<3,O
密碼即是最后面的)c=&)ea<<3,O
4、修改數據庫密碼
#進入mysql
mysql -u root -p
#然后輸入密碼,即可進入mysql
#修改密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234';
#退出mysql
exit;
#創建賬號名和密碼
create user 'admin'@'%' identified with mysql_native_password by 'admin';
#授權遠程鏈接
grant all privileges on *.* to 'admin'@'%' with grant option;
#刷新權限
flush privileges;
5、mysql服務命令
#查看mysql版本
mysql -V
#啟動mysql服務
systemctl start mysqld.service
#停止mysql服務
systemctl stop mysqld.service
#重啟mysql服務
systemctl restart mysqld.service
#查看mysql服務當前狀態
systemctl status mysqld.service
#設置mysql服務開機自啟動
systemctl enable mysqld.service
#停止mysql服務開機自啟動
systemctl disable mysqld.service
安裝mysql shell
下載:https://downloads.mysql.com/archives/shell/
#安裝
rpm -ivh mysql-shell-8.0.33-1.el7.x86_64.rpm
集群配置
1、修改配置文件
vi /etc/my.cnf
#mysql1配置文件增加
server-id=1
gtid_mode=on
enforce_gtid_consistency=on
binlog_checksum=none
transaction_write_set_extraction = XXHASH64
loose-group_replication_recovery_use_ssl= ON
loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446'
loose-group_replication_start_on_boot = OFFloose-group_replication_local_address = 'mysql1:24901'
loose-group_replication_group_seeds = 'mysql1:24901,mysql2:24902,mysql3:24903'
loose-group_replication_bootstrap_group = OFF#mysql2配置文件增加
server-id=2
gtid_mode=on
enforce_gtid_consistency=on
binlog_checksum=none
transaction_write_set_extraction = XXHASH64
loose-group_replication_recovery_use_ssl= ON
loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446'
loose-group_replication_start_on_boot = OFFloose-group_replication_local_address = 'mysql2:24901'
loose-group_replication_group_seeds = 'mysql1:24901,mysql2:24902,mysql3:24903'
loose-group_replication_bootstrap_group = OFF#mysql3配置文件增加
server-id=3
gtid_mode=on
enforce_gtid_consistency=on
binlog_checksum=none
transaction_write_set_extraction = XXHASH64
loose-group_replication_recovery_use_ssl= ON
loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446'
loose-group_replication_start_on_boot = OFFloose-group_replication_local_address = 'mysql3:24901'
loose-group_replication_group_seeds = 'mysql1:24901,mysql2:24902,mysql3:24903'
loose-group_replication_bootstrap_group = OFF
2、啟動mysql并使用shell連接
#啟動mysql
systemctl start mysqld.service
#在每個服務器上都是用shell連接mysql
mysqlsh admin@localhost:3306
#每個服務器都執行
dba.configureInstance();
dba.checkInstanceConfiguration("admin@localhost:3306");
3、進入mysql安裝組復制插件
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
4、進入mysql shell創建集群(注意只在其中一臺服務器上執行即可)
MySQL localhost:3306 ssl JS > var cluster = dba.createCluster('myCluster');
5、添加節點
MySQL localhost:3306 ssl JS > cluster.addInstance('admin@mysql1:3306');#創建節點即添加,可以不執行MySQL localhost:3306 ssl JS > cluster.addInstance('admin@mysql2:3306');MySQL localhost:3306 ssl JS > cluster.addInstance('admin@mysql3:3306');
6、查看當前節點狀態
MySQL localhost:3306 ssl JS > cluster.status()
{"clusterName": "myCluster", "defaultReplicaSet": {"name": "default", "primary": "mysql1:3306", "ssl": "REQUIRED", "status": "OK", "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", "topology": {"mysql1:3306": {"address": "mysql1:3306", "memberRole": "PRIMARY", "mode": "R/W", "readReplicas": {}, "replicationLag": "applier_queue_applied", "role": "HA", "status": "ONLINE", "version": "8.0.34"}, "mysql2:3306": {"address": "mysql2:3306", "memberRole": "SECONDARY", "mode": "R/O", "readReplicas": {}, "replicationLag": "applier_queue_applied", "role": "HA", "status": "ONLINE", "version": "8.0.34"}, "mysql3:3306": {"address": "mysql3:3306", "memberRole": "SECONDARY", "mode": "R/O", "readReplicas": {}, "replicationLag": "applier_queue_applied", "role": "HA", "status": "ONLINE", "version": "8.0.34"}}, "topologyMode": "Single-Primary"}, "groupInformationSourceMember": "mysql1:3306"
}
7、查看節點信息,任意節點即可
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 2ef5a678-3673-11ee-b7fb-000c29d4f7b1 | mysql2 | 3306 | ONLINE | SECONDARY | 8.0.34 | MySQL |
| group_replication_applier | 2efc06f0-3673-11ee-8284-000c29b47d6f | mysql1 | 3306 | ONLINE | PRIMARY | 8.0.34 | MySQL |
| group_replication_applier | 2f144a98-3673-11ee-b663-000c2973412e | mysql3 | 3306 | ONLINE | SECONDARY | 8.0.34 | MySQL |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)
安裝mysql router
下載地址:https://downloads.mysql.com/archives/router/
# 安裝
rpm -ivh mysql-router-community-8.0.33-1.el7.x86_64.rpm
#查看mysqlrouter版本
mysqlrouter --version
配置router
vim /etc/mysqlrouter/mysqlrouter.conf
#增加如下配置
[routing:secondary]
bind_address = 0.0.0.0
bind_port = 7001
destinations = mysql1:3306,mysql2:3306,mysql3:3306
routing_strategy = round-robin[routing:primary]
bind_address = 0.0.0.0
bind_port = 7002
destinations = mysql1:3306,mysql2:3306,mysql3:3306
routing_strategy = first-available
啟動mysql router
mysqlrouter -c /etc/mysqlrouter/mysqlrouter.conf &
測試連接情況
#連接mysql
mysql -h 192.168.236.145 -P 7001 -uadmin -padmin
mysql -h 192.168.236.145 -P 7002 -uadmin -padmin
#執行命令獲取Mysql中配置的server_id,每次執行返回的server_id不一樣,因為使用輪詢策略
mysql -h192.168.236.145 -uadmin -padmin -e "select @@server_id" -P 7001
#執行命令獲取Mysql中配置的server_id,每次執行返回的server_id都一樣
mysql -h192.168.236.145 -uadmin -padmin -e "select @@server_id" -P 7002
查看監聽狀態
[root@mysql3 data]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 ::1:7001 :::* LISTEN 13179/mysqlrouter
tcp6 0 0 ::1:7002 :::* LISTEN 13179/mysqlrouter
測試
使用工具連接測試,關掉其中一臺數據庫仍然可以連接
通過mysql命令查詢,primary已經切換了
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 2ef5a678-3673-11ee-b7fb-000c29d4f7b1 | mysql2 | 3306 | ONLINE | PRIMARY | 8.0.34 | MySQL |
| group_replication_applier | 2efc06f0-3673-11ee-8284-000c29b47d6f | mysql1 | 3306 | ONLINE | SECONDARY | 8.0.34 | MySQL |
| group_replication_applier | 2f144a98-3673-11ee-b663-000c2973412e | mysql3 | 3306 | ONLINE | SECONDARY | 8.0.34 | MySQL |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.05 sec)