MySQL高可用之MGR+Consul架構部署(mysql mgr配置)

      網友投稿 932 2025-04-07

      一、MGR+Consul架構簡介


      二、搭建MGR

      2.1、申請3臺MGR機器

      2.2、3臺主機安裝Mysql環境

      2.3、修改Mysql參數

      2.4、重啟MySQL環境

      2.5、安裝MGR插件(所有節點執行)

      2.6、設置復制賬號

      2.7、啟動MGR,在主庫(192.168.68.60)上執行

      2.8、其他節點加入MGR,在從庫(192.168.68.61,192.168.68.62)上執行

      2.9、測試同步

      一、MGR+Consul架構簡介

      二、搭建MGR

      2.1、申請3臺MGR機器

      2.2、3臺主機安裝MySQL環境

      2.3、修改MySQL參數

      2.4、重啟MySQL環境

      2.5、安裝MGR插件(所有節點執行)

      2.6、設置復制賬號

      2.7、啟動MGR,在主庫(192.168.68.60)上執行

      2.8、其他節點加入MGR,在從庫(192.168.68.61,192.168.68.62)上執行

      2.9、測試同步

      三、搭建Consul Server集群

      3.1、申請3臺Consul Server主機

      3.2、安裝Consul Server

      3.3、web訪問

      四、在MySQL節點上安裝Consul Client

      4.1、安裝Consul Client

      4.2、在Consul client的3個節點上編寫檢測primay腳本和檢測slave腳本

      4.3、service配置

      4.4、service測試

      五、配置DNS解析域名

      5.1、使用dnsmasq來配置DNS解析

      一、MGR+Consul架構簡介

      基于目前存在很多MySQL數據庫單點故障,傳統的MHA,PXC等方案用VIP或者DNS切換的方式可以實現、基于數據庫的數據強一致性考慮,采用MGR集群,采用consul服務注冊發現實現應用端通過動態DNS 訪問MGR集群,實現數據庫高可用,自動化切換的方案。

      有關MGR之前發布過幾篇文章,連接如下:

      【DB寶18】在Docker中安裝使用MySQL高可用之MGR

      【DB寶35】使用MySQL 8.0 克隆(clone)插件快速添加MGR節點

      本次環境一共包括7臺機器,其中3臺做MySQL的MGR數據節點(其上也需要安裝Consul,作為Consul Client),單主模式,還有3臺做Consul Server集群,實現Consul的高可用,剩下一臺做DNS服務器,用來解析MGR節點域名,規劃如下表所示:

      二、搭建MGR

      2.1、申請3臺MGR機器

      -- 拉取鏡像 docker pull lhrbest/lhrcentos76:8.0 -- 創建專用網絡 docker network create --subnet=192.168.68.0/16 mhalhr docker network inspect mhalhr -- 生成3臺CentOS的環境 docker rm -f mysql8022mgr33060 mysql8022mgr33061 mysql8022mgr33062 docker run -d --name mysql8022mgr33060 -h lhrmgr60 \ --network mhalhr --ip 192.168.68.60 --privileged=true \ -p 33060:3306 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ lhrbest/lhrcentos76:8.0 init docker run -d --name mysql8022mgr33061 -h lhrmgr61 \ --network mhalhr --ip 192.168.68.61 --privileged=true \ -p 33061:3306 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ lhrbest/lhrcentos76:8.0 init docker run -d --name mysql8022mgr33062 -h lhrmgr62 \ --network mhalhr --ip 192.168.68.62 --privileged=true \ -p 33062:3306 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ lhrbest/lhrcentos76:8.0 init -- 拷貝MySQL安裝文件到MySQL容器內 docker cp mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar mysql8022mgr33060:/ docker cp mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar mysql8022mgr33061:/ docker cp mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar mysql8022mgr33062:/ docker network connect bridge mysql8022mgr33060 docker network connect bridge mysql8022mgr33061 docker network connect bridge mysql8022mgr33062 docker restart mysql8022mgr33060 mysql8022mgr33061 mysql8022mgr33062

      2.2、3臺主機安裝MySQL環境

      docker exec -it mysql8022mgr33060 bash docker exec -it mysql8022mgr33061 bash docker exec -it mysql8022mgr33062 bash tar -xvf mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar yum localinstall -y mysql-community-*.rpm --去掉密碼驗證策略 mv /usr/lib64/mysql/plugin/validate_password.so /usr/lib64/mysql/plugin/validate_password.so_bk mv /usr/lib64/mysql/plugin/component_validate_password.so /usr/lib64/mysql/plugin/component_validate_password.so_bk -- 啟動mysql systemctl start mysqld systemctl status mysqld -- 修改密碼 grep 'temporary password' /var/log/mysqld.log mysql -uroot -p alter user root@'localhost' identified with mysql_native_password by 'lhr'; grant all on *.* to root@'localhost' with grant option; create user root@'%' identified with mysql_native_password by 'lhr'; grant all on *.* to root@'%' with grant option; flush privileges; select user,host,grant_priv,super_priv,authentication_string,password_last_changed from mysql.user;

      2.3、修改MySQL參數

      -- 節點1 cat > /etc/my.cnf <<"EOF" [mysqld] user=mysql port=3306 character_set_server=utf8mb4 secure_file_priv= server-id = 802233060 default-time-zone = '+8:00' log_timestamps = SYSTEM log-bin = binlog_format=row binlog_checksum=NONE skip-name-resolve log_slave_updates = 1 gtid-mode=ON enforce-gtid-consistency=on default_authentication_plugin=mysql_native_password max_allowed_packet = 500M master_info_repository=TABLE relay_log_info_repository=TABLE relay_log=lhrmgr60-relay-bin transaction_write_set_extraction=XXHASH64 loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" loose-group_replication_start_on_boot=OFF loose-group_replication_local_address= "192.168.68.60:33061" loose-group_replication_group_seeds= "192.168.68.60:33061,192.168.68.61:33061,192.168.68.62:33061" loose-group_replication_bootstrap_group=OFF loose-group_replication_ip_whitelist="192.168.68.60,192.168.68.61,192.168.68.62" report_host=192.168.68.60 report_port=3306 EOF -- 節點2 cat > /etc/my.cnf <<"EOF" [mysqld] user=mysql port=3306 character_set_server=utf8mb4 secure_file_priv= server-id = 802233061 default-time-zone = '+8:00' log_timestamps = SYSTEM log-bin = binlog_format=row binlog_checksum=NONE log_slave_updates = 1 gtid-mode=ON enforce-gtid-consistency=ON skip_name_resolve default_authentication_plugin=mysql_native_password max_allowed_packet = 500M master_info_repository=TABLE relay_log_info_repository=TABLE relay_log=lhrmgr61-relay-bin transaction_write_set_extraction=XXHASH64 loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" loose-group_replication_start_on_boot=OFF loose-group_replication_local_address= "192.168.68.61:33061" loose-group_replication_group_seeds= "192.168.68.60:33061,192.168.68.61:33061,192.168.68.62:33061" loose-group_replication_bootstrap_group=OFF loose-group_replication_ip_whitelist="192.168.68.60,192.168.68.61,192.168.68.62" report_host=192.168.68.61 report_port=3306 EOF -- 節點3 cat > /etc/my.cnf <<"EOF" [mysqld] user=mysql port=3306 character_set_server=utf8mb4 secure_file_priv= server-id = 802233062 default-time-zone = '+8:00' log_timestamps = SYSTEM log-bin = binlog_format=row binlog_checksum=NONE log_slave_updates = 1 gtid-mode=ON enforce-gtid-consistency=ON skip_name_resolve default_authentication_plugin=mysql_native_password max_allowed_packet = 500M master_info_repository=TABLE relay_log_info_repository=TABLE relay_log=lhrmgr62-relay-bin transaction_write_set_extraction=XXHASH64 loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" loose-group_replication_start_on_boot=OFF loose-group_replication_local_address= "192.168.68.62:33061" loose-group_replication_group_seeds= "192.168.68.60:33061,192.168.68.61:33061,192.168.68.62:33061" loose-group_replication_bootstrap_group=OFF loose-group_replication_ip_whitelist="192.168.68.60,192.168.68.61,192.168.68.62" report_host=192.168.68.62 report_port=3306 EOF

      2.4、重啟MySQL環境

      -- 重啟MySQL systemctl restart mysqld -- 進入MySQL docker exec -it mysql8022mgr33060 bash docker exec -it mysql8022mgr33060 mysql -uroot -plhr -- 遠程連接MySQL mysql -uroot -plhr -h192.168.66.35 -P33060 mysql -uroot -plhr -h192.168.66.35 -P33061 mysql -uroot -plhr -h192.168.66.35 -P33062 -- 查看MySQL日志 docker logs -f --tail 10 mysql8022mgr33060 docker logs -f --tail 10 mysql8022mgr33061 docker logs -f --tail 10 mysql8022mgr33062 -- 查看MySQL的主機名、server_id和server_uuid mysql -uroot -plhr -h192.168.66.35 -P33060 -e "select @@hostname,@@server_id,@@server_uuid" mysql -uroot -plhr -h192.168.66.35 -P33061 -e "select @@hostname,@@server_id,@@server_uuid" mysql -uroot -plhr -h192.168.66.35 -P33062 -e "select @@hostname,@@server_id,@@server_uuid"

      結果:

      C:\Users\lhrxxt>mysql -uroot -plhr -h192.168.66.35 -P33060 -e "select @@hostname,@@server_id,@@server_uuid" mysql: [Warning] Using a password on the command line interface can be insecure. +------------+-------------+--------------------------------------+ | @@hostname | @@server_id | @@server_uuid | +------------+-------------+--------------------------------------+ | lhrmgr60 | 802233060 | 44c693d8-80bb-11eb-b4bb-0242c0a8443c | +------------+-------------+--------------------------------------+ C:\Users\lhrxxt>mysql -uroot -plhr -h192.168.66.35 -P33061 -e "select @@hostname,@@server_id,@@server_uuid" mysql: [Warning] Using a password on the command line interface can be insecure. +------------+-------------+--------------------------------------+ | @@hostname | @@server_id | @@server_uuid | +------------+-------------+--------------------------------------+ | lhrmgr61 | 802233061 | 408acdb5-80bc-11eb-97a7-0242c0a8443d | +------------+-------------+--------------------------------------+ C:\Users\lhrxxt>mysql -uroot -plhr -h192.168.66.35 -P33062 -e "select @@hostname,@@server_id,@@server_uuid" mysql: [Warning] Using a password on the command line interface can be insecure. +------------+-------------+--------------------------------------+ | @@hostname | @@server_id | @@server_uuid | +------------+-------------+--------------------------------------+ | lhrmgr62 | 802233062 | 9d5c3e3e-80bc-11eb-a0b2-0242c0a8443e | +------------+-------------+--------------------------------------+

      2.5、安裝MGR插件(所有節點執行)

      mysql -uroot -plhr -h192.168.66.35 -P33060 INSTALL PLUGIN group_replication SONAME 'group_replication.so'; -- 如果MySQL版本大于8.0.17,那么建議再安裝clone插件 INSTALL PLUGIN clone SONAME 'mysql_clone.so'; show plugins;

      2.6、設置復制賬號

      -- 在主庫(192.168.68.60)上執行 CREATE USER repl@'%' IDENTIFIED BY 'lhr'; GRANT REPLICATION SLAVE,BACKUP_ADMIN ON *.* TO repl@'%'; FLUSH PRIVILEGES; -- 所有節點執行 CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='lhr' FOR CHANNEL 'group_replication_recovery';

      2.7、啟動MGR,在主庫(192.168.68.60)上執行

      SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF; -- 查看MGR組信息 SELECT * FROM performance_schema.replication_group_members;

      2.8、其他節點加入MGR,在從庫(192.168.68.61,192.168.68.62)上執行

      reset master; START GROUP_REPLICATION; -- 查看MGR組信息 SELECT * FROM performance_schema.replication_group_members;

      執行結果:

      MySQL高可用之MGR+Consul架構部署(mysql mgr配置)

      MySQL [(none)]> SELECT * FROM performance_schema.replication_group_members; +---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 408acdb5-80bc-11eb-97a7-0242c0a8443d | 192.168.68.61 | 3306 | ONLINE | SECONDARY | 8.0.22 | | group_replication_applier | 44c693d8-80bb-11eb-b4bb-0242c0a8443c | 192.168.68.60 | 3306 | ONLINE | PRIMARY | 8.0.22 | | group_replication_applier | 9d5c3e3e-80bc-11eb-a0b2-0242c0a8443e | 192.168.68.62 | 3306 | ONLINE | SECONDARY | 8.0.22 | +---------------------------+--------------------------------------+---------------+-------------+--------------+-------------+----------------+ 3 rows in set (0.05 sec)

      可以看到,3個節點狀態為online,并且主節點為192.168.68.60,只有主節點可以寫入,其他節點只讀,MGR單主模式搭建成功。

      2.9、測試同步

      在主節點上執行以下命令,然后在其它節點查詢:

      create database lhrdb; CREATE TABLE lhrdb.`tb1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `hostname` varchar(100) DEFAULT NULL, `server_id` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; insert into lhrdb.tb1(hostname,server_id) select @@hostname,@@server_id; select * from lhrdb.tb1; -- 3個節點查詢出來的值一樣 MySQL [(none)]> select * from lhrdb.tb1; +----+----------+-----------+ | id | hostname | server_id | +----+----------+-----------+ | 1 | lhrmgr60 | 802233060 | +----+----------+-----------+ 1 row in set (0.05 sec)

      三、搭建Consul Server集群

      3.1、申請3臺Consul Server主機

      docker rm -f lhrconsulmgr66 lhrconsulmgr67 lhrconsulmgr68 docker run -d --name lhrconsulmgr66 -h lhrconsulmgr66 \ --net=mhalhr --ip 192.168.68.66 \ -p 8566:8500 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.0 \ /usr/sbin/init docker run -d --name lhrconsulmgr67 -h lhrconsulmgr67 \ --net=mhalhr --ip 192.168.68.67 \ -p 8567:8500 \ --privileged=true lhrbest/lhrcentos76:8.0 \ /usr/sbin/init docker run -d --name lhrconsulmgr68 -h lhrconsulmgr68 \ --net=mhalhr --ip 192.168.68.68 \ -p 8568:8500 \ --privileged=true lhrbest/lhrcentos76:8.0 \ /usr/sbin/init docker cp consul_1.9.4_linux_amd64.zip lhrconsulmgr66:/ docker cp consul_1.9.4_linux_amd64.zip lhrconsulmgr67:/ docker cp consul_1.9.4_linux_amd64.zip lhrconsulmgr68:/ docker network connect bridge lhrconsulmgr66 docker network connect bridge lhrconsulmgr67 docker network connect bridge lhrconsulmgr68 docker restart lhrconsulmgr66 lhrconsulmgr67 lhrconsulmgr68

      3.2、安裝Consul Server

      docker exec -it lhrconsulmgr66 bash docker exec -it lhrconsulmgr67 bash docker exec -it lhrconsulmgr68 bash unzip consul_1.9.4_linux_amd64.zip mv consul /usr/local/bin/ mkdir -p /consul/logs/ -- 66節點 啟動 nohup consul agent -server -bootstrap-expect 3 -bind=192.168.68.66 -client=0.0.0.0 -data-dir=/consul/data \ -node=n66 -ui >> /consul/logs/consul.log 2>&1 & -- 67節點 啟動 nohup consul agent -server -bootstrap-expect 3 -bind=192.168.68.67 -client=0.0.0.0 -data-dir=/consul/data \ -node=n67 -ui >> /consul/logs/consul.log 2>&1 & -- 68節點 啟動 nohup consul agent -server -bootstrap-expect 3 -bind=192.168.68.68 -client=0.0.0.0 -data-dir=/consul/data \ -node=n68 -ui >> /consul/logs/consul.log 2>&1 & -- 67和68節點加入集群 consul join 192.168.68.66 -- 查詢集群狀態 [root@lhrconsulmgr66 /]# consul members Node Address Status Type Build Protocol DC Segment n66 192.168.68.66:8301 alive server 1.9.4 2 dc1 n67 192.168.68.67:8301 alive server 1.9.4 2 dc1 n68 192.168.68.68:8301 alive server 1.9.4 2 dc1 [root@lhrconsulmgr66 /]# consul operator raft list-peers Node ID Address State Voter RaftProtocol n66 719e2a32-5c4b-bd0f-35ef-9ac11a8e79e0 192.168.68.66:8300 leader true 3 n67 f80e2542-3d30-ca5a-af79-08879723c882 192.168.68.67:8300 follower true 3 n68 43520b16-1b65-7d22-4172-6c2822070a44 192.168.68.68:8300 follower true 3

      為了后續啟動方便,我們使用參數文件:

      -- 66節點,其它節點修改node_name、advertise_addr和bind_addr即可: mkdir -p /etc/consul.d/ pkill -9 consul cat > /etc/consul.d/server.json <<"EOF" { "data_dir": "/consul/data", "datacenter": "dc1", "node_name": "n66", "enable_syslog": true, "log_level": "INFO", "server": true, "advertise_addr":"192.168.68.66", "bootstrap_expect": 3, "bind_addr": "192.168.68.66", "client_addr": "0.0.0.0", "retry_join": ["192.168.68.66","192.168.68.67","192.168.68.68"], "retry_interval": "10s", "rejoin_after_leave": true, "start_join": ["192.168.68.66","192.168.68.67","192.168.68.68"] , "ui": true } EOF nohup consul agent -config-dir=/etc/consul.d > /consul/consul.log &

      3.3、web訪問

      http://192.168.66.35:8566

      http://192.168.66.35:8567

      http://192.168.66.35:8568

      四、在MySQL節點上安裝Consul Client

      4.1、安裝Consul Client

      docker cp consul_1.9.4_linux_amd64.zip mysql8022mgr33060:/ docker cp consul_1.9.4_linux_amd64.zip mysql8022mgr33061:/ docker cp consul_1.9.4_linux_amd64.zip mysql8022mgr33062:/ docker exec -it mysql8022mgr33060 bash unzip consul_1.9.4_linux_amd64.zip mv consul /usr/local/bin/ mkdir -p /consul/logs/ -- mgr60配置文件,其它節點修改bind_addr和node_name即可 mkdir -p /etc/consul.d/ cat > /etc/consul.d/client.json <<"EOF" { "data_dir": "/data/consul", "enable_script_checks": true, "bind_addr": "192.168.68.60", "retry_join": ["192.168.68.66","192.168.68.67","192.168.68.68"], "retry_interval": "10s", "rejoin_after_leave": true, "start_join": ["192.168.68.66","192.168.68.67","192.168.68.68"] , "node_name": "MGR60" } EOF nohup consul agent -config-dir=/etc/consul.d > /consul/consul.log &

      查詢狀態:

      [root@lhrconsulmgr66 /]# consul members Node Address Status Type Build Protocol DC Segment n66 192.168.68.66:8301 alive server 1.9.4 2 dc1 n67 192.168.68.67:8301 alive server 1.9.4 2 dc1 n68 192.168.68.68:8301 alive server 1.9.4 2 dc1 MGR60 192.168.68.60:8301 alive client 1.9.4 2 dc1 MGR61 192.168.68.61:8301 alive client 1.9.4 2 dc1 MGR62 192.168.68.62:8301 alive client 1.9.4 2 dc1 [root@lhrconsulmgr66 /]# consul operator raft list-peers Node ID Address State Voter RaftProtocol n66 719e2a32-5c4b-bd0f-35ef-9ac11a8e79e0 192.168.68.66:8300 follower true 3 n67 f80e2542-3d30-ca5a-af79-08879723c882 192.168.68.67:8300 leader true 3 n68 43520b16-1b65-7d22-4172-6c2822070a44 192.168.68.68:8300 follower true 3

      4.2、在Consul client的3個節點上編寫檢測primay腳本和檢測slave腳本

      -- 檢測腳本【master】 mkdir -p /data/consul/shell/ cat > /data/consul/shell/check_mysql_mgr_master.sh <<"EOF" #!/bin/bash port=3306 user="root" passwod="lhr" comm="/usr/bin/mysql -u$user -hlocalhost -P $port -p$passwod" value=`$comm -Nse "select 1"` primary_member=`$comm -Nse "select variable_value from performance_schema.global_status WHERE VARIABLE_NAME= 'group_replication_primary_member'"` server_uuid=`$comm -Nse "select variable_value from performance_schema.global_variables where VARIABLE_NAME='server_uuid';"` # 判斷MySQL是否存活 if [ -z $value ] then echo "mysql $port is down....." exit 2 fi # 判斷節點狀態,是否存活 node_state=`$comm -Nse "select MEMBER_STATE from performance_schema.replication_group_members where MEMBER_ID='$server_uuid'"` if [ $node_state != "ONLINE" ] then echo "MySQL $port state is not online...." exit 2 fi # 判斷是不是主節點 if [[ $server_uuid == $primary_member ]] then echo "MySQL $port Instance is master ........" exit 0 else echo "MySQL $port Instance is slave ........" exit 2 fi EOF -- 檢測腳本【slave】 cat > /data/consul/shell/check_mysql_mgr_slave.sh <<"EOF" #!/bin/bash port=3306 user="root" passwod="lhr" comm="/usr/bin/mysql -u$user -hlocalhost -P $port -p$passwod" value=`$comm -Nse "select 1"` primary_member=`$comm -Nse "select variable_value from performance_schema.global_status WHERE VARIABLE_NAME= 'group_replication_primary_member'"` server_uuid=`$comm -Nse "select variable_value from performance_schema.global_variables where VARIABLE_NAME='server_uuid';"` # 判斷mysql是否存活 if [ -z $value ] then echo "mysql $port is down....." exit 2 fi # 判斷節點狀態 node_state=`$comm -Nse "select MEMBER_STATE from performance_schema.replication_group_members where MEMBER_ID='$server_uuid'"` if [ $node_state != "ONLINE" ] then echo "MySQL $port state is not online...." exit 2 fi # 判斷是不是主節點 if [[ $server_uuid != $primary_member ]] then echo "MySQL $port Instance is slave ........" exit 0 else node_num=`$comm -Nse "select count(*) from performance_schema.replication_group_members"` # 判斷如果沒有任何從節點,主節點也注冊從角色服務。 if [ $node_num -eq 1 ] then echo "MySQL $port Instance is slave ........" exit 0 else echo "MySQL $port Instance is master ........" exit 2 fi fi EOF

      賦權:

      chmod +x /data/consul/shell/check_mysql_mgr_master.sh chmod +x /data/consul/shell/check_mysql_mgr_slave.sh

      4.3、service配置

      官網配置參考:https://www.consul.io/docs/discovery/services

      在3臺MySQL節點上都需要操作,注意修改address地址為本機地址:

      cat > /etc/consul.d/rw-mysql-mgr-server-lhr.json <<"EOF" { "service": { "name": "rw-mysql-mgr-server-lhr", "tags": ["MGR-Master"], "address": "192.168.68.60", "port": 3306, "check": { "args": ["/data/consul/shell/check_mysql_mgr_master.sh"], "interval": "5s" } } } EOF cat > /etc/consul.d/r-mysql-mgr-server-lhr.json <<"EOF" { "service": [ { "name": "r-mysql-mgr-server-lhr", "tags": ["MGR-Slave"], "address": "192.168.68.60", "port": 3306, "check": { "args": ["/data/consul/shell/check_mysql_mgr_slave.sh"], "interval": "5s" } } ] } EOF -- 檢查配置文件是否正常 consul validate /etc/consul.d/ -- 重新加載配置文件 consul reload -- 檢查配置結果 [root@lhrmgr60 ~]# consul catalog services consul r-mysql-mgr-server-lhr rw-mysql-mgr-server-lhr

      注意:由于每臺mysql server 上都有master、slave 檢測腳本、而mysql server 只能是master 或者slave、所以存在失敗的檢測,master檢測只有一個成功,slave檢測只有一個失敗 。

      所有服務:

      主庫連接:

      從庫連接:

      4.4、service測試

      yum install -y bind-utils bind bind-chroot dnsmasq dig @192.168.68.66 -p 8600 r-mysql-mgr-server-lhr.service.consul a dig @192.168.68.66 -p 8600 rw-mysql-mgr-server-lhr.service.consul a dig @127.0.0.1 -p 8600 MGR60.node.consul dig @127.0.0.1 -p 8600 MGR61.node.consul dig @127.0.0.1 -p 8600 MGR62.node.consul

      測試結果:

      [root@lhrmgr60 ~]# dig @192.168.68.66 -p 8600 r-mysql-mgr-server-lhr.service.consul a ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.4 <<>> @192.168.68.66 -p 8600 r-mysql-mgr-server-lhr.service.consul a ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7862 ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;r-mysql-mgr-server-lhr.service.consul. IN A ;; ANSWER SECTION: r-mysql-mgr-server-lhr.service.consul. 0 IN A 192.168.68.62 r-mysql-mgr-server-lhr.service.consul. 0 IN A 192.168.68.61 ;; Query time: 0 msec ;; SERVER: 192.168.68.66#8600(192.168.68.66) ;; WHEN: Wed Mar 10 10:52:12 CST 2021 ;; MSG SIZE rcvd: 98 [root@lhrmgr60 ~]# dig @192.168.68.66 -p 8600 rw-mysql-mgr-server-lhr.service.consul A ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.4 <<>> @192.168.68.66 -p 8600 rw-mysql-mgr-server-lhr.service.consul a ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13129 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;rw-mysql-mgr-server-lhr.service.consul. IN A ;; ANSWER SECTION: rw-mysql-mgr-server-lhr.service.consul. 0 IN A 192.168.68.60 ;; Query time: 0 msec ;; SERVER: 192.168.68.66#8600(192.168.68.66) ;; WHEN: Wed Mar 10 10:52:17 CST 2021 ;; MSG SIZE rcvd: 83

      可以看到,r-mysql-mgr-server-lhr.service.consul解析出來的地址是192.168.68.61和192.168.68.62,即2個從庫;而rw-mysql-mgr-server-lhr.service.consul解析出來的地址為192.168.68.60,即主庫。

      五、配置DNS解析域名

      App端配置域名服務器來解析consul后綴的域名,DNS解析及跳轉, 有多個方案:

      原內網dns服務器,做域名轉發,consul后綴的,都轉到consul server上

      dns全部跳到consul DNS服務器上,非consul后綴的,使用 recursors 屬性跳轉到原DNS服務器上

      dnsmaq 轉: server=/consul/192.168.X.X#8600 解析consul后綴的

      使用BIND配置DNS服務器

      這里只列舉dnsmasq這種方案,更多方法請參考官方文檔:https://learn.hashicorp.com/tutorials/consul/dns-forwarding

      5.1、使用dnsmasq來配置DNS解析

      在192.168.66.69上配置dnsmasq。

      docker rm -f lhrconsuldns69 docker run -d --name lhrconsuldns69 -h lhrconsuldns69 \ --net=mhalhr --ip 192.168.68.69 \ -p 53:53 \ -v /sys/fs/cgroup:/sys/fs/cgroup \ --privileged=true lhrbest/lhrcentos76:8.0 \ /usr/sbin/init docker network connect bridge lhrconsuldns69 docker exec -it lhrconsuldns69 bash yum install -y bind-utils bind bind-chroot dnsmasq echo " server=/consul/192.168.68.66#8600 server=/consul/192.168.68.67#8600 server=/consul/192.168.68.68#8600 " > /etc/dnsmasq.d/10-consul echo " server=114.114.114.114 server=8.8.8.8 server=223.5.5.5 " >> /etc/dnsmasq.conf -- 添加到所有機器,包括本機、3個client、3個server端等 echo "nameserver 192.168.68.69" > /etc/resolv.conf systemctl enable dnsmasq systemctl restart dnsmasq systemctl status dnsmasq dig @192.168.68.69 -p 53 r-mysql-mgr-server-lhr.service.consul a dig @192.168.68.69 -p 53 rw-mysql-mgr-server-lhr.service.consul a nslookup r-mysql-mgr-server-lhr.service.consul nslookup rw-mysql-mgr-server-lhr.service.consul ping r-mysql-mgr-server-lhr.service.consul -c 4 ping rw-mysql-mgr-server-lhr.service.consul -c 4

      MySQL 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何將cadt導入wps文檔
      下一篇:Excel拼寫檢查功能怎么用
      相關文章
      亚洲一卡二卡三卡四卡无卡麻豆| 久久久久亚洲av无码专区 | 久久精品国产亚洲AV无码麻豆| 国外亚洲成AV人片在线观看| 亚洲AV伊人久久青青草原| 亚洲AV无码国产精品永久一区| 亚洲午夜福利在线视频| 亚洲综合精品伊人久久| 伊人久久五月丁香综合中文亚洲| 国产成人精品日本亚洲网址| 色偷偷亚洲女人天堂观看欧| 亚洲同性男gay网站在线观看| 亚洲国产精品线观看不卡| 亚洲免费闲人蜜桃| 亚洲人成电影网站久久| 亚洲日本VA午夜在线影院| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲av成本人无码网站| 国产精品手机在线亚洲| 亚洲精品乱码久久久久久不卡| 国产黄色一级毛片亚洲黄片大全| 国产成人亚洲精品91专区手机| 国产中文在线亚洲精品官网| 亚洲女同成av人片在线观看 | 亚洲欧洲日本在线观看| 亚洲精品无码专区在线播放| 亚洲AV无码专区亚洲AV桃| 无码国产亚洲日韩国精品视频一区二区三区 | 亚洲人成网站免费播放| 国产精品国产亚洲区艳妇糸列短篇 | 亚洲不卡AV影片在线播放| 伊人久久亚洲综合| 久久精品国产亚洲AV网站| 亚洲综合图片小说区热久久| 亚洲AV无码成人专区| 久久亚洲AV成人无码国产电影 | 亚洲国产一区明星换脸| 亚洲人成中文字幕在线观看| 久久精品国产精品亚洲艾草网| 久久亚洲精品中文字幕| 亚洲AV成人噜噜无码网站|