丐版pxc叢集

赚窝囊费的小苏發表於2024-04-09

同步

systemctl stop firewalld && systemctl disable firewalld
systemctl stop NetworkManager && systemctl disable NetworkManager

setenforce 0
sed -i s/SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config

swapoff -a
sed -ri 's/.swap./#&/' /etc/fstab

yum install chrony -y
systemctl enable chronyd --now
chronyc sources

ip修改(這裡改成核彈傳送密碼)
10.1.161.28
10.1.161.26(原本是25,被人佔了ip)
10.1.161.6
主機名設定

sudo hostnamectl set-hostname node01
sudo hostnamectl set-hostname node02
sudo hostnamectl set-hostname node03
全部
bash

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt
grep initrd16 /boot/grub2/grub.cfg
grub2-set-default 0
reboot
uname -a

映象拉我們的私有庫:我們的倉庫地址():
https://10.1.161.110:5000/
私有庫使用步驟:
-----------------------------可省略:這個弄起來太麻煩,一般情況下,都會用k8s整一個外掛,用k8s喊我就行,一般情況就下個映象包load一下就好,大多數映象都是可以直接拉下來的。

或者有時間也可以去b站自己學k8s...,找時間最新的。docker和k8s不走外部代理,所以代理是沒有用的。解決方法就是用k8s的那個外掛

docker pull percona/percona-xtradb-cluster:5.7.27
docker pull swarm

docker tag percona/percona-xtradb-cluster:5.7.27 10.1.161.110:5000/percona/percona-xtradb-cluster:5.7.27
docker tag swarm:latest 10.1.161.110:5000/percona/swarm:latest

docker push 10.1.161.110:5000/percona/percona-xtradb-cluster:5.7.27
docker push 10.1.161.110:5000/percona/swarm:latest
---------------------------------------可省略--------------

curl -fsSL https://get.docker.com | bash

yum -y install docker-ce
sudo systemctl start docker
sudo systemctl enable docker

docker pull percona/percona-xtradb-cluster:5.7.21

pxc無法對映目錄,只能建立資料卷,分別建立mysql資料卷和配置卷

docker volume create mysql-data
docker volume create mysql-conf
docker run -d -v mysql-data:/var/lib/mysql --restart always -e TZ=Asia/Shanghai
-e CLUSTER_NAME=PXC -v mysql-conf:/etc/mysql
-e MYSQL_ROOT_PASSWORD=123456 -e EXTRABACKUP_PASSWROD=123456
--privileged --name=mysql-node1 --net=host percona/percona-xtradb-cluster:5.7.21

navicat看下能不能連,能連說明node1安裝成功
(附加:
sql_model的模式如果要更改的話:
查一下:docker inspect mysql-conf
修改my.cnf
然後docker restart mysql-node1
)
跟第一個差不多:

pxc無法對映目錄,只能建立資料卷,分別建立mysql資料卷和配置卷

docker volume create mysql-data

docker volume create mysql-conf

docker run -idt -v mysql-data:/var/lib/mysql --restart always -e TZ=Asia/Shanghai
-e CLUSTER_NAME=PXC -v mysql-conf:/etc/mysql -e CLUSTER_JOIN=10.1.161.28
-e MYSQL_ROOT_PASSWORD=123456 -e EXTRABACKUP_PASSWROD=123456
--privileged --name=mysql-node2 --net=host percona/percona-xtradb-cluster:5.7.21

然後重複第一個節點的步驟,修改my.cnf然後重啟
node2也好了

測試一下:
node1新建一個使用者:
CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
node2使用者表看一下有沒有這個使用者

可選:
繼續負載均衡:

拉取haprox映象

docker pull haproxy

新建目錄

mkdir -p /data/haproxy

新建配置檔案

vi /data/haproxy/haproxy.cfg

haproxy.cfg配置:注意改一下server,server就是兩個資料庫的連線

global
#工作目錄,這邊要和建立容器指定的目錄對應
# chroot /usr/local/etc/haproxy
#日誌檔案
log 127.0.0.1 local5 info
#守護程序執行
daemon
defaults
log global
mode http
#日誌格式
option httplog
#日誌中不記錄負載均衡的心跳檢測記錄
option dontlognull
#連線超時(毫秒)
timeout connect 5000
#客戶端超時(毫秒)
timeout client 50000
#伺服器超時(毫秒)
timeout server 50000
#監控介面
listen admin_stats
#監控介面的訪問的IP和埠
bind 0.0.0.0:8888
#訪問協議
mode http
#URI相對地址
stats uri /dbs_monitor
#統計報告格式
stats realm Global\ statistics
#登陸帳戶資訊
stats auth admin:admin
#資料庫負載均衡
listen proxy-mysql
#訪問的IP和埠,haproxy開發的埠為3306
#假如有人訪問haproxy的3306埠,則將請求轉發給下面的資料庫例項
bind 0.0.0.0:3306
#網路協議
mode tcp
#負載均衡演算法(輪詢演算法)
#輪詢演算法:roundrobin
#權重演算法:static-rr
#最少連線演算法:leastconn
#請求源IP演算法:source
balance roundrobin
#日誌格式
option tcplog
#在MySQL中建立一個沒有許可權的haproxy使用者,密碼為空。
#Haproxy使用這個賬戶對MySQL資料庫心跳檢測
option mysql-check user haproxy
server MySQL_1 10.1.161.28:3306 check weight 1 maxconn 2000
server MySQL_2 10.1.161.26:3306 check weight 1 maxconn 2000
#使用keepalive檢測死鏈
option tcpka

啟動一下:

在主節點建立haproxy容器

docker run -d -p 8888:8888 -p 3307:3306 -v /data/haproxy:/usr/local/etc/haproxy
--name haproxy --privileged haproxy

測一下有沒有通:
http://10.1.161.28:8888/dbs_monitor
admin admin

連一下:
10.1.161.28:3306

root 123456

新建一個資料庫瞅瞅,發現都同步了,至此,丐版pxc叢集完成。

相關文章