一、数据库galera集群
使用OpenStack私有云平台,创建3台系统为centos7.9的云主机命名为node-1、node-2、node-3,对三台云主机进行安装高可用数据库集群(MariaDB_Galera_cluster,数据库密码设置为123456)的操作(使用mariadb-repo.tar.gz作为yum源安装数据库服务)。完成后提交node-1节点的用户名、密码和IP地址到答题框。
1.配置YUM源并安装软件包
# 1.配置主机映射 [root@node-1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.24.20.149 node-1 10.24.20.162 node-2 10.24.20.109 node-3 # 拷贝映射 [root@node-1 ~]# scp /etc/hosts node-3:/etc/ # 2.下载软件包并配置YUM源 安装数据库及相关软件包 (所有节点执行) [root@node-1 ~]# curl -O http://172.128.10.250/mariadb-repo.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 106M 100 106M 0 0 433M 0 --:--:-- --:--:-- --:--:-- 436M # 2.1删除联网YUM源 [root@node-1 ~]# rm -f /etc/yum.repos.d/* # 2.2解压软件包 [root@node-1 ~]# tar xf mariadb-repo.tar.gz [root@node-1 ~]# vi /etc/yum.repos.d/http.repo [root@node-1 ~]# cat /etc/yum.repos.d/http.repo [centos] baseurl=http://172.128.10.250/centos7.9/ gpgcheck=0 [db] baseurl=file:///root/mariadb-repo gpgcheck=0 # 2.3检查配置是否正确 [root@node-1 ~]# yum repolist # 2.4安装所有软件包 [root@node-1 ~]# yum install -y mariadb-server galera rsync
2.初始化数据库
注意:galera集群是多主集群,如果需要重启galera集群需要保留一台最后重启,否则所有同时重启将会导致集群挂掉
# 1.启动数据库(所有节点执行) [root@node-1 ~]# systemctl start mariadb [root@node-1 ~]# systemctl enable mariadb Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service. Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service. Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
3.配置高可用集群
# 1.node-1执行 [root@node-1 ~]# vi /etc/my.cnf.d/server.cnf # 2.修改配置如下 [galera] wsrep_on=ON wsrep_provider="/usr/lib64/galera/libgalera_smm.so" wsrep_cluster_address="gcomm://node-1,node-2,node-3" binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 wsrep_slave_threads=1 innodb_flush_log_at_trx_commit=0 # 3.拷贝配置文件到各个节点 [root@node-1 ~]# scp /etc/my.cnf.d/server.cnf node-2:/etc/my.cnf.d/ [root@node-1 ~]# scp /etc/my.cnf.d/server.cnf node-3:/etc/my.cnf.d/
4.启动高可用集群
# 1.所有节点关闭selinux (非常重要,如果不关闭无法启动galera集群) [root@node-1 ~]# setenforce 0 # 2.node-1节点启动galera集群 [root@node-1 ~]# systemctl stop mariadb [root@node-1 ~]# galera_new_cluster # 2.1检查是否启动集群 [root@node-1 ~]# netstat -ntpl | grep mysql tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 8317/mysqld tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 8317/mysqld # 3.其余节点重启数据库服务即可加入集群 [root@node-2 ~]# systemctl restart mariadb [root@node-3 ~]# systemctl restart mariadb
4.1挂掉的高可用集群恢复(可选)
# 1.删除掉galera已经初始化完成的记录文件 (初始化节点执行) [root@node-1 mysql]# rm -f /var/lib/mysql/grastate.dat # 2.重新初始化 [root@node-1 mysql]# galera_new_cluster
5.设置所有节点root密码
# 1.在node-1节点设置整个集群的密码 [root@node-1 ~]# mysqladmin -uroot password '123456' # 2.使用命令检查集群 # 查询集群节点数量 3为正常 [root@node-1 ~]# mysql -uroot -p123456 -e " show status like '%wsrep%' " | grep cluster wsrep_cluster_size 3 # 查询集群是否启动 [root@node-1 ~]# mysql -uroot -p123456 -e " show variables like '%wsrep%' " | grep -i on wsrep_on ON # 至此galera集群已经搭建完毕
二、高可用数据库负载均衡
使用赛项提供的OpenStack私有云平台,申请三台CentOS7.9系统的云主机,分别命令为node1、node2、node3,(使用提供的软件包mariadb-repo.tar.gz),在这三个节点上安装数据库服务,数据库密码设置为123456。将这三个节点配置为数据库高可用集群即MariaDB_Galera_Cluster。配置完高可用服务后,安装haproxy负载均衡服务。配置node1节点为负载均衡的窗口,配置负载均衡为轮询算法;HA服务监听的端口为node1节点的3307端口;配置访问三个节点的权重依次为1,2,4。配置完成后提交node1节点的用户名、密码和IP地址到答题框。
1.安装软件包
# 由于上一题已经将galera搭建完成,本次只需要直接安装即可 [root@node-1 ~]# yum install -y haproxy [root@node-2 ~]# yum install -y haproxy [root@node-3 ~]# yum install -y haproxy
2.修改配置
# node-1节点 [root@node-1 ~]# cat /etc/haproxy/haproxy.cfg # 1.修改内容如下: defaults maxconn 4000 # 与global中的maxconn对应 # 2.添加如下配置: listen mysql balance roundrobin # 采用轮训算法 bind 0.0.0.0:3307 # 绑定3307 mode tcp option tcplog option tcpka server node-1 10.24.20.149:3306 check weight 1 # 设置后端服务 设置比重 1:2:4 server node-2 10.24.20.162:3306 check weight 2 server node-3 10.24.20.109:3306 check weight 4
3.启动服务
# 1.启动服务 [root@node-1 ~]# systemctl start haproxy # 2.数据库授权 [root@node-1 mysql]# mysql -uroot -p123456 -e "grant all on *.* to root@'%' identified by '123456';flush privileges;" # 3.检查一下是否成功 (能够登陆进数据库即为成功) [root@node-1 mysql]# mysql -uroot -p123456 -P 3307 -h 10.24.20.149
3.1高级检查
# 1.给各个节点配置server_id方便我们能够查询到具体访问了哪个机器 # 1.1所有节点执行 [root@node-1 mysql]# vi /etc/my.cnf [mysqld] server_id = 1 # 唯一的server_id 各个节点不同 # 2.各个节点依次重启 (不可同时重启) [root@node-1 ~]# systemctl restart mariadb [root@node-2 ~]# systemctl restart mariadb [root@node-3 ~]# systemctl restart mariadb # 3.检查负载均衡策略 [root@node-1 mysql]# mysql -uroot -p123456 -P 3307 -h 10.24.20.149 -e " show variables like '%server_id%' ;" +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 3 | +---------------+-------+ [root@node-1 mysql]# mysql -uroot -p123456 -P 3307 -h 10.24.20.149 -e " show variables like '%server_id%' ;" +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 2 | +---------------+-------+ [root@node-1 mysql]# mysql -uroot -p123456 -P 3307 -h 10.24.20.149 -e " show variables like '%server_id%' ;" +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 3 | +---------------+-------+ [root@node-1 mysql]# mysql -uroot -p123456 -P 3307 -h 10.24.20.149 -e " show variables like '%server_id%' ;" +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 1 | +---------------+-------+
##