2021年2月18日 星期四

sentinel + gateway

一、sentinel 下載

啟動命令:java -Dserver.port=9090 -jar sentinel-dashboard-1.8.1.jar
這裡和只有 sentinel 時一模一樣

二、maven

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
</dependency>

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
</dependency>


三、設定檔

server:
port: 8057
spring:
application:
name: sentinel-gateway-cloud
main:
allow-bean-definition-overriding: true # 因為報錯的提示,才加的
cloud:
sentinel:
transport:
port: 8719
dashboard: localhost:9090 #對應 sentinel port
eager: true
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
routes:
- id: sentinel_gateway_bruce
uri: lb://provider-cloud
predicates:
- Path=/xxx/**
filters:
- StripPrefix=1

※以上可以寫在 application.yml 或 nacos 之類的伺服器上


四、啟動

啟動專案時要加上 VM 參數 -Dcsp.sentinel.app.type=1


左邊是整合後的畫面;右邊是沒有整合的畫面

2021年2月15日 星期一

Mysql8 主從複製(Windows)

 一、安裝完注意事項

mysql 安裝完後,執行打 services.msc


在紅框按右鍵內容,綠框的路徑有 my.ini,有改過想生效要按紅框右鍵的重新啟動,我的路徑如下:

"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" MySQL80

注意 ProgramData 是隱藏資料夾,注意 [mysqld] 裡的 server-id 預設是 1,主和從必需不一樣

主還要在 [mysqld] 增加 binlog-do-db=bruce_test,bruce_test 為想複製的資料庫名稱,複製時是從當下複製,之前有的不會複製

如果有多個資料庫要複製,要寫多個 k=v,不是加逗號


二、網路

我使用 Oracle VM VirtualBox,必需先 ping 通

網路可以使用橋接介面卡或 NAT,兩個都是主機可上網就可以上網,但使用 NAT 時,虛擬機之間不能連線;而橋接都可以

關防火牆或開 port 使機器可以 ping 通


三、讓從機連主機

※主

SELECT * FROM mysql.user; 

可以看到所有使用者和權限

host 欄位:表示什麼 IP 可以連到 mysql server,預設是 localhost,將想給別人用的帳號(主)的 host 內容改成從的 IP,或者用 %,表示任何 IP 都可以連

plugin 欄位:預設是 caching_sha2_password,改成 mysql_native_password 才能被連



也可以新增使用者,這個使用者是要給從的 mysql 連的帳號

CREATE USER '帳號'@'%' IDENTIFIED BY '密碼';

ALTER USER '帳號'@'%' IDENTIFIED BY '密碼';

GRANT REPLICATION SLAVE ON *.* TO '帳號'@'%';

ALTER USER 'aaa'@'%' IDENTIFIED WITH mysql_native_password BY 'aaa';


update mysql.user set host='%' where user='root'; //aaa

show variables like '%safe_updates%';

SET SQL_SAFE_UPDATES=0;  // 預設安全性是開的(1),所以不能下修改的語法

FLUSH PRIVILEGES; // 改完後要重整

show master status; // 每次 flush privileges 後會不一樣


從機會用到 File 和 Position 欄位,Binlog_Do_DB 是要複製的資料庫、Binlog_Ignore_DB 是要忽略的資料庫


※從

從機打指令要下如下的語法才能連

mysql -uroot -p -h192.168.1.104 -P3306 --default-auth=mysql_native_password

mysql 指令在安裝目錄底下的 bin,也可增加環境變數

我的在 C:\Program Files\MySQL\MySQL Server 8.0\bin

有些語法在這一版還能用,但已經 deprecated 了,下面的語法,有註解的是 deprecated

// stop slave;
stop replica;


// change master to master_host='192.168.1.104',master_port=3306,master_user='bbb',master_password='bbb',master_log_file='BRUCE-HOME-bin.000015',master_log_pos=2357;

// 用 SOURCE_USER 和 SOURCE_PASSWORD 會有警告
CHANGE REPLICATION SOURCE to SOURCE_HOST='192.168.1.104',SOURCE_PORT=3306,SOURCE_USER='bbb',SOURCE_PASSWORD='bbb',SOURCE_LOG_FILE='BRUCE-HOME-bin.000015',SOURCE_LOG_POS=2357;

CHANGE REPLICATION SOURCE to SOURCE_HOST='192.168.1.104',SOURCE_PORT=3306,SOURCE_LOG_FILE='主的 FIle',SOURCE_LOG_POS=主的 Position;

// start slave;
start replica USER='bbb' PASSWORD='bbb';

show slave status; // 命令提示字元最後加個 \G,會比較好看
Slave_IO_Running 和 Slave_SQL_Running 為 Yes 就正確了
Slave_SQL_Running 為 No,通常都是 SOURCE_LOG_FILE、SOURCE_LOG_POS 不正確,要對應主的設定
Slave_IO_Running 為 Connecting 通常都是連線不正確,密碼錯誤、網路問題,還有主的一定要改成 mysql_native_password

如果有錯 last_sql_error、last_io_error 可以看到錯誤訊息
有錯要改必需先 stop replica --> 修改 --> start replica


主從複製在主機新增資料庫、表並 insert,從機也能看到就正確了,而在從機做的只有在從機能看到